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

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

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

[html] view plaincopyprint?
  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 plaincopyprint?
  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 plaincopyprint?
  1. -keep class android.support.**{*;}
[html] view plaincopyprint?
  1. -dontwarn android.support.**

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

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

[html] view plaincopyprint?
  1. -keep public class mypackage.MyBean { public void setMyProperty(int); public int getMyProperty();}

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

当有注解的时候

[html] view plaincopyprint?
  1. -keepattributes Signature
  2. -keepattributes *Annotation*

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

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

android打包apk时混淆遇到的问题相关推荐

  1. 关于Mac Android 打包 APK

    目录 关于Mac Android 打包 APK 方式一:使用Android Studio生成 1.点击Build->Generate Signed apk,首次点击可能会提示输入操作系统密码 2 ...

  2. android打包apk不能安装程序,Android Studio 打包apk后应用未安装

    本文转载地址 http://blog.csdn.net/sinat_14849739/article/details/76383281 前言 Android 要求所有 APK 必须先使用证书进行数字签 ...

  3. Python通过Kivy-Buildozer打包apk时,如何在安卓系统下读写txt文件

    在通过Kivy-Buildozer打包成apk在安卓手机运行. 按之前存放图片和字体,音乐文件的方法,在根目录下建立一个log文件夹,里面存放txt文件做为程度的日志记录.log文件夹里的txt文件无 ...

  4. unity2019,打包APK时的gradle错误问题

    个人测试,unity2019.3,打APK时最后提示一堆错误,原因是要去谷歌下一堆东西,不翻墙是下不了的,可以采用阿里的国内镜像,解决方法具体如下 https://blog.csdn.net/qq_1 ...

  5. Unity3D 发布Android平台打包APK时遇到的几个问题

    问题1:UnityEditor.BuildPlayerWindow+BuildMethodException: Build failed with errors.这个问题经常出现,困扰蛮久的,最后在论 ...

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

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

  7. android 运行apk时崩溃,从Android Studio运行时安装APK时应用程序崩溃完美无缺

    我最近将 Android Studio更新为2.3,将SDK更新为25.现在,当我在我的手机或模拟器上运行Android Studio应用程序时,它运行正常但是当我生成APK或从应用程序获取APK并在 ...

  8. android打包apk进程序闪退,解决安卓打包apk安装后打开闪退的问题

    系统版本 Android Studio版本 Build APK方式生成APK 调试的时候好好的,将打完的包传输到手机上进行安装,安装成功,但是一打开就闪退. 没办法,只好通过在命令行运行adb log ...

  9. Android 安装apk时,报错 Failure [INSTALL_FAILED_TEST_ONLY]

    在命令行中安装android apk的时候,遇到Failure [INSTALL_FAILED_TEST_ONLY]时的解决方案 1.AndroidMainfest文件中,修改 testOnly =& ...

最新文章

  1. 简单配置Nginx的脚本启动
  2. 利用java反射机制,子类从父类拷贝属性--解决信息修改类设计的模式
  3. #029 博客换个主题从新开始
  4. mysql5.7.25数据库安装
  5. Web开发环境搭建 Eclipse-Java EE 篇
  6. 2000 ~2019 年历届 CVPR 最佳论文汇总
  7. 三十、电子商务分析与服务推荐的分析方法与过程
  8. .NET分布式事务处理
  9. Csharp: Treeview check list value
  10. gateway请求拦截_spring cloud gateway 拦截request Body
  11. SpringMVC、Spring、Mybatis框架整合及使用
  12. reactive streams的Mono及Flux
  13. postgres触发器使用
  14. 《大道至简》 第一章 读后感
  15. Java读取数据库中的数据
  16. Java学习-Java系统介绍
  17. UE4蓝图学习篇(一)
  18. 鼠标macOS下定义快捷键(各品牌通用)
  19. 服务器优盘启动安装win7系统教程,u盘装win7系统详细教程图解
  20. zoc for mac注册码

热门文章

  1. 【MVC】ASP.NET MVC5 使用MiniProfiler 监控MVC性能
  2. 搜索引擎学习(四)中文分词器
  3. Spring 注解编程之 AnnotationMetadata
  4. linux简单文件管理命令的使用
  5. Neo4j--第一章
  6. Jquery的DOM
  7. ASP.NET Core IHostEnvironment和IApplicationLifetime介绍
  8. android菜鸟学习笔记27----Fragment的简单使用
  9. ubuntu kylin 14.04编译openjdk-7u40
  10. 窗体控件随窗体大小改变(仍有不足)