Android--混淆打包找不到资源类的问题
来源:互联网 发布:java assert函数 编辑:程序博客网 时间:2024/06/01 11:16
原文地址 :http://blog.sina.com.cn/s/blog_7bac470701014jp3.html
android打包apk的时候一般都会混淆,而在eclipse中常使用的是proguard来混淆。有很多时候引用了第三方包的时候会导致打包不成功,或者打包成功不能运行的情况。
首先看看正常的proguard.cfg文件里面可以怎么写:
简单的android系统,没有第三方包
- -injars bin/classes
- -outjars bin/classes-processed.jar
- -libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
- -dontpreverify
- -repackageclasses ''
- -allowaccessmodification
- -optimizations !code/simplification/arithmetic
- -keep public class mypackage.MyActivity
完整的android系统
- -injars bin/classes
- -injars libs
- -outjars bin/classes-processed.jar
- -libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
- -dontpreverify
- -repackageclasses ''
- -allowaccessmodification
- -optimizations !code/simplification/arithmetic
- -keepattributes *Annotation*
- -keep public class * extends android.app.Activity
- -keep public class * extends android.app.Application
- -keep public class * extends android.app.Service
- -keep public class * extends android.content.BroadcastReceiver
- -keep public class * extends android.content.ContentProvider
- -keep public class * extends android.view.View {
- public <</span>init>(android.content.Context);
- public <</span>init>(android.content.Context, android.util.AttributeSet);
- public <</span>init>(android.content.Context, android.util.AttributeSet, int);
- public void set*(...);}
- -keepclasseswithmembers class * {
- public <</span>init>(android.content.Context, android.util.AttributeSet);}
- -keepclasseswithmembers class * {
- public <</span>init>(android.content.Context, android.util.AttributeSet, int);}
- -keepclassmembers class * extends android.content.Context {
- public void *(android.view.View);
- public void *(android.view.MenuItem);}
- -keepclassmembers class * implements android.os.Parcelable {
- static android.os.Parcelable$Creator CREATOR;}
- -keepclassmembers class **.R$* { public static <</span>fields>;}
如果加了android.support包的话,那么要加上
- -keep class android.support.**{*;}
- -dontwarn android.support.**
一劳永逸,免得打包的时候就报错。加上keep就是 告诉proguard不用混淆这个包里面的类,如果不加这个,报错会比较明显,会报出support包的错,其它的第三方的包最好也不要混淆,原样就可以了。
还有一些是打包的时候不会出错,但是在打成包之后安装运行就不行了。这时候要注意观察一下提示的信息,比如空指针异常,或者是反射的时候报错,那么这个时候要注意了,是不是实体类被混淆了。导致找不到实体类无法get或者set,那么这个时候应该做的事情是阻止proguard对实体类的混淆,比如:
- -keep public class mypackage.MyBean { public void setMyProperty(int); public int getMyProperty();}
这样的话实体类被保存下来了,就不会出现找不到的情况了,一般引用了json类的包或者orm类的包可能会有这样的错误出现。
当有注解的时候
- -keepattributes Signature
- -keepattributes *Annotation*
别忘了加上这两句,减少错误的发生。
如果还有一些不明的错误的话,可以试着更新一下proguard的版本,使用最新的版本。毕竟再成熟的系统也是有BUG的。
阅读全文
0 0
- Android--混淆打包找不到资源类的问题
- Android--混淆打包找不到资源类的…
- Android资源混淆打包方案
- Android混淆打包后openFileChooser无法使用找不到的解决方法
- Android 打包混淆问题
- android打包混淆的一些问题
- Android Studio 打包混淆出现的问题
- Android混淆打包时遇到的问题
- Android Studio打包混淆带资源的SDK
- android 的混淆打包
- android 防止R被混淆,R类反射混淆,找不到资源ID
- Android项目打包混淆问题
- 微信Android资源混淆打包工具
- android编译找不到资源id的问题
- android R.id找不到资源的问题
- 0053 jar可执行包打包规范--从根源解决资源文件类找不到的问题【基础】
- R类反射混淆,找不到资源ID
- Java打包找不到资源文件问题
- oracle索引总结1
- 从美国运营商云计算大撤退,看中国运营商该何去何从?
- 前端构建工具gulpjs的使用介绍及技巧
- Zend Studio (eclipse)使用速度优化方法
- Linux环境下的PHP环境的安装及配置—-LAMP
- Android--混淆打包找不到资源类的问题
- 为什么我把数据库里的数据加载到rdlc文件的数据集里之后,用chart控件画曲线的时候,某些点的顺序没按数据库里的顺序
- php可生成缩略图的文件上传类实例
- js 获取元素所有兄弟节点实例
- js实现点击copy,可兼容
- Bootstrap Table总结
- invalid constant type: 15 错误解决
- 提供者
- 猜拳