2017-09-15 22 views
6

通過使用Android Studio 3.0 Beta 5,使用帶有即時應用的默認項目(空白活動)。多功能即時應用程序無法編程?

要打開Proguard的,我只設置所有的build.gradle(應用程序,基礎和功能)與

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

當編譯應用程序工作正常。但是,編譯即時應用程序時,會出錯。

了java.lang.RuntimeException:無法實例活動 ComponentInfo {com.elyeproj.myapplication/com.elyeproj.myapplication.feature.MainActivity}: 拋出java.lang.ClassNotFoundException:找不到 com.elyeproj .myapplication.feature.MainActivity任何原子類 裝載機或父類加載器

好像ProGuard的只是不檢查跨功能的依賴關係。這怎麼能解決?

+0

報告的問題,以谷歌爲每https://issuetracker.google.com/issues/65710224 – Elye

+0

@Bedant,或許給予好評這個問題會有助於提高對它的關注嗎?謝謝。 – Elye

+0

這有沒有更新?由於Instant Apps的大小要求,似乎是非常嚴重的限制。 –

回答

0

Google友邦保險團隊正在修復此問題,謝謝您的耐心等待!

此問題的臨時解決方法是爲每個功能模塊配置一個大量的「保持」程序。

要了解,當你配置你的ProGuard保留哪些類,請執行以下操作:

  1. 添加「-whyareyoukeeping類**」到您的應用程序/ proguard-rules.pro(設置 - 應用程序模塊)
  2. 設置所安裝的應用程序內的minifyEnabled真
  3. 建設安裝,應用程序,那麼搖籃控制檯將包含的信息列表中哪些類它一直與否
  4. 副本部分的一些編輯器,你可以編輯它
  5. 對於每一個與「保留」或「是一個圖書館」記錄的類,這將是一個類保持,即。 -keep class some.package.class {*;} a。您應該也可以在會員級別上進行進一步優化
  6. 編譯完這些列表後,將它們添加到您的每個功能的proguard-rules.pro
  7. 您可能會也可能不會需要驗證的基礎/ proguard-rules.pro使用「-dontobfuscate」(或傳播混淆下游映射到功能以某種方式)

現在你可以用minifyEnabled真正建立自己的即時應用。

請注意第5步,這可能是一個編譯挑戰,取決於你的編輯器有多好。工程師展示了一種方法是使用AWK命令來替換文本:

awk '/^[^ ]/ { cls=$1 } /is (kept|a library)/ { print "-keep class " cls " {*;}" }'