我正在发布一个在 Eclipse 中开发的 Android 应用程序,如标题中所述,我想将 Proguard 混淆集成到构建中,特别是用于导出签名的应用程序。
有没有人走上蚂蚁之路的运气?
我正在发布一个在 Eclipse 中开发的 Android 应用程序,如标题中所述,我想将 Proguard 混淆集成到构建中,特别是用于导出签名的应用程序。
有没有人走上蚂蚁之路的运气?
我也想在不使用 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);
}
我想就是这样。
好的,这是关于该主题的最相关和最近的帖子:
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
如果您使用的是 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