2017-05-19 238 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