![](/img/trans.png)
[英]Library works in IntelliJ doesn't but doesn't work in Android studio
[英]Android Studio consumerProguardFiles for the library doesn't work
我想在我的庫上使用proguard,但文件(規則)應該在庫中設置。 這意味着我不想在我的app模塊中明確設置規則w(屬於庫)。
我發現有類似consumerProguardFiles的屬性。 我的設置:
庫gradle:
buildTypes {
debug {
debuggable true
minifyEnabled false
}
release {
minifyEnabled true
consumerProguardFiles 'proguard-rules.pro'
}
}
app gradle:
buildTypes {
debug {
applicationIdSuffix ".debug"
debuggable true
minifyEnabled false
signingConfig signingConfigs.debug
}
release {
debuggable false
minifyEnabled true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
為什么上面的配置不起作用? 我收到錯誤,無法找到庫中的包/符號。
編輯:
重要的是我的proguard-rules.pro用於庫和proguard-rules.pro用於主應用程序模塊都是空的。
示例錯誤:
Error:(3, 60) error: package (my library package here) does not exist
(...)
Error:(16, 9) error: cannot find symbol class NavigationStructureModel
(...)
超過一個handrued錯誤。 我可以看到我的庫中的所有課程都丟失了。
你需要弄清楚你是否願意
那是在它到達應用程序之前 。 您的庫proguard規則負責使所有代碼都可訪問和存在,但您可能會混淆內部類。
這是庫build.gradle:
android {
defaultConfig {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
buildTypes {
release {
minifyEnabled true // Yes, run proguard on the library itself.
}
}
}
如果您將此庫作為開源發布,則不需要此。 如果您不將庫發布為公共,則不需要此。
我收到錯誤,無法找到庫中的包/符號。
Proguard構建了類之間的依賴關系圖。 此時,庫是一個獨立的單元,因此如果您沒有提供任何規則,則不會使用任何類,因此proguard會將它們全部刪除。
讓消費者(應用程序)知道要保留哪些類庫。
這是庫build.gradle:
android {
defaultConfig {
// Here's what proguard on the app should do on the library's behalf.
consumerProguardFiles 'proguard-consumer-rules.pro'
}
buildTypes {
release {
minifyEnabled false // No, don't proguard the library itself.
}
}
}
您需要告訴proguard要保留哪些代碼以及要保留的名稱。 Proguard會刪除所有未使用的代碼並拼寫您不想留下的名稱。
你不告訴proguard要刪除什么,你告訴proguard要保留什么。
好的,既然proguard可能正在吃掉你的課程,那么在app
的proguard-rules.pro文件中嘗試這樣的事情:
keepclass my.library.package.name.** { *;}
應該告訴ProGuard保存所有類新的my.library.package.name
所以希望他們不會丟失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.