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时混淆遇到的问题相关推荐
- 关于Mac Android 打包 APK
目录 关于Mac Android 打包 APK 方式一:使用Android Studio生成 1.点击Build->Generate Signed apk,首次点击可能会提示输入操作系统密码 2 ...
- android打包apk不能安装程序,Android Studio 打包apk后应用未安装
本文转载地址 http://blog.csdn.net/sinat_14849739/article/details/76383281 前言 Android 要求所有 APK 必须先使用证书进行数字签 ...
- Python通过Kivy-Buildozer打包apk时,如何在安卓系统下读写txt文件
在通过Kivy-Buildozer打包成apk在安卓手机运行. 按之前存放图片和字体,音乐文件的方法,在根目录下建立一个log文件夹,里面存放txt文件做为程度的日志记录.log文件夹里的txt文件无 ...
- unity2019,打包APK时的gradle错误问题
个人测试,unity2019.3,打APK时最后提示一堆错误,原因是要去谷歌下一堆东西,不翻墙是下不了的,可以采用阿里的国内镜像,解决方法具体如下 https://blog.csdn.net/qq_1 ...
- Unity3D 发布Android平台打包APK时遇到的几个问题
问题1:UnityEditor.BuildPlayerWindow+BuildMethodException: Build failed with errors.这个问题经常出现,困扰蛮久的,最后在论 ...
- Android Studio打包APK时出现 is not translated in en (English) [MissingTranslation]
错误信息: Error:(16) Error: "baidutieba_client_inavailable" is not translated in "en" ...
- android 运行apk时崩溃,从Android Studio运行时安装APK时应用程序崩溃完美无缺
我最近将 Android Studio更新为2.3,将SDK更新为25.现在,当我在我的手机或模拟器上运行Android Studio应用程序时,它运行正常但是当我生成APK或从应用程序获取APK并在 ...
- android打包apk进程序闪退,解决安卓打包apk安装后打开闪退的问题
系统版本 Android Studio版本 Build APK方式生成APK 调试的时候好好的,将打完的包传输到手机上进行安装,安装成功,但是一打开就闪退. 没办法,只好通过在命令行运行adb log ...
- Android 安装apk时,报错 Failure [INSTALL_FAILED_TEST_ONLY]
在命令行中安装android apk的时候,遇到Failure [INSTALL_FAILED_TEST_ONLY]时的解决方案 1.AndroidMainfest文件中,修改 testOnly =& ...
最新文章
- 简单配置Nginx的脚本启动
- 利用java反射机制,子类从父类拷贝属性--解决信息修改类设计的模式
- #029 博客换个主题从新开始
- mysql5.7.25数据库安装
- Web开发环境搭建 Eclipse-Java EE 篇
- 2000 ~2019 年历届 CVPR 最佳论文汇总
- 三十、电子商务分析与服务推荐的分析方法与过程
- .NET分布式事务处理
- Csharp: Treeview check list value
- gateway请求拦截_spring cloud gateway 拦截request Body
- SpringMVC、Spring、Mybatis框架整合及使用
- reactive streams的Mono及Flux
- postgres触发器使用
- 《大道至简》 第一章 读后感
- Java读取数据库中的数据
- Java学习-Java系统介绍
- UE4蓝图学习篇(一)
- 鼠标macOS下定义快捷键(各品牌通用)
- 服务器优盘启动安装win7系统教程,u盘装win7系统详细教程图解
- zoc for mac注册码