1

我在 Android 中的 Proguard 文件出现错误。

关键是,我知道如何在 Android 项目中使用它,但现在,我需要将它用于 Android 库项目,并.jar提取(库上没有资源)来混淆代码,因为我会喜欢分发我的库供大家使用,但代码被混淆了。

我的 Android 库项目是一个普通的项目,我只是将.jarwith 包含在 Library Project 的“bin”文件夹中,并且我正在尝试使用 Proguard 以这种方式对其进行混淆:

java -jar proguard.jar @proguard-project -verbose

我的 Proguard 文件是下一个:

-injars in.jar -outjars out.jar

-libraryjars /home/jorider/wul4/adt-android/sdk/platforms/android-17/android.jar -libraryjars /home/jorider/wul4/adt-android/sdk/extras/android/support/v4/android-support -v4.jar -libraryjars commons-codec-repackaged-3.1-b36.jar -libraryjars httpmime-4.2.5.jar

-dontusemixedcase 类名 -dontskipnonpubliclibraryclasses -verbose

-dontoptimize -dontpreverify

-keepattributes注解-keep public class com.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * { native ; }

-keepclassmembers 公共类 * 扩展 android.view.View { void set*( *); 得到();}

-keepclassmembers 类 * 扩展 android.app.Activity { public void *(android.view.View); }

-keepclassmembers enum * { public static * [] values(); 公共静态 * valueOf(java.lang.String); }

-keep 类 * 实现 android.os.Parcelable { public static final android.os.Parcelable$Creator *; }

-keepclassmembers 类 * .R$ { public static ; }

-不要警告 android.support.**

我在控制台上运行它得到的结果是:

Shrinking...
java.io.IOException: The output jar is empty. Did you specify the proper '-keep' options?

有谁知道为什么?

非常感谢!

4

1 回答 1

3

您可以在 ProGuard 手册 > 示例 >典型库中找到处理库的配置。

值得注意的是,您需要保留所有公共 API:

-keep public class * {
    public protected *;
}
于 2013-08-13T22:36:31.597 回答