android打包apk的时候一般会选择混淆,而在eclipse中常使用的是proguard来混淆。有很多时候引用了第三方包的时候会导致打包不成功,或者打包成功不能运行的情况。

首先看看正常的proguard.cfg文件里面可以怎么写:

简单的android系统,没有第三方包

[html]  view plain copy print ?

 
  1. -injars      bin/classes
  2. -outjars     bin/classes-processed.jar
  3. -libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
  4. -dontpreverify
  5. -repackageclasses ''
  6. -allowaccessmodification
  7. -optimizations !code/simplification/arithmetic
  8. -keep public class mypackage.MyActivity

完整的android系统

[html]  view plain copy print ?

 
  1. -injars bin/classes
  2. -injars libs
  3. -outjars bin/classes-processed.jar
  4. -libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
  5. -dontpreverify
  6. -repackageclasses ''
  7. -allowaccessmodification
  8. -optimizations !code/simplification/arithmetic
  9. -keepattributes *Annotation*
  10. -keep public class * extends android.app.Activity
  11. -keep public class * extends android.app.Application
  12. -keep public class * extends android.app.Service
  13. -keep public class * extends android.content.BroadcastReceiver
  14. -keep public class * extends android.content.ContentProvider
  15. -keep public class * extends android.view.View {
  16. public <init>(android.content.Context);
  17. public <init>(android.content.Context, android.util.AttributeSet);
  18. public <init>(android.content.Context, android.util.AttributeSet, int);
  19. public void set*(...);}
  20. -keepclasseswithmembers class * {
  21. public <init>(android.content.Context, android.util.AttributeSet);}
  22. -keepclasseswithmembers class * {
  23. public <init>(android.content.Context, android.util.AttributeSet, int);}
  24. -keepclassmembers class * extends android.content.Context {
  25. public void *(android.view.View);
  26. public void *(android.view.MenuItem);}
  27. -keepclassmembers class * implements android.os.Parcelable {
  28. static android.os.Parcelable$Creator CREATOR;}
  29. -keepclassmembers class **.R$* { public static <fields>;}

如果加了android.support包的话,那么要加上

[html] 
view plain
copy
print
?

 

  1. -keep class android.support.**{*;}
[html] 
view plain
copy
print
?

 

  1. -dontwarn android.support.**

一劳永逸,免得打包的时候就报错。加上keep就是 告诉proguard不用混淆这个包里面的类,如果不加这个,报错会比较明显,会报出support包的错,其它的第三方的包最好也不要混淆,原样就可以了。

还有一些是打包的时候不会出错,但是在打成包之后安装运行就不行了。这时候要注意观察一下提示的信息,比如空指针异常,或者是反射的时候报错,那么这个时候要注意了,是不是实体类被混淆了。导致找不到实体类无法get或者set,那么这个时候应该做的事情是阻止proguard对实体类的混淆,比如:

[html] 
view plain
copy
print
?

 

  1. -keep public class mypackage.MyBean { public void setMyProperty(int); public int getMyProperty();}

这样的话实体类被保存下来了,就不会出现找不到的情况了,一般引用了json类的包或者orm类的包可能会有这样的错误出现。

当有注解的时候

[html] 
view plain
copy
print
?

 

  1. -keepattributes Signature
  2. -keepattributes *Annotation*

别忘了加上这两句,减少错误的发生。

如果还有一些不明的错误的话,可以试着更新一下proguard的版本,使用最新的版本。毕竟再成熟的系统也是有BUG的。好了,先总结这么多吧。晚安~!

