• 关于android混淆文件project.properties和proguardproject.txt详解


    一直不明白Android开发中的有些文件的具体作用,后来用到了,具体研究了一下,借鉴了一下网上的资料,最后总结下,方便以后查看!

    老版本中有这么个文件default.properties,既然是老版本,已经淘汰了的,就不再深究。

        而新版本的ADT创建项目时,混码的文件project.properties和proguard-project.txt。

        如果需要对项目进行全局混码,进行如下操作:

        将project.properties文件中的

        “#  proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”中的“#”去掉就可以了。

        但有一些代码却是不能被混淆的,因为他是调用第三方的某些方法,类等...这样经过混淆后程序运行中将可能找不到混淆后方法名对应的方法等问题,比如加入了so文件,需要调用里面的方法,那么调用JNI访问so文件的方法就不能被混码。这个时候就需要用到proguard-project.txt。实际上proguard-project.txt文件里面就是描叙我们混淆的规则,哪些该混淆,哪些该保持原样,下面就详细讲解一下里面的书写规则(即原版本中proguard.cfg文件的内容):

    -injars  androidtest.jar【jar包所在地址】 
    -outjars  out【输出地址】
    -libraryjars    'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】

    -optimizationpasses 5
    -dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】
    -dontskipnonpubliclibraryclasses 【指定不去忽略非公共的库类。 】
    -dontpreverify 【不预校验】

    -verbose
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【优化】

    -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.app.backup.BackupAgentHelper
    -keep public class * extends android.preference.Preference
    -keep public class com.android.vending.licensing.ILicensingService

    -keep public abstract interface com.asqw.android.Listener{
    public protected <methods>;  【所有方法不进行混淆】
    }
    -keep public class com.asqw.android{
    public void Start(java.lang.String); 【对该方法不进行混淆】
    }

    -keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】

    native <methods>;
    }

    -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.app.Activity {【保护指定类的成员,如果此类受到保护他们会保护的更好 】
    public void *(android.view.View);
    }

    -keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
    }

    -keep class * implements android.os.Parcelable {【保护指定的类文件和类的成员】
    public static final android.os.Parcelable$Creator *;
    }

    以上引用来自网络某博客~~~感谢各位!!!

    来自蜀汉玫瑰编辑!
  • 相关阅读:
    某公司基于FineBI数据决策平台的试运行分析报告
    perl AnyEvent
    perl 微信 获取消息
    公司里的人际界线——北漂18年(41)
    perl URLencode URLdecode的方法
    Exception:org.eclipse.m2e.wtp.MarkedException: Unable to configure OHBC
    获取DIV内部内容报错
    JsViews Error:Unknown template:“#projectData”
    jQuery获取checkbox选中的值
    nginx mongodb相关配置
  • 原文地址:https://www.cnblogs.com/lvyerose/p/4576465.html
Copyright © 2020-2023  润新知