Android 库中的 Proguard
Posted
技术标签:
【中文标题】Android 库中的 Proguard【英文标题】:Proguard in Android Library 【发布时间】:2013-08-14 15:30:30 【问题描述】:我在使用 android 中的 Proguard 文件时遇到错误。
关键是,我知道如何在Android项目中使用它,但是现在,我需要将它用于Android库项目,并提取.jar
(库上没有资源),以混淆代码,因为我想分发我的库供所有人使用,但代码被混淆了。
我的 Android 库项目是一个普通项目,我只是将 .jar
包含在库项目的“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 -详细
-不要优化 -dontpreverify
-keepattributes 注解 -保持公共类 com.google.vending.licensing.ILicensingService -保持公共类com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * 本国的 ;
-keepclassmembers 公共类 * 扩展 android.view.View 无效集*(*); get();
-keepclassmembers 类 * 扩展 android.app.Activity 公共无效*(android.view.View);
-keepclassmembers 枚举 * 公共静态 *[] 值(); 公共静态 * valueOf(java.lang.String);
-keep class * 实现 android.os.Parcelable 公共静态最终 android.os.Parcelable$Creator *;
-keepclassmembers 类 *.R$ 公共静态;
-dontwarn android.support.**
我在控制台上运行得到的结果是:
Shrinking...
java.io.IOException: The output jar is empty. Did you specify the proper '-keep' options?
有人知道为什么吗?
非常感谢!
【问题讨论】:
【参考方案1】:您可以在 ProGuard 手册 > 示例 > A typical library 中找到处理库的配置。
值得注意的是,您需要保留所有公共 API:
-keep public class *
public protected *;
【讨论】:
谢谢,现在它正在生成我需要的 .jar。唯一的问题是,它太混乱了,没有一个项目可以理解任何东西......谁知道我怎样才能让公共 API 的方法工作?以上是关于Android 库中的 Proguard的主要内容,如果未能解决你的问题,请参考以下文章
为啥android中的ViewPager只能在V4 Support库中使用