android打包apk时混淆遇到的问题的更多相关文章

  1. Android Studio 打包APK时,出现3个或多个APK

    Android Studio 打包APK时,原来只会出现一个apk,结果现在出现3个apk,仔细检查了一下项目文件发现: Android Studio 的 buid.gradle文件里有个配置项被更改 ...

  2. ReactNative之Android打包APK方法(趟坑过程)

    欢迎大家加群讨论 点击链接加入群[ReactNative-解决问题交流群] :644124441 点击链接加入群[ReactNative技术交流群2] :687663534 多余的不解释了.直接上车吧 ...

  3. Cocos2dx打包apk时变更NDK引发问题及解决

    现在官方的Cocos Studio已经支持打包apk文件,写该随笔的时候还没试过官方的打包功能,所以就按自己的学习顺序先把打包的心得写下. 问题及最终解决方案: 其中耗时最长的问题就是ndk-r10改 ...

  4. Android Studio打包APK时出现 is not translated in "en" (English) [MissingTranslation]

    错误信息: Error:(16) Error: "baidutieba_client_inavailable" is not translated in "en" ...

  5. Cocos Creator Android打包 apk

    这一篇讲的是用 Cocos Creator 编译器打包 Android APP 的时候遇到的一些问题,虽然说打包的过程不是很复杂,但是在其中还是会遇到各式各样的坑. 我们将项目用CCC(Cocos C ...

  6. unity调用安卓打包apk时的错误unable to convert classes into dex format

    出现这种问题一般是由于有重复的文件所致,看下unity报的错误那些文件重复了,把重复的文件删了即可 例如,将eclipse中的安卓工程bin\class导出jar包时,会将下面的.class文件打包, ...

  7. React Native Android打包apk

    按照官方的5步曲: 1.在终端里面,cd 到项目的根目录后.执行下面这行命令: keytool -genkey -v -keystore my-release-key.keystore -alias ...

  8. 关于 Android导出apk时碰到的[Unable to execute dex: Multiple dex files define]

    这是一个编译错误,在ADT的编译器和SDK的工具有差异或是版本不一致时常会出现的一个问题,解决的方案如下: 第一步: updated eclipse (Help->Check for updat ...

  9. [置顶] Android 打包apk无敌报错

    前言: 这个问题从昨天上午一直到现在,请教了很多大佬,都没有给出确定的解决方案,可能他们也没碰到过可能,不过还是挺感谢他们的建议,一直到今天中午午休,我一直都在想这个问题,就是下面的这个,看了国内很多 ...

随机推荐

  1. iconv 文件编码转换

    iconv 文件编码转换 http://www.cnblogs.com/xuxm2007/archive/2010/11/09/1872379.html 查看iconv的支持的编码: $ iconv  ...

  2. 【C++】第二章:Hello World!

    1.开发工具:Microsoft Visual C++ v6.0 2.通过IDE建立Hello World程序: 我们可以看到三个文件夹结构,分别是: Source Files(源文件). Heade ...

  3. 基于visual Studio2013解决C语言竞赛题之0906文件插入

       题目

  4. iTunes Store:隐藏和取消隐藏已购项目

    使用 Mac 或 PC 上的 iTunes 来隐藏或取消隐藏已购项目. 如何隐藏已购项目 在 Mac 或 PC 上打开 iTunes. 从 Store 菜单中,选取商店 > 登录,然后输入您的 ...

  5. WSGI详解

    WSGI接口 了解了HTTP协议和HTML文档,我们其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作为HTTP响应的 ...

  6. 基于visual Studio2013解决面试题之0907大数乘法

     题目

  7. [poj 1904]King's Quest[Tarjan强连通分量]

    题意:(当时没看懂...) N个王子和N个女孩, 每个王子喜欢若干女孩. 给出每个王子喜欢的女孩编号, 再给出一种王子和女孩的完美匹配. 求每个王子分别可以和那些女孩结婚可以满足最终每个王子都能找到一 ...

  8. POJ 1042 Gone Fishing (贪心)(刘汝佳黑书)

    Gone Fishing Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 30281   Accepted: 9124 Des ...

  9. oc 可变參数传递

    - (id)initWithFrame:(CGRect)frame delegate:(id<SGFocusImageFrameDelegate>)delegate focusImageI ...

  10. 监听手机晃动(摇一摇)SensorEventListener

    import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; ...