Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Eclipse中使用ProGuard(不带私钥)_Android_Proguard - Fatal编程技术网

Android 在Eclipse中使用ProGuard(不带私钥)

Android 在Eclipse中使用ProGuard(不带私钥),android,proguard,Android,Proguard,我一直在试着用我的测试Android应用程序看ProGuard的运行。我是否需要注册为安卓开发者并拥有密钥?我知道应用程序需要在发布模式下构建。我在安卓网站上读了好几次说明,其中谈到了ProGuard做了什么,但没有谈到如何在安卓系统中正确地实现它的模糊处理。找到了另一个演示如何使用Ant,但不使用Eclipse的工具 不,您不需要注册为Android开发人员来尝试Proguard混淆。你只需要为你的应用程序安装并正确配置Proguard 几个月以来,安卓SDK附带了一个直接集成的Proguar

我一直在试着用我的测试Android应用程序看ProGuard的运行。我是否需要注册为安卓开发者并拥有密钥?我知道应用程序需要在发布模式下构建。我在安卓网站上读了好几次说明,其中谈到了ProGuard做了什么,但没有谈到如何在安卓系统中正确地实现它的模糊处理。找到了另一个演示如何使用Ant,但不使用Eclipse的工具

不,您不需要注册为Android开发人员来尝试Proguard混淆。你只需要为你的应用程序安装并正确配置Proguard

几个月以来,安卓SDK附带了一个直接集成的Proguard发行版。打开
\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。请看“控制台”。怎么了?没有上下文很难说。我想这可能是一个新问题的主题。