2017-05-19 115 views
0

我想在库模块中启用ProGuard,但出现编译错误,该包不存在。在库模块中应用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.** {*;} 
+0

库一无所知的消费者。就图书馆而言,没有人使用它的代码,所以一切都被proguard删除。你必须手动告诉proguard不要删除任何类。只有这样,您才可以另外告诉它混淆不属于图书馆公共API的名称。 [我已经在这里了。](http://stackoverflow.com/a/42758629/2444099) –

+0

@EugenPechanec ohh哇!听起来很不错。请你详细解释一下 –

+0

https://www.guardsquare.com/en/proguard/manual/examples#library –

回答

1

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

-keep public class * extends android.app.Activity 

或者什么类你想保持。 看一看 - https://www.guardsquare.com/en/proguard/manual/examples

+0

你现在正在工作 –

+0

我想压缩源代码但使用上面的行类代码没有压缩 –

+0

https://developer.android.com/studio/build/shrink-code.html –

0

这对我来说是有道理的指定图书馆项目库(如库文件不应该混淆)的proguard设置。我发现我还需要在我的应用程序中包含来自我的库模块的proguard配置。要做到这一点,我添加了以下到defaultConfig节在我的图书馆的build.gradle

consumerProguardFiles 'proguard-rules.pro' 

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

又见consumerProguardFiles

请看到这个帖子: https://stackoverflow.com/a/48636288/8770663