4

我正在将 Android 支持库添加到我的项目中,并且我注意到生成的 APK 文件的大小膨胀了很多。

我想要做的是使用 Proguard 删除库中我不使用的类,例如 backword 兼容的 Notification builder 类(事实上,我甚至没有使用 Support 库中的任何东西就对其进行了测试,我只是放弃了它在我的 /libs 文件夹中)。

我的 proguard.cfg 正是<sdktools>\tools\proguard\proguard-android.txt我自己添加的内容-dontobfuscate(因为我真的不需要混淆),但是,我没有看到我的 .APK 文件变得更小。我的 proguard.cfg 如下:

# 这是 ProGuard 的配置文件。
# http://proguard.sourceforge.net/index.html#manual/usage.html

-不要混淆
-dontusemixedcase类名
-dontskipnonpubliclibraryclasses
-详细

# 优化默认关闭。Dex 不喜欢代码运行
# 通过 ProGuard 优化和预验证步骤(并执行一些
# 这些优化本身)。
-不要优化
-dontpreverify
# 注意,如果你想启用优化,你不能只
# 在您自己的项目配置文件中包含优化标志;
# 相反,您需要指向
# "proguard-android-optimize.txt" 文件而不是你的这个文件
# project.properties 文件。

-keepattributes *注解*
-保持公共类 com.google.vending.licensing.ILicensingService
-保持公共类 com.android.vending.licensing.ILicensingService

# 原生方法见 http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames 类 * {
    本国的 ;
}

# 在 Views 中保留 setter 以便动画仍然可以工作。
# 见 http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers 公共类 * 扩展 android.view.View {
   无效集*(***);
   *** 得到*();
}

# 我们希望在 Activity 中保留可以在 XML 属性 onClick 中使用的方法
-keepclassmembers 类 * 扩展 android.app.Activity {
   公共无效*(android.view.View);
}

# 枚举类见http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers 枚举 * {
    公共静态 **[] 值();
    公共静态 ** valueOf(java.lang.String);
}

-keep 类 * 实现 android.os.Parcelable {
  公共静态最终 android.os.Parcelable$Creator *;
}

-keepclassmembers 类 **.R$* {
    公共静态;
}

# 支持库包含对较新平台版本的引用。
# 不要警告那些如果这个应用程序链接到旧版本
# 平台版本。我们知道他们,他们是安全的。
-不要警告 android.support.**
4

1 回答 1

1

Android SDK 仅在发布版本中应用 ProGuard,而不是在调试版本中。

此外,Android SDK(r20 或更高版本)通常会proguard-project.txt在您的项目中查找而不是 proguard.txt。该文件一般可以为空,因为构建过程还会读取全局文件 proguard-android.txt。您可能想要更新您的项目

android update project -p MyProjectDirectory

最后,Android SDK(r20 或更高版本)默认禁用 ProGuard 的优化步骤(这可以改进其缩小步骤)。您可以通过指向proguard-android-optimize.txt而不是 proguard-android.txt来启用它project.properties

于 2013-01-12T17:03:28.877 回答