2017-09-15 133 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 " {*;}" }' 
相关问题