您如何从 Eclipse 内部制作签名和混淆的 android 版本?

Posted

技术标签:

【中文标题】您如何从 Eclipse 内部制作签名和混淆的 android 版本?【英文标题】:How do you make a signed & obfuscated android release build from inside eclipse? 【发布时间】:2012-01-17 19:06:06 【问题描述】:

我的 android 开发过程是在 eclipse 中构建和调试我的应用程序,当我准备发布时,我通过从 shell 运行“ant release”来生成一个签名的、经过混淆的(使用 proguard)apk。

是否可以从 Eclipse 中生成签名的 proguard 版本?我在带有 ADK 版本 13 的 Windows 上使用 eclipse indigo

【问题讨论】:

【参考方案1】:

是的。通过将proguard.config=proguard.cfg 条目添加到project.properties 启用ProGuard 后,Eclipse 将在您导出签名包时混淆您的代码。详情here。

顺便说一句,您应该升级到最新的 ADT (15)。

【讨论】:

感谢 ADT(15) 并 +1。但是我如何判断它是否有效/被混淆了?当我运行 ant release 时,我可以看到 proguard 的进展——在 eclipse 中什么也没有。我确实得到了apk文件 是的,没有进度指示器或消息。如果您收到错误消息,则会显示一条消息。如果它有效,您的项目目录中将有一个“progurad/”目录,其中包含常用文件(mapping.txt 等)。 我没有得到 proguard 目录,所以我猜它当时不起作用 对,开始工作了 - 升级到 ADK 15 搞砸了我的项目,我也无法再从 ant 构建。现在都修好了。 Eclipse IDE 中是否有 Dexguard 的设置??@NikolayElenkov【参考方案2】:

在您的 proguard 文件中使用它,您可以在发布/调试构建中启用 proguard 后进行混淆构建。

Lakshay Proguard-Files entry details

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.

-keepclassmembers class fqcn.of.javascript.interface.for.webview 
   public *;


-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-dontoptimize
-dontwarn android.support.**
-dontwarn com.google.**
-dontwarn com.loopj.android.http.**
-dontwarn com.worklight.androidgap.plugin.**
-dontwarn com.worklight.wlclient.**
#-injars      bin/classes
#-injars      libs
#-outjars     bin/classes-processed.jar

# Using Google's License Verification Library
-keep class com.android.vending.licensing.ILicensingService

# Specifies to write out some more information during processing.
# If the program terminates with an exception, this option will print out the entire stack trace, instead of just the exception message.
-verbose

####################################################################################################
##############################  IBM MobileFirst Platform configuration  ############################
####################################################################################################
# Annotations are represented by attributes that have no direct effect on the execution of the code.
-keepattributes *Annotation*,EnclosingMethod

# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * 
    native <methods>;


# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View 
   void set*(***);
   *** get*();




-keepattributes InnerClasses
-keep class **.R
-keep class **.R$* 
    <fields>;


# These options let obfuscated applications or libraries produce stack traces that can still be deciphered later on
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

# Enable proguard with Cordova
-keep class org.apache.cordova.**  *; 
-keep public class * extends org.apache.cordova.CordovaPlugin

-keep class com.worklight.androidgap.push.**  *; 
-keep class com.worklight.wlclient.push.**  *; 
-keep class com.worklight.common.security.AppAuthenticityToken  *; 

# Enable proguard with Google libs
-keep class com.google.**  *;
-dontwarn com.google.common.**
-dontwarn com.google.ads.**

# apache.http
-keep class org.apache.http.**  *; 
-keep class com.worklight.** 
    *;

-keep class org.apache.commons.codec.** 
    *;


-keep class net.sqlcipher.**  *; 
-dontwarn net.sqlcipher.**

-keep class org.codehaus.**  *; 

-dontwarn org.apache.http.**
-dontwarn org.apache.commons.codec.**
-optimizations !class/merging/vertical*,!class/merging/horizontal*,!code/simplification/arithmetic,!field/*,!code/allocation/variable

-keep class org.apache.http.*  *; 
-keep class org.apache.http.client.**  *; 
-keep class org.apache.http.cookie.**  *; 
-keep class org.apache.http.impl.cookie.**  *; 
-keep class org.apache.http.message.**  *; 
-keep class org.apache.http.util.**  *; 

# These classes contain references to external jars which are not included in the default MobileFirst project.
-dontwarn com.worklight.common.internal.WLTrusteerInternal*
-dontwarn com.worklight.jsonstore.**
-dontwarn org.codehaus.jackson.map.ext.**
-dontwarn com.worklight.androidgap.push.GCMIntentService
-dontwarn com.worklight.androidgap.plugin.WLInitializationPlugin
-dontwarn com.worklight.wlclient.push.GCMIntentService
-dontwarn org.bouncycastle.**
-dontwarn com.worklight.androidgap.jsonstore.security.SecurityManager

-dontwarn com.worklight.wlclient.push.WLBroadcastReceiver
-dontwarn com.worklight.wlclient.push.common.*
-dontwarn com.worklight.wlclient.api.WLPush
-dontwarn com.worklight.wlclient.api.SecurityUtils
######################################################################################################
-ignorewarnings

【讨论】:

以上是关于您如何从 Eclipse 内部制作签名和混淆的 android 版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何将重新配置的 apk 文件从 Amazon Appstore 导入 Eclipse 以进行签名

因为难看的签名尴尬?Python爬虫制作艺术签名软件!

如何在 android studio 中检索签名 APK 的密钥别名和密钥密码(从 Eclipse 迁移)

R:如何为预测模型制作混淆矩阵?

APP安全加固全过程(混淆/签名验证/反调试)

如何使用此类签名制作组合器?