【问题标题】:How to set up ProGuard in Eclipse when exporting a signed, obfuscated Android application?导出已签名、混淆的 Android 应用程序时,如何在 Eclipse 中设置 ProGuard?
【发布时间】:2011-04-15 07:54:26
【问题描述】:

我正在发布一个在 Eclipse 中开发的 Android 应用程序,如标题所述,我想将 Proguard 混淆功能集成到构建中,专门用于导出已签名的应用程序。

有没有人走上了蚂蚁之路?

【问题讨论】:

标签: android eclipse obfuscation proguard


【解决方案1】:

我也想在不使用 Ant 或命令行方法的情况下做到这一点。以下是有效的(仅在 Eclipse + Windows 上):

  • (您需要下载 Proguard。脚本预计在此处找到它:C:\android-sdk_r04-windows\proguard\lib\proguard.jar)。

  • 创建一个 Windows 批处理文件,“C:\android-sdk_r04-windows\obfusc.bat”:


    DEL /S /Q obfuscated
    MKDIR obfuscated

    java -jar C:\android-sdk_r04-windows\proguard\lib\proguard.jar @android.pro

    DEL /S /Q bin\com\
    DEL /S /Q bin\org\

    ROBOCOPY obfuscated\com bin\com /S
  • 在 Eclipse 中,打开您的 Android 项目的属性页面,选择“Builders”窗格并添加一个类型为“Program”的新构建器。在主选项卡的“位置”字段中,放置上一步中脚本的绝对路径。在“工作目录”字段中放置变量 ${build_project}。在“构建选项”选项卡中,选择“运行构建器”下的“清理后”。

  • 确保此构建工具排在最后,就在 Android 包构建器之前。

  • 在 Android 项目的根文件夹中创建一个 proguard 配置文件。我稍微定制了这些并将它们包含在修订控制中,但这取决于你。我使用的文件名为“android.pro”,在脚本中命名,与开发博客中的配置类似,但包含带有 injar、outjar 和 libraryjar 语句的标题,例如:

    李>

    -injars      bin(!.svn/**)
    -outjars     obfuscated
    -libraryjars C:\android-sdk_r04-windows\android-sdk-windows\platforms\android-1.6\android.jar
    -libraryjars C:\GoogleAnalyticsAndroid_0.7\libGoogleAnalytics.jar

    -optimizationpasses 5
    -dontusemixedcaseclassnames
    -dontskipnonpubliclibraryclasses
    -dontpreverify
    -verbose
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

    -printmapping proguard.map
    -keepattributes SourceFile,LineNumberTable

    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Application
    -keep public class * extends android.app.Service
    -keep public class * extends android.content.BroadcastReceiver
    -keep public class * extends android.content.ContentProvider
    -keep public class com.android.vending.licensing.ILicensingService

    -keepclasseswithmembernames class * {
        native ;
    }

    -keepclasseswithmembernames class * {
        public (android.content.Context, android.util.AttributeSet); 
    }

    -keepclasseswithmembernames class * {
        public (android.content.Context, android.util.AttributeSet, int); 
    }

    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
  • 您会希望在大多数情况下都关闭此 Builder。当需要测试或导出混淆的 APK 时,将其打开,然后从 Eclipse 执行“项目 > 清理”,包括项目和它所依赖的任何库项目。

我想就是这样。

【讨论】:

  • 今天仍然需要新的 Eclipse 和 Android SDK 吗?
  • 那么经过所有步骤后,混淆后的 apk 会存储在哪里?
【解决方案2】:

好的,这是关于该主题的最相关和最近的帖子:

http://android-developers.blogspot.com/2010/09/proguard-android-and-licensing-server.html

它使用 Ant,但所有困难的部分都为您完成,只要您按照说明操作,它就可以工作。注意:不要跳过仅适用于 SDK r7+ 的更新,运行 eclipse 的更新也不错,对于 AVD 更新也是如此。

而且,对于任何添加外部 jar 的人,设置 ProGuards procfg.txt 并添加:

-libraryjars {path}{file_name}.jar

【讨论】:

    【解决方案3】:

    如果您使用的是 eclipse,只需取消注释 project.properties

    # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
    proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多