6

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

有没有人走上蚂蚁之路的运气?

4

3 回答 3

4

我也想在不使用 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 执行“Project > Clean”,包括项目和它所依赖的任何库项目。

我想就是这样。

于 2010-09-22T19:40:39.700 回答
3

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

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

于 2010-09-22T04:35:30.833 回答
1

如果您使用的是 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
于 2014-10-26T18:26:48.813 回答