使用AAR库时的Proguard问题

4

我有一个包含一个类的Android库,我想将其制作成.aar库。当我将minifyEnabled设为true时,另一个Android项目无法使用该库(如果将minifyEnabled设置为false则正常)。我想问一下,AAR库的Proguard正确配置是什么。

HelloWorld.java

package com.example.hello;

import android.util.Log;

public class HelloWorld {
    public static void Hello(){
        Log.v("HelloWorld","Hello World!");
    }
}

build.grandle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.0.0'
}

proguard-rules.pro

-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

-keep class com.example.hello {public *;}

1
你能否尝试将proguard-rules中的最后一行改为-keep class com.example.hello.** {public *;} - Anuj
@basilisk 看起来它能够工作,但是它仍然可以被Android Studio反编译,这正常吗?另外,这是处理依赖库的正确方式吗? - Joshua
@Joshua 任何APK都可以被反编译。Proguard无法以任何方式保护APK或库。它只对不属于API的类进行了一点混淆。 - Robert
2个回答

8
尝试将proguard-rules中的最后一行更改为:
-keep class com.example.hello.** {public *;}

关于Android Studio能否反编译,您无法防止这种情况。如果您想保护您的代码,我认为最好的方法是对大部分代码进行混淆,然后通过不混淆的接口扩展所需功能,并添加相关的Proguard规则。


我尝试了原问题中提供的解决方案和Proguard。当我使用生成的AAR文件时,出现了一些奇怪的行为,我的一些AAR对象会出现“无法解析符号”的错误。但是它可以正确编译。 - user1506104
两个星号不再编译。还有其他解决方案吗? - Daniel

1
任何APK文件都可以被反编译。Proguard只是让反编译出来的代码更难以理解。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接