如何在android中将proguard应用到AAR库?

Suh*_*wde 4 android proguard decompiler aar

我开发了一个Android AAR库,其中包含客户所需的所有功能,我想在将其交付给客户之前在库上应用proguard,以便混淆代码,使代码不容易反编译。

在发布这个问题之前我用谷歌搜索了它,我发现库项目本身不运行 ProGuard,因此它们不使用任何配置,如此处提到的单击此处

我已经完成了以下配置,以便在我的库项目上应用 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'
    }
}
Run Code Online (Sandbox Code Playgroud)

我已应用此规则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();
 }
Run Code Online (Sandbox Code Playgroud)

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

请建议我相关的方法或告诉我我采取了哪些错误的步骤,因为我是 Android 新手。

fas*_*t3r 5

AAR 模块确实可以被混淆。

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