android打包apk时混淆遇到的问题
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 <init>(android.content.Context);
- public <init>(android.content.Context, android.util.AttributeSet);
- public <init>(android.content.Context, android.util.AttributeSet, int);
- public void set*(...);}
- -keepclasseswithmembers class * {
- public <init>(android.content.Context, android.util.AttributeSet);}
- -keepclasseswithmembers class * {
- public <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 <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的。好了,先总结这么多吧。晚安~!
android打包apk时混淆遇到的问题的更多相关文章
- Android Studio 打包APK时,出现3个或多个APK
Android Studio 打包APK时,原来只会出现一个apk,结果现在出现3个apk,仔细检查了一下项目文件发现: Android Studio 的 buid.gradle文件里有个配置项被更改 ...
- ReactNative之Android打包APK方法(趟坑过程)
欢迎大家加群讨论 点击链接加入群[ReactNative-解决问题交流群] :644124441 点击链接加入群[ReactNative技术交流群2] :687663534 多余的不解释了.直接上车吧 ...
- Cocos2dx打包apk时变更NDK引发问题及解决
现在官方的Cocos Studio已经支持打包apk文件,写该随笔的时候还没试过官方的打包功能,所以就按自己的学习顺序先把打包的心得写下. 问题及最终解决方案: 其中耗时最长的问题就是ndk-r10改 ...
- Android Studio打包APK时出现 is not translated in "en" (English) [MissingTranslation]
错误信息: Error:(16) Error: "baidutieba_client_inavailable" is not translated in "en" ...
- Cocos Creator Android打包 apk
这一篇讲的是用 Cocos Creator 编译器打包 Android APP 的时候遇到的一些问题,虽然说打包的过程不是很复杂,但是在其中还是会遇到各式各样的坑. 我们将项目用CCC(Cocos C ...
- unity调用安卓打包apk时的错误unable to convert classes into dex format
出现这种问题一般是由于有重复的文件所致,看下unity报的错误那些文件重复了,把重复的文件删了即可 例如,将eclipse中的安卓工程bin\class导出jar包时,会将下面的.class文件打包, ...
- React Native Android打包apk
按照官方的5步曲: 1.在终端里面,cd 到项目的根目录后.执行下面这行命令: keytool -genkey -v -keystore my-release-key.keystore -alias ...
- 关于 Android导出apk时碰到的[Unable to execute dex: Multiple dex files define]
这是一个编译错误,在ADT的编译器和SDK的工具有差异或是版本不一致时常会出现的一个问题,解决的方案如下: 第一步: updated eclipse (Help->Check for updat ...
- [置顶]
Android 打包apk无敌报错
前言: 这个问题从昨天上午一直到现在,请教了很多大佬,都没有给出确定的解决方案,可能他们也没碰到过可能,不过还是挺感谢他们的建议,一直到今天中午午休,我一直都在想这个问题,就是下面的这个,看了国内很多 ...
随机推荐
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
Activity.finish()Call this when your activity is done and should be closed. 在你的activity动作完成的时候,或者Act ...
- BZOJ 1901: Zju2112 Dynamic Rankings( BIT 套 BST )
BIT 套 splay 其实也是不难...每个 BIT 的结点保存一颗 splay , 询问就二分答案然后判断rank... ------------------------------------- ...
- 02-UIKit控件、MVC
目录: 一.控件使用 二.动态类型和静态类型 三.MVC 四.UIAlertView对话框 回到顶部 一.控件使用 1 事件源,事件处理方法有一个参数传进来,那个参数就是触发这个事件的时间源. UIS ...
- APEC计划指引我们前进:云计算服务将上升
APEC纲领指引我们前进:云计算服务业必将兴起 这是APEC领导人的合影: 这次APEC会议通过了<北京纲领>和<亚太伙伴关系声明>,进一步明白了亚太地区经济合作的发展方向.目 ...
- 重新签名apk文件(手工用命令行)
re-sign.jar中后自动去除签名这个方法,经试验不可用! 1.去除准备重新签名SinaVoice.apk软件本身的签名 将apk文件后缀改为.zip,然后从winrar中删除META-INF文件 ...
- Spring笔记 - Bean xml装配
命名空间表 aop Provides elements for declaring aspects and for automatically proxying @AspectJannotated c ...
- 一起C语言中程序时序问题的排查过程
[文章摘要] 对于由多个模块协同工作的软件来说,程序处理的时序是很重要的.当消息处理的顺序出现混乱时,程序就会出现异常. 本文基于作者的实际项目经验.对软件模块之间的时序问题进行了具体的分析,为相关软 ...
- 【Android】属性动画
转载请注明出处:http://blog.csdn.net/h28496/44338669 属性动画的原理 通过不断的设置一个View的属性让其出现动画效果.比如,不断地设置一个Button的x值.这个 ...
- 浅谈Jquery的使用下篇
上一篇我们已经探讨了Jquery的有关的内容,简单的选择器以及一些Jquery的属性事件和方法等内容,让我们简单的学到了Jquery的比较基础的内容,下面我们就来探讨Jquery的一些其它的内容,比如 ...
- Linkedin工程师是如何优化他们的Java代码的(转)
英文原文:LinkedIn Feed: Faster with Less JVM Garbage 最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍 ...