我在Idea IDE中构建了一个与maven有两个依赖关系(fastjson和volley)的jar,现在我想混淆我的jar但没有混淆两个依赖jar,我试过在proguardgui中做这个,我的proguard .pro内容如下:
-injars android_video_tv_sdk_player-1.0.0-SNAPSHOT-shaded.jar
-outjars android_video_tv_sdk_player-1.0.0-SNAPSHOT-proguard.jar
-libraryjars 'C:\Users\hangl\IDE\sdk\platforms\android-16\android.jar'
-libraryjars 'C:\Users\hangl\IDE\sdk\extras\android\support\v4\android-support-v4.jar'
-dontoptimize
-dontusemixedcaseclassnames
-dontpreverify
-verbose
-dontwarn com.alibaba.**,com.android.volley.**
-keep class com.ifeng.exception.InvalidParamsException
-keep class com.ifeng.media.** {
<fields>;
<methods>;
}
-keep class com.alibaba.** {
<fields>;
<methods>;
}
-keep class com.android.volley.** {
<fields>;
<methods>;
}
# Keep - Applications. Keep all application classes, along with their 'main'
# methods.
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum PlayState {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,allowshrinking class * {
native <methods>;
}
# Remove - System method calls. Remove all invocations of System
# methods without side effects whose return values are not used.
-assumenosideeffects public class java.lang.System {
public static long currentTimeMillis();
static java.lang.Class getCallerClass();
public static int identityHashCode(java.lang.Object);
public static java.lang.SecurityManager getSecurityManager();
public static java.util.Properties getProperties();
public static java.lang.String getProperty(java.lang.String);
public static java.lang.String getenv(java.lang.String);
public static java.lang.String mapLibraryName(java.lang.String);
public static java.lang.String getProperty(java.lang.String,java.lang.String);
}
我的超级jar的主要包是com.ifeng.media,我想在这个包下保持类并在其他包中混淆其他类,但在我处理混淆了我的jar后,我发现混淆类中的大多数方法和文件都消失了!这是一个例子,我定义了类LogUtils.java,这里是代码:
/**
* Created by hangl on 2014/9/19.
*/
public class LogUtils {
private static boolean isDebug = true;
public static void d(String tag, String msg) {
if (isDebug) {
Log.d(tag, msg);
}
}
public static void v(String tag, String msg) {
if (isDebug) {
Log.v(tag, msg);
}
}
public static void i(String tag, String msg) {
if (isDebug) {
Log.i(tag, msg);
}
}
public static void e(String tag, String msg) {
if (isDebug) {
Log.e(tag, msg);
}
}
public static void w(String tag, String msg) {
if (isDebug) {
Log.w(tag, msg);
}
}
}
在混淆之后,它变成了类a.class,现在它的代码变成你现在看到的:
import android.util.Log;
public class a
{
private static boolean a = true;
public static void a(String paramString1, String paramString2)
{
if (a) {
Log.d(paramString1, paramString2);
}
}
public static void b(String paramString1, String paramString2)
{
if (a) {
Log.e(paramString1, paramString2);
}
}
}
我不知道为什么,其他类中存在同样的情况,我的proguard.pro文件有问题吗?谁能告诉我我需要做什么? 如果你有其他方法可以达到目标,比如在maven pom.xml中安装插件来混淆maven mudule(我已经尝试了这个,但我遇到同样的问题),请告诉我你的方式。谢谢!
答案 0 :(得分:0)
ProGuard的目标是删除类,字段和方法,并尽可能重命名其余的类,字段和方法。在这方面,似乎工作正常。 LogUtils和NetUtils类被删除或重命名是合理的,因为它们位于com.ifeng.media。**之外,您将保留它们。您可以更清楚地说明您对处理过的代码的期望或遇到的问题?
如果您想将代码作为Android应用程序处理,可以查看ProGuard手册&gt;例子&gt;完整的Android应用程序。或者,Android Ant插件,Android Gradle插件,Android Eclipse插件或Android Maven插件可以为您提供很长的路要走。
如果您想将代码作为Android库处理,可以查看ProGuard手册&gt;例子&gt;典型的图书馆。或者,Android Gradle插件可能有所帮助。