出于测试目的,我的应用中有一些开发人员设置。我有时会包含一个视图库,并尝试最好/最快的方法。即图像加载程序库,如picasso / glide / ion ...
我有一个变量,说明要使用哪个图像加载器。用户无法改变,所以我想跟随:
我认为这可以通过proguard,有人可以告诉我这是如何工作的,例如基于我发布的3个图像库?或者这对proguard来说不可能吗?
修改
我也对替代解决方案持开放态度,例如c ++ #ifdef
左右(我认为这在java中是不可能的)。或者一些预处理器解决方案,可能是通过插件?
答案 0 :(得分:1)
您可以执行以下操作:
为每个加载lib的图像定义build.gradle
中的属性
project.ext {
picassoEnabled = true
glideEnabled = false
...
}
然后在buildType配置中,您可以有选择地添加保留相关库的其他规则:
buildTypes {
release {
proguardFile getDefaultProguardFile('proguard-android.txt')
proguardFile 'proguard-project.txt'
if (project.picassoEnabled) {
proguardFile 'proguard-picasso.txt'
}
if (project.glideEnabled) {
proguardFile 'proguard-glide.txt'
}
}
}
在库的每个proguard配置文件中,您将拥有保留库的规则:
-keep class com.squareup.picasso.** { *; }
现在重要的部分是不要从应用程序中明确引用每个库,而是使用反射,这样ProGuard默认会删除所有库(明确保存的库除外)。