问题总结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

时间: 2024-08-28 02:13:19

问题总结2015/05/05的相关文章

2015.09.05 C++中类的static与const成员

static 对于特定类类型的全体对象而言,访问一个全局对象有时是必要的.也许,在程序的任意点需要统计已创建的特定类类型对象的数量:或者,全局对象可能是指向类的错误处理例程的一个指针:或者,它是指向类类型对象的内在自由存储区的一个指针.然而,全局对象会破坏封装:对象需要支持特定类抽象的实现.如果对象是全局的,一般的用户代码就可以修改这个值.类可以定义类 静态成员,而不是定义一个可普遍访问的全局对象.通常,非 static 数据成员存在于类类型的每个对象中.不像普通的数据成员,static 数据成

2015.09.05 组成原理笔记

一二.概论 三.系统总线 四.存储器 1. 存储器层次结构: 寄存器 缓存(Cache) 主存 辅存(磁盘,磁带) 2. 静态RAM[坑] 动态RAM[坑] ROM 只读存储器 PROM (一次性)可编程只读存储器 EPROM 可擦除可编程只读存储器 EEPROM 电擦除可编程只读存储器 Flash Memory 闪存 3. Cache地址映射[坑]

2015.12.05

网页的组成 网页是由HTML,CSS,JavaSript组成. html英文全称:Hyper Text Markup Language        中文全称:超文本标记语言,只能用Web浏览器显示出来. html---->结构,决定网页结构和内容.   css----->样式,决定网页美观. JavaScript---->行为,决定网页的交互. HTML标签虽对大小写不敏感,但是使用大写会产生不可预料的错误:建议使用小写,还有Html标签一般都是成对出现,哪怕有些特定标签只有一个但也会

2015.09.05 网络笔记

IPv4地址 {<网络号><主机号>} 主机号全为零的表示网络本身,全为1的表示网络的广播地址 A类:1~126,网络号为第一个字节 B类:128~191,网络号为前两个字节 C类:192~223,网络号为前三个字节 D类:224~239,多播地址 私有IP地址(可以被LAN重复使用) A类:10 B类:172.16~172.31 D类:192.168

java之enum枚举(2015年05月28日)

背景: 今天启动了一个新的项目,由于要从之前的旧项目中拿过来一些代码,所以就看了下公司之前项目代码,发现有定义的常量类,也有枚举类,然后就在想着两者的功能差不多,那他们之间到底有什么区别呢,所以就决定了解下enum枚举   一.简介 Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型. 二.基本用法 1.作为常量使用 一个完整的枚举类型示例 /** * 枚举 * @author Dreyer * @since 1.0 * @dat

1、关于Boolean(2015年05月30日)

背景:刚在看Effective Java,看到一段关于Boolean提供一个返回实例的静态方法的例子,便去看了下Boolean的源码,发现有些内容是之前没注意到的,于是便有了下面这些. 1. Boolean类将基本类型boolean的值包装在一个对象中,一个Boolean对象之包含一个类型为boolean的字段,摘自源码: /** * The value of the Boolean. * * @serial */ private final boolean value; Boolean还提供了

回档|2015.3.05

这篇文章,是看到很多人看了柴静环保演讲的评论之后有感而发,本来是一篇散文,但一不小心就写多了.只好分条叙述以求明晰. 一.关注的焦点应该在哪里? 生物书上有一句“名言”:我们不是从先辈那里继承了地球,而是从儿孙那里借用了地球.这让很多人有了一种感觉,环保事业是为了后代的,是伟大 的.看到这句话,这些人,我的唯一反应是笑,笑这句话,这些人的奇怪.这是什么逻辑?意思是地球是属于我们的后人的?对于现在的中国人来说,这种心态真的 很没意思.仔细想想,你考虑环境是因为你衣食无忧了,有了大把大把的闲钱去享受

iOS 学习笔记 一 (2015.02.05)

一:Xcode6输入框设置为 keyboard type设置为Number Pad弹不出键盘的解决办法 问题:Can't find keyplane that supports type 4 for keyboard iPhone-Portrait-NumberPad; using 3876877096_Portrait_iPhone-Simple-Pad_Default 解决办法:这个可能是xcode6模拟器的bug,如果键盘不出来的话,可以通过Hardware->Keyboard->Tog

seo技巧-2015/10/05

1.每页都要有它自己的文件名,并且有它自己的上级文件夹和它自己相关关键字. 2.建议在每页上使用一个的H1标签.我也试着使用许多H2 或H3的标签在页面内辅助构成正文内容. 3. 有时花费一点钱帮助你的站点发展是值得的.很多人能找到大学生并且付款给他们大约10美元- 12 美元每小时建设他们的站点内容.我生活在一所大学旁边,因此我确信在几个月内将在这里找到很多兼职的学生为我工作. 4.网站地图 http://xank8880888.com/