导出已签名、混淆的 Android 应用程序时,如何在 Eclipse 中设置 ProGuard?
Posted
技术标签:
【中文标题】导出已签名、混淆的 Android 应用程序时,如何在 Eclipse 中设置 ProGuard?【英文标题】:How to set up ProGuard in Eclipse when exporting a signed, obfuscated Android application? 【发布时间】:2011-04-15 07:54:26 【问题描述】:我正在发布一个在 Eclipse 中开发的 android 应用程序,如标题所述,我想将 Proguard 混淆功能集成到构建中,专门用于导出已签名的应用程序。
有没有人走上了蚂蚁之路?
【问题讨论】:
***.com/a/11351168/2291 的答案描述了已更新以尊重 SDK 中的更改。 【参考方案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 pathfile_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
【讨论】:
以上是关于导出已签名、混淆的 Android 应用程序时,如何在 Eclipse 中设置 ProGuard?的主要内容,如果未能解决你的问题,请参考以下文章
使用 android.support.v4.app 蜂窝兼容包导出签名应用时出现 Proguard 错误