我想隐藏aar
文件中的真实代码。我的图书馆的Gradle文件看起来像这样。
apply plugin: 'com.android.library'
android {
compileSdkVersion 25
buildToolsVersion '25.0.2'
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
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:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
}
我在运行此应用时遇到异常。
Warning:Exception while processing task java.io.FileNotFoundException: E:\MyProjects\TestApp\testLibrary\build\intermediates\proguard-rules\release\aapt_rules.txt (The system cannot find the path specified)
Error:Execution failed for task ':testLibrary:transformClassesAndResourcesWithProguardForRelease'.
> Job failed, see logs for details
如果我将minifyEnabled true
更改为minifyEnabled false
,那么此应用程序必定会运行,但我可以看到生成的arr
文件中的Java文件。
所以我想隐藏Java代码。
答案 0 :(得分:0)
对于库,您不应提供proguard-rules.pro
,而应提供一些proguard-consumer-rules.pro
...,其中包含将库编译为APK软件包时正在应用的配置规则(与通常的做法相反)行为(在构建库时)。
// These rules will be applied when a consumer of this library sets 'minifyEnabled true'.
consumerProguardFiles 'proguard-consumer-rules.pro'
库不会像这样直接被混淆,而只是在以后-无需库的每个使用者都定义自己的ProGuard规则配置。请参阅我上面链接的问题,它的答案之一是提供了一种基本配置,以保留公共方法(这样,一旦被混淆后,该库仍可以使用该库)。 并查看module-android-library的Android测试模板。
我认为,该AAPT错误源于提供一个空的ProGuard配置文件。