如何在导出已签名,混淆的Android应用程序时在Eclipse中设置ProGuard?

时间:2010-09-21 17:07:22

标签: android eclipse obfuscation proguard

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

如果没有沿着蚂蚁路走下去,任何人都有运气吗?

3 个答案:

答案 0 :(得分: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”,包括项目和它所依赖的任何库项目。

我认为就是这样。

答案 1 :(得分:3)

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

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

它使用Ant,但所有的硬件都是为你完成的,只要你按照说明操作,它就可以了。注意:不要跳过更新,这只适用于SDK r7 +,对于AVD更新来说,运行eclipse的更新也不是一个坏主意。

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

-libraryjars {path} {file_name} .jar

答案 2 :(得分: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