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

两个官方 android 库中的重复类,gradle 失败

无法解析 android 库中的符号“日志”

为啥android中的ViewPager只能在V4 Support库中使用

使用 Android 设计支持库中的浮动操作按钮的浮动操作菜单实现 [关闭]

Xamarin 是不是支持 Xamarin Android 绑定库中的 Kotlin 协程?