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无敌报错
前言: 这个问题从昨天上午一直到现在,请教了很多大佬,都没有给出确定的解决方案,可能他们也没碰到过可能,不过还是挺感谢他们的建议,一直到今天中午午休,我一直都在想这个问题,就是下面的这个,看了国内很多 ...
随机推荐
- C++算术运算符与算术表达式
基本的算术运算符 在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍. 常见算数运算符 运算符 说明 举例 + 加法运算符,或正值 ...
- SignalR系列教程:在MVC5中使用SignalR
本章主要内容: 1:向MVC5添加SignaIr 2: 什么是集线器,如何创建集线器 3: 客户端通过jqery调用集线器 本文还是延续“SignaIR快速入门”中聊天室的例子进行讲解.首先我们通过V ...
- 从 Qt 的 delete 说开来
原地址:http://blog.csdn.net/dbzhang800/article/details/6300025 在C++中学习过程中,我们都知道: delete 和 new 必须 配对使用(一 ...
- 实战 iTextSharp
原文 实战 iTextSharp iTextSharp 是用来生成 PDF 的一个组件,在 1998 年夏天的时候,Bruno Lowagie ,iText 的创作者,参与了学校的一个项目,当时使用 ...
- C#版二维码生成器附皮肤下载
原文 C#版二维码生成器附皮肤下载 前言 本文所使用的二维码生成代码是谷歌开源的条形码图像处理库完成的,c#版的代码可去https://code.google.com/p/zxing/download ...
- ajax异步请求实例
1. 问题分析 用户管理显示页面:usermanagement.tpl(也可以说是MVC中的V,即视图) 用户管理数据发送页面:usermanagement.php(也可以说是MVC中的M,即模型) ...
- struts2之高危远程代码执行漏洞,可造成服务器被入侵,下载最新版本进行修复
Struts2 被发现存在新的高危远程代码执行漏洞,可造成服务器被入侵,只要是Struts2版本 低于 2.3.14.3 全部存在此漏洞.目前官方已经发布了最新的版本进行修复.请将stru ...
- 关于js基础easy忘记的那些事儿
1.Number() 通过这个函数转化后的值仅仅有两个:数值和NaN,通过parseInt也能转化为数值.可是像"134df"转化后的值为134,而Number("134 ...
- vbox要手动mount才能挂载windows的共享文件夹(好用,不用安装samba了)
mount -t vboxsf BaiduShare /mnt/bdshare/ 我按照这篇文章成功: http://www.wuji8.com/meta/448016166.html 其它参考: h ...
- Swift - 给图片添加图片水印(图片上绘制另一张图,并可设透明度)
我前面写了篇文章讲解如何给图片添加文字水印,而如果想要添加图片类型的水印也很简单,只要把原来代码里添加文字的部分改成图片即可. 1,效果图如下: (在图片左上角添加了一个半透明的logo图片) 2,为 ...