如何将proguard应用于android中的AAR库?

时间:2016-10-25 05:45:34

标签: android proguard decompiler aar

我开发了一个Android AAR库,其中包含客户需要的所有功能,我想在将库提供给客户之前在库上应用proguard,以便对代码进行模糊处理,以便代码不易反编译。

我在发布此问题之前搜索了它,我发现图书馆项目本身并不运行ProGuard,因此他们不会使用任何配置,如此处所提到Click Here

我已完成以下配置,以便在我的图书馆项目中应用proguard。

buildTypes {

    debug {
        shrinkResources false
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

    release {
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

我已在proguard-rules.pro

上应用此规则
 -keepparameternames
 -renamesourcefileattribute SourceFile
 -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

 -keep public class * {
public protected *;
 }

 -keepclassmembernames class * {
java.lang.Class class$(java.lang.String);
java.lang.Class class$(java.lang.String, boolean);
 }

 -keepclasseswithmembernames class * {
native <methods>;
 }

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

 -keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
 }

但是在我的演示项目中使用这个aar之后,库得到了正确的使用,但是代码没有被隐藏它只是在android studio中反编译后才可见,因为我们反编译方法只需按住ctrl并单击该方法,所有方法的包含只要在该库上没有应用任何proguard规则就可以看到。

请建议我相关的方式或告诉我我正在采取什么错误的步骤,因为我是新手。

2 个答案:

答案 0 :(得分:3)

AAR模块确实可以被混淆。

consumerProguardFiles 'proguard-rules.pro'proguardFiles一起添加到您的AAR build.gradle 配置中,这样如果使用AAR的应用/模块运行ProGuard,您的配置(即任何对于不应缩小的公共API的排除,将被尊重。

答案 1 :(得分:-2)

Android库(aar - 文件)根本不会被混淆。 minifyEnabled - 项目中忽略com.android.library选项。因此,每个人都可以轻松地反编译aar - 文件中包含的代码。