los*_*ion 11 android aar android-proguard
从这个参考:
https://github.com/codepath/android_guides/wiki/Building-your-own-Android-library
我有以下gradle文件:
android {
compileSdkVersion 25
buildToolsVersion "26.0.2"
buildTypes {
release {
minifyEnabled true
consumerProguardFiles 'consumer-proguard-rules.pro'
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下proguard文件:
-dontobfuscate
-optimizations !code/allocation/variable
-keep public class * {
public protected *;
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行'assembleRelease'任务来构建我的发布aar文件时,aar中的所有类都丢失了.
有任何想法吗?
您应该设置minifyEnabled为false(默认值):
consumerProguardFiles不用于立即缩小(即构建库本身时).它是在构建库(例如应用程序)的使用者时使用的.
建议不要在消耗之前缩小库,因为在最终构建之前您无法知道实际使用哪些部分.图书馆通常不这样做.例如LeakCanary,ACRA,Butter Knife
一般来说,一个库必须保留操作它所需的所有方法和方法名称;例如:
-verbose
# -libraryjars ../app/libs
# -dontpreverify
# -dontobfuscate
# -dontshrink
# -dontoptimize
# keep class BuildConfig
-keep public class **.BuildConfig { *; }
# keep class members of R
-keepclassmembers class **.R$* {public static <fields>;}
Run Code Online (Sandbox Code Playgroud)
问题的答案可能应该是:
# keep all public and protected method names,
# which could be used by Java reflection.
-keepclassmembernames class * {
public protected <methods>;
}
Run Code Online (Sandbox Code Playgroud)
很可能还需要一些更多的规则,而-verbose标志告诉人们要写入其中的内容。当针对其他代码构建库时(如上所述),仍然需要为库添加或多或少相同的规则。还有相当多的非开源库具有模糊的类名。
图书馆build.gradle可能看起来像这样:
android {
defaultConfig {
consumerProguardFiles 'proguard-consumer-rules.pro'
}
buildTypes {
release {
minifyEnabled false // don't proguard the library itself.
}
}
}
Run Code Online (Sandbox Code Playgroud)
默认proguard-consumer-rules.pro解释如下:
Android Gradle 插件允许定义嵌入到 AAR 中的 ProGuard 规则。
当消费者应用程序将 minifyEnabled 设置为 true 时,会自动应用这些 ProGuard 规则。
必须使用 build.gradle 文件中的“consumerProguardFiles”属性定义自定义规则文件。
当一个库本身没有被处理时,它仍然可以带来它的 ProGuard 规则 - 以便在构建整个项目时被使用。
| 归档时间: |
|
| 查看次数: |
2130 次 |
| 最近记录: |