混淆注意事项

 从SDK2.3开始在android-sdk-windows\tools\下面多了一个proguard文件夹,proguard是一个java代码混淆的工具,不过代码混淆不能混淆xml的布局文件,混淆的是JAVA文件。java

    1、在eclipse中,android 2.3开始支持这个功能;android

    2、另外一种是使用脚本如ant windows

混淆器经过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。app

 

      1、默认混淆文件 proguard.cfg文件, google默认不混淆 Activity Service ... 类的 子类, 全部 activity 的子类 名称是被保留的。让proguard.cfg起做用的作法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就能够了eclipse

      混淆中保留了继承自ActivityServiceApplicationBroadcastReceiverContentProvider等基本组件以及com.android.vending.licensing.ILicensingService并保留了全部的Native变量名及类名,全部类中部分以设定了固定参数格式的构造函数,枚举等等。ide

     2android sdk目录在带有空格的目录名称的子目录下没法混淆  去掉空格就行了函数

     3、依赖包混淆带来的麻烦,最好所有保留不混淆。例如工具

     -keep class com.badlogic.** { *; }布局

     -keep class * implements com.badlogic.gdx.utils.Json*优化

     -keep class com.google.** { *; }

     4. jni反调java方法

      这些类或方法一样可能会被proguard认为没有调用过而被除掉, 或都被更名. 这些方法最好统一写在一个类中, 而后这个类不做优化, 或是找出全部jni调用过的类与方法, proguard.cfg中配置, 不对它们做优化

     5. 其它反射调用的java类与方法

      使用反射时必定要注意proguard可能会认为那些方法未被调用过, 会在代码优化过程当中将它们更名或除去. 在使用反射的地方必定要在proguard.cfg中配置, 不优化反射调用过的类和方法。

比较常见的是写在视图xml中的onClick响应出错. 由于写在xml中的onClick是经过反射调用的, proguard认为它们没有在代码中被调用过, 因此将它们从代码中除掉或更名了.

解决方法:在proguard.cfg中添加如下代码, 就能够防止被配在视图xml中的onClick方法被proguard优化掉。

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}

 咱们公司目前的批量打包脚本注意事项:

     7 若是是引用第三方jar应注意查看jar包里是否有assets资源文件夹若是有应用将assets文件夹中的资源copy到项目中的assets文件夹下这样混淆后才不会出错proguard优化事后会产生一些文件

dump.txt  描述.apk文件中全部类文件间的内部结构

     8   客户端利用友盟的分享功能作第三方分享,但客户端混淆打包后,分享功能会报一些resource找不到的问题。这是由于友盟分享功能会用反射的方法去找本身须要的资源文件。被混淆后固然报错。

解决方式: 能够在混淆配置文件中添加:

-keep class **.R$* {
 *;
}

mapping.txt  列出了原始的类,方法和字段名与混淆后代码间的映射。这个文件很重要,当你从release版本中收到一个bug报告时,能够用它来翻译被混淆的代码。

对应公司里产生的.map文件

seeds.txt  列出了未被混淆的类和成员

usage.txt  列出了从.apk中删除的代码

相关文章
相关标签/搜索