Android 在Eclipse中使用ProGuard(不带私钥)
我一直在试着用我的测试Android应用程序看ProGuard的运行。我是否需要注册为安卓开发者并拥有密钥?我知道应用程序需要在发布模式下构建。我在安卓网站上读了好几次说明,其中谈到了ProGuard做了什么,但没有谈到如何在安卓系统中正确地实现它的模糊处理。找到了另一个演示如何使用Ant,但不使用Eclipse的工具 不,您不需要注册为Android开发人员来尝试Proguard混淆。你只需要为你的应用程序安装并正确配置Proguard 几个月以来,安卓SDK附带了一个直接集成的Proguard发行版。打开Android 在Eclipse中使用ProGuard(不带私钥),android,proguard,Android,Proguard,我一直在试着用我的测试Android应用程序看ProGuard的运行。我是否需要注册为安卓开发者并拥有密钥?我知道应用程序需要在发布模式下构建。我在安卓网站上读了好几次说明,其中谈到了ProGuard做了什么,但没有谈到如何在安卓系统中正确地实现它的模糊处理。找到了另一个演示如何使用Ant,但不使用Eclipse的工具 不,您不需要注册为Android开发人员来尝试Proguard混淆。你只需要为你的应用程序安装并正确配置Proguard 几个月以来,安卓SDK附带了一个直接集成的Proguar
\tools
目录,检查是否在其中找到名为proguard
的目录。如果不是这样,最好是升级SDK
在集成版Android SDK中使用Proguard非常简单:您只需在项目的文件default.properties
中声明以下内容:
# ProGuard
proguard.config=proguard.cfg
然后,如果您的proguard.cfg
不存在,您必须编写它。Android SDK为您创建的任何新项目编写此文件,因为它集成了Proguard,但如果您的项目是使用以前版本的SDK创建的,则此文件将不存在。以下文件适用于大多数Android项目:
-printmapping proguard.map
-renamesourcefileattribute ProGuard
-keepattributes SourceFile,LineNumberTable
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-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 <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-printmapping proguard.map
-重命名资源属性ProGuard
-keepattributes源文件,LineNumberTable
-优化过程5
-dontusemixedcaseclassnames
-DontskipnonPublicLibraryClass
-不要翻转
-冗长的
-优化!代码/简化/算术,!字段/*,!类/合并/*
-keep public class*扩展android.app.Activity
-keep public class*扩展android.app.Application
-keep public class*扩展了android.app.Service
-keep public class*扩展了android.content.BroadcastReceiver
-keep public class*扩展了android.content.ContentProvider
-保持公共类com.android.vending.licensing.ILicensingService
-KeepClassSwithMemberNames类*{
本地人;
}
-KeepClassSwithMemberNames类*{
public(android.content.Context、android.util.AttributeSet);
}
-KeepClassSwithMemberNames类*{
public(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembers枚举*{
公共静态**[]值();
公共静态**valueOf(java.lang.String);
}
-keep class*实现android.os.Parcelable{
公开静态最终android.os.Parcelable$Creator*;
}
在调试模式下编译时,不会出现混淆。要混淆代码,您必须:
1-确保清单文件将调试模式设置为false:
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:debuggable="false">
2-使用Eclipse的“文件/导出”菜单导出APK(假设您使用的是Eclipse,但谁不使用?:-)。只要使用“Run”函数就不会出现混淆,因为这实际上是在调试
完成模糊处理后,您将在项目的根目录中找到一个
proguard
目录。它将包含允许您检查模糊代码的文件,查看什么是模糊的,什么不是模糊的,等等。Proguard的文档将在这方面帮助您,这非常简单 感谢@Shlublu的详细回复,但当我使用Eclipse向导导出时,它会在几步后要求我提供“密钥库”,我知道在发布模式下构建时无法使用调试密钥,而且我没有“真正的”密钥,我仍然卡住了。没关系,我发现了,我刚刚创建了一个新的密钥库,并且成功了。我遇到了这样的错误“Proguard返回了错误代码1。请看“控制台”。怎么了?没有上下文很难说。我想这可能是一个新问题的主题。