Android Proguard-排除库

Android Proguard-排除库,android,proguard,Android,Proguard,出于测试目的,我的应用程序中有一些开发人员设置。我有时会包含一个视图库,并尝试最有效/最快的方法。例如,图像加载程序库,如毕加索/glide/ion 我有一个变量,上面写着要使用哪个图像加载器。用户无法更改,因此我希望执行以下操作: 我不想从我的项目中删除库(或者注释includes out和all类),也许明天我有一些新东西要测试,我不想再次包含库并为它编写额外的代码 我希望我的发布版本完全排除未使用的导入库 我认为这是可能的通过proguard,有人可以告诉我这将如何工作,例如基于我张贴

出于测试目的,我的应用程序中有一些开发人员设置。我有时会包含一个视图库,并尝试最有效/最快的方法。例如,图像加载程序库,如毕加索/glide/ion

我有一个变量,上面写着要使用哪个图像加载器。用户无法更改,因此我希望执行以下操作:

  • 我不想从我的项目中删除库(或者注释includes out和all类),也许明天我有一些新东西要测试,我不想再次包含库并为它编写额外的代码
  • 我希望我的发布版本完全排除未使用的导入库
我认为这是可能的通过proguard,有人可以告诉我这将如何工作,例如基于我张贴的3个图像库?或者这在proguard中是不可能的

编辑


我也对其他解决方案开放,例如C++(代码)>“IFIFF < /COD>”之类的东西(我认为这在java中是不可能的)。或者一些预处理器解决方案,可能通过插件?

您可以执行以下操作:

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将在默认情况下删除所有库(显式保留的库除外)。

您可以执行以下操作:

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在默认情况下会删除所有库(显式保留的库除外)。

在我看到反射部分之前,这看起来相当不错。。。我没有选择的余地。。。但这仍然是一个解决方案。我真的很想用C++风格>代码> IFIFF < /C>来通过一个变量完全注释代码通道……首先,这看起来很好,直到我看到反射部分…我没有选择的余地。。。但这仍然是一个解决方案。我真的很喜欢C++风格的代码<代码> IFDEF < />代码,通过变量来完全注释代码通道。