如何在库模块中使用 ProGuard

Hit*_*lot 5 android android-proguard

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

库模块build.gradle

buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
Run Code Online (Sandbox Code Playgroud)

日志错误

 /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.
Run Code Online (Sandbox Code Playgroud)

这里 doc 类文件存在于库模块中

ProGuard 文件规则

-keep class com.alprlib.alpr.** { *; }
-keepclassmembers class alprlib.alpr.** {*;}
Run Code Online (Sandbox Code Playgroud)

Mas*_*ari 10

对我来说,在库项目中为库指定混淆器设置(例如不应混淆哪些库文件)是有意义的。我发现我还需要在应用程序中包含库模块中的混淆器配置。为此,我将以下内容添加到defaultConfig我的库的部分中build.gradle

consumerProguardFiles 'proguard-rules.pro'
Run Code Online (Sandbox Code Playgroud)

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

另请参见consumerProguardFiles

请参阅这篇文章: /sf/answers/3404540191/

  • 这里是官方文档的链接:https://developer.android.com/studio/projects/android-library#Considerations (2认同)

小智 0

你可以在你的 proguard 文件上写 -

-keep public class * extends android.app.Activity 
Run Code Online (Sandbox Code Playgroud)

或者你想保留什么课程。看看这个 - https://www.guardsquare.com/en/proguard/manual/examples