如何在库模块中使用ProGuard

5

我想在库模块中启用ProGuard,但是编译时出现“包不存在”的错误。为什么在库模块应用ProGuard后包不存在?

库模块build.gradle

buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

日志错误

 /home/hitesh/Documents/Android Studio Project/ALPR-Sample/app/src/main/java/com/alpr/sample/GalleryActivity.java
Error:(15, 32) error: package com.alprlib.alpr.doc does not exist
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

这里的文档类文件存在于库模块中。
ProGuard 文件规则。
-keep class com.alprlib.alpr.** { *; }
-keepclassmembers class alprlib.alpr.** {*;}

1
该库对其使用者一无所知。就该库而言,没有人使用它的代码,因此所有内容都会被Proguard删除。您必须手动告诉Proguard不要删除任何类。只有这样,您才能额外告诉它混淆不属于库的公共API名称。我已经在这里详细解释过了。 - Eugen Pechanec
@EugenPechanec 哦,哇!听起来不错。你能详细解释一下吗? - Hitesh Gehlot
https://www.guardsquare.com/en/proguard/manual/examples#library - Eugen Pechanec
请查看此帖子: 在这里输入链接说明 - Masoud Mokhtari
2个回答

10

我认为在库项目中指定proguard设置(例如哪些库文件不应该被混淆)是有意义的。我发现我还需要在我的应用程序中包含来自库模块的proguard配置。为了做到这一点,我在我的库的build.gradle中的defaultConfig部分添加了以下内容:

consumerProguardFiles 'proguard-rules.pro'

然后我配置了proguard-rules.pro文件,使其保留我的库模块中重要序列化类的名称。

另请参见consumerProguardFiles

请参阅此帖子: https://stackoverflow.com/a/48636288/8770663


2
这里是官方文档链接:https://developer.android.com/studio/projects/android-library#Considerations - Michael Troger

0

我想压缩源代码,但使用以上行的类代码未被压缩。 - Hitesh Gehlot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接