问题总结2015/05/05

1、第三方提供的库不能使用。

调查方法:差分编译,对比连接后和编译后的差分情况;Debug单步调试,定位出错代码;由于是第三方库不能使用的原因,反编译辅助调查。

调查结果:本机编译后的R文件中的资源ID和Jar包中索引的资源ID(Jar包的.class文件中资源ID是固定值)不一致。

解决方法:(转)http://blog.csdn.net/p106786860/article/details/12152011

===========================================================

随着Android系统的日益发展和日渐成熟,各种平台的合作就日渐频繁。现在主要互联网公司,都退出了各种各样的插件功能。如第三方支付,第三方联合登陆和微博分享等等功能。 

 

 

在每个Android项目中,都会有一个R.java文件,该文件由ADT维护的,只要你将资源文件放到工程里,或者声明新的控件标识,ADT就会监测到,自动在R.java里注册一个ID方便使用。 

 

[java] view plaincopy
  1. public final class R {   
  2.     public static final class anim {   
  3.         public static final int cycle_7=0x7f040000;   
  4.         … …    
  5.     }   
  6.     public static final class array {   
  7.         public static final int bank_type=0x7f050001;   
  8.         … …    
  9.     }   
  10.     public static final class id{   
  11.         public static final int account_warning_text_color=0x7f060027;   
  12.         public static final int account_withdraw_text_color=0x7f060026;   
  13.         … ...   
  14.     }   
  15.     … ...   
  16. }   

Android布局文件中的组件被调用时需要定义组件的android:id属性,android:id属性只能接受资源类型的值,就是必须以@开头的值。们声明一个控件的ID有如下几种方式: 

@+id =0x7f070007; 

 

[html] view plaincopy
  1. <TextView             
  2.    android:id="@+id/noteInfo"            
  3.    android:layout_width="match_parent"            
  4.    android:layout_height="wrap_content"/>   

), 

 

[html] view plaincopy
  1. <FrameLayout   
  2.     android:id="@android:id/tabcontent"   
  3.     android:layout_width="fill_parent"   
  4.     android:layout_height="fill_parent" >   
  5. </FrameLayout>   

  

 

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8">    
  2. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"      
  3.     android:id="@android:id/tabhost"    
  4.     android:layout_width="fill_parent"    
  5.     android:layout_height="fill_parent" >    
  6.     <LinearLayout    
  7.         android:orientation="vertical"    
  8.         android:layout_width="fill_parent"   
  9.         android:layout_height="fill_parent" >   
  10.         <TabWidget   
  11.             android:id="@android:id/tabs"               
  12.             android:layout_width="fill_parent"              
  13.             android:layout_height="wrap_content" />   
  14.         <FrameLayout   
  15.             android:id="@android:id/tabcontent"              
  16.             android:layout_width="fill_parent"               
  17.             android:layout_height="fill_parent" >   
  18.         </FrameLayout>   
  19.     </LinearLayout>   
  20. </TabHost>   

 

 

/res/ 

文件:  = () 

 

[html] view plaincopy
  1. <resources>   
  2.     <item name="HorizontalScrollView01" type="id"/>   
  3.     <item name="LinearLayout0000" type="id"/>   
  4.     <item name="LinearLayout01" type="id"/>   
  5. </resources>   

public.xml文件:描述attr、id、drawable等所指定的一个32的id值,即id值。 

 

[html] view plaincopy
  1. <resources>   
  2.     <public id="0x7f040000" name="cycle_7" type="anim" />   
  3.     <public id="0x7f040002" name="layout_animation_image" type="id" />   
  4.     <public id="0x7f040003" name="layout_animation_linear" type="color" />   
  5. </resources>   


基础的知识已经准备完毕,现在我们来描述原理。当我们将src目录下的源码通过Eclipse打出Jar后,源码代码中的如()中的R.id.id_name部分,都会被替换成此时在R文件中生成的id_name对应的ID值(如果有兴趣的话,可以用反编译软件可以查看到)。 

 

,@+id/ static final  =0x7f080001。当时当你将Jar提供给第三方的时候,在它的机器上生成的ID值可能就不是0x7f080001,就会出现由于Jar中固定的ID值与当前R文件中生成的ID值不一致,导致() 

 

通过对上面只是的了解,我们可以用如下方式解决问题:通过使用ids.xml文件和public.xml文件,定义好固定的ID值,将声明控件的方式由@+id改为@id形式,这样引用控件和资源的id根据ids.xml和public.xml的声明,在R文件中声明为固定的值。一直与Jar中的ID值保持一致。 

 

 

 

1.重新编译项目,生成R文件。 


2.将R文件拷贝,根据R文件中的信息,获得ids.xml和public.xml文件中的内容。 

文件格式:只需声明@id的对应的R文件中id类型 


文件格式:需要声明R文件中所有资源的类型 


 

id的形式转换成@id形式 

 


4.使用Eclipse的Export功能,将项目src目录下的源码(注仅仅是src目录下的源码,其它资源我们将以库项目的形式提供给用户)导出Jar包,提供给用户调用。 


 = () 

5.我们删除该项目src下的源代码,将该项目设置为库项目,以供客户引入或许Jar包中的布局,图片等资源。 


到这里我们为客户准备的东西已经完毕,1.srcjar.jar包,2.plugin资源库项目。 

并引入我们的plugin资源库项目 


7.将plugin资源库项目的AndroidManifest.xml中的内容,添加到客户项目中,并在客户端项目中调用srcjar.jar包中的入口Activity即可。 

注意:如果在你的项目中存在调用本项目目录调用资源,如assets下的apk或者mp3等文件,可以拷贝到客户端相应的目录即可。 

 

 

 

===========================================================

 

2、表单提交时,提示数据通信异常(源代码中的错误提示有误导......坑爹=。=)。

调查方法:辅助fidder抓包工具,监控表单提高及服务器响应情况。

调查结果:服务器响应失败。提交的表单中有不合法的数据。
前端与后端协作时要注重接口的对接(一切以接口文档为准),出现问题时首先确保提交和返回的数据正确,然后在展开调查。

相关资料:

http://blog.csdn.net/xyz_lmn/article/details/8808169

http://www.cnblogs.com/tankxiao/archive/2012/02/06/2337728.html

http://blog.csdn.net/ithomer/article/details/6727581

http://blog.isming.me/2015/01/18/android-anti-decompile/

http://blog.csdn.net/vipzjyno1/article/details/23542617

转载于:https://www.cnblogs.com/clong2010/p/4479657.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php mysql备份还原类_PHP实现MYSQL备份还原

/*** mysql备份*/classMysqlBackup {function __construct($filename, $config) {$this->setFile($filename);$this->con($config);}/*** 输出信息*/private function info($code, $msg) {$json json_encode(array(code > $code, msg > $msg),JSON_UNESCAPED_UNIC…

一个屌丝程序猿的人生(二十七)

“林萧&#xff0c;妈回去了。你一个人在北京照顾好自己&#xff0c;缺钱了给我打电话。”韩霞放下车窗&#xff0c;面色担忧的跟林萧告别。方才来宋刚学校之前&#xff0c;武达浪已经独自一人离开&#xff0c;如今事情已经办妥&#xff0c;韩霞也要赶回老家去了。 “放心吧&am…

采用HttpModules来重写URLS

首先写一个处理URLs重写的类&#xff0c;并且这个类必须继承IHttpHandler接口&#xff0c;以博客园的程序为例&#xff1a; public class UrlReWriteModule : System.Web.IHttpModule { public void Init(HttpApplication context) { context.BeginRequest new EventHandler(c…

js的下拉刷新和上拉加载,基于iScroll v4.2.5

html部分 <div id"wrapper" style"height: 100%"><div id"scroller"><div id"pullDown"></div><ul id"thelist"><li>我是三冰 1</li><li>我是三冰 2</li><li>…

mysql gtid坑_通过mysqlbinlog --skip-gtids恢复后再备份可能造成的坑

版本[rootuz22199 backup]# innobackupex --versioninnobackupex version 2.4.8 Linux (x86_64) (revision id: 97330f7)[rootuz22199 backup]# mysql -e"select version"------------| version |------------| 5.7.18-log |------------源库表结构与数据rootmysqldb…

SqlHelper模板

在实际开发中&#xff0c;我们不会直接使用拼写SQL语句的方法进行数据库操作&#xff0c;而是使用参数化的方法进行数据库操作&#xff0c;这样做的好处很多&#xff0c;不仅提高了程序的健壮性&#xff0c;同时也避免的SQL注入的问题。在这里&#xff0c;笔者为初学者提供一个…

164. Maximum Gap

题目&#xff1a;Given an unsorted array, find the maximum difference between the successive elements in its sorted form. Try to solve it in linear time/space. Return 0 if the array contains less than 2 elements. You may assume all elements in the array are…

java声明和初始化数组_Java 中初始化数组

数组是一种有用的数据类型&#xff0c;用于管理在连续内存位置中建模最好的集合元素。下面是如何有效地使用它们。-- Chris Hermansen&#xff08;作者&#xff09;有使用 C 或者 FORTRAN 语言编程经验的人会对数组的概念很熟悉。它们基本上是一个连续的内存块&#xff0c;其中…

Java第二次实验报告——Java面向对象程序设计

北京电子科技学院&#xff08;BESTI&#xff09;实 验 报 告课程名称&#xff1a;java程序设计实验 班级&#xff1a;1352 姓名&#xff1a;洪韶武 学号&#xff1a;20135219成绩&#xff1a; 指导教师&#xff1a;娄嘉鹏…

IOS 多线程04-GCD详解 底层并发 API

IOS 多线程04-GCD详解 底层并发 API 注&#xff1a;本人是翻译过来&#xff0c;并且加上本人的一点见解。 前言 想要揭示出表面之下深层次的一些可利用的方面。这些底层的 API 提供了大量的灵活性&#xff0c;随之而来的是大量的复杂度和更多的责任。在我们的文章常见的后台实践…

类初始化的一道面试题

下面的代码counter1,counter2输出的结果是什么&#xff0c;把第10行放到12行后面&#xff0c;ounter1,counter2输出的结果是什么&#xff1f; 为什么&#xff1f; 1 public class Test {2 public static void main(String[] args) {3 System.out.println(Singleton…

mac pandas文件路径_Mac进阶必看:如何利用Automator快速获取文件路径

在重装mac os系统后&#xff0c;有的小伙伴会选择手动恢复数据&#xff0c;但是却发现一些软件比如FTP、iterm2、foxmail等这些软件的配置信息没有了&#xff0c;其实数据并没有丢失哦&#xff01;一般情形下数据都会在/Users/dcm/Library下&#xff0c;但是Mac默认是不显示这些…

深入分析Spring 与 Spring MVC容器

spring官方文档中对web容器的说明spring配置文件默认名字——applicationContext.xml参考链接&#xff1a;https://www.cnblogs.com/hujunzheng/p/5673377.htmlSpring的启动过程&#xff1a;首先&#xff0c;对于一个web应用&#xff0c;其部署在web容器中&#xff0c;web容器提…

mysql jpa 批注 视图_通过JPA注解映射视图的实体类 jpa 视图 无主键 @Query注解的用法(Spring Data JPA) jpa 使用sql语句...

参考: https://blog.csdn.net/qq465235530/article/details/68064074https://www.cnblogs.com/zj0208/p/6008627.html这里主要说一下怎么用jpa映射一个视图的实体类&#xff0c;其实跟表映射一样&#xff0c;就是需要添加一个空的主键id标识package com.cf.bus.core.rs.templat…

笨办法学C 练习45:一个简单的TCP/IP客户端

练习45&#xff1a;一个简单的TCP/IP客户端 原文&#xff1a;Exercise 45: A Simple TCP/IP Client 译者&#xff1a;飞龙 我打算使用RingBuffer来创建一个非常简单的小型网络测试工具&#xff0c;叫做netclient。为此我需要向Makefile添加一些工具&#xff0c;来处理bin/目录下…

Cppunit 源码 SynchronizedObject

运用C的构造&#xff0c;析构进行&#xff0c;加锁解锁。在函数进入的时候定义临时变量。任何一个分支推出的时候都会调用析构函数。避免多分支出现的问题。 1 #ifndef CPPUNIT_SYNCHRONIZEDOBJECT_H2 #define CPPUNIT_SYNCHRONIZEDOBJECT_H3 4 #include <cppunit/Portabil…

hive安装需要安装mysql区别_HIVE安装系列之一:在Linux中安装mysql,为其作为hive的metastore做准备...

安装mysql的Linux机器是Centos6的系统&#xff0c;机器名字叫combanc05mysql我采用的是5.5版本。安装过程中需要解决新旧版的冲突问题&#xff0c;并允许mysql被远程访问。以便其作为hive的元数据仓库顺利运行。下载到mysql在linux中安装mysql&#xff0c;首先可以到官网去找Li…

数据预处理和特征工程

一、数据预处理 1.数据采集 2.数据格式化&#xff08;存储格式等&#xff09; 3.数据清洗&#xff1a;去掉脏数据 简单直观可以看出的不可能数据 组合或统计属性判定 缺失值处理 1.删除元祖&#xff1a;删除这一条记录或者一列特征&#xff0c;适合记录或者特征占总样本比例很小…

个人作业五:四则运算二

四则运算2 一、设计思路&#xff1a; 1、题目避免重复&#xff1a; (1)利用系统时间来产生随机数&#xff0c;重复率会降低。 (2)建立链表&#xff0c;逐个判断。可读取写入文件。 2、可定制&#xff08;数量/打印方式&#xff09;&#xff1a; (1)格式有默认值; (2)可以选择重…

javascript继承模式原理与示例深入剖析

原型链ECMAScript 中描述了原型链的概念&#xff0c;并将原型链作为实现继承的主要方法。 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。简单回顾一下构造函数、原型和实例的关系&#xff1a;每个构造函数都有一个原型对象&#xff0c;原型对象都包含一…