【问题标题】:How to apply proguard to AAR library in android?如何将proguard应用于android中的AAR库?
【发布时间】:2016-10-25 05:45:34
【问题描述】:

我已经开发了一个包含客户需要的所有功能的 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 规则即可显示。

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

【问题讨论】:

标签: android proguard decompiler aar


【解决方案1】:

AAR 模块确实可以被混淆。

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

【讨论】:

    【解决方案2】:

    Android 库 (aar-files) 根本没有被混淆。 minifyEnabled 选项在 com.android.library-projects 中被忽略。这样大家就可以轻松反编译aar-file中包含的代码了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 2015-07-23
      • 2016-11-08
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多