我在IntelliJ中有一个Android项目,我似乎无法让ProGuard工作。该项目分为几个模块,因为其中一些模块用于其他应用程序。应用程序结构如下:
现在问题是所有这些模块都依赖于相同的外部库 - 例如android support library
或spring
。
例如,主模块和网络模块都需要libs/spring-android-core-1.0.1.RELEASE.jar
库。 IntelliJ可以很好地管理所有项目库,因此您可以将它们分配给不同的项目 - 这样应用程序可以毫无问题地编译。
然而,一旦使用ProGuard编译应用程序,它会将库作为输入并抛出错误:
Information:ProGuard: [main] Reading program jar [intellij/generated/proguard_input1846333276098786347.jar]
Information:ProGuard: [main] Reading program jar [/libs/android-support-v4.jar]
Information:ProGuard: [main] Reading program jar [/libs/spring-android-core-1.0.1.RELEASE.jar]
Information:ProGuard: [main] Reading library jar [android-sdk/platforms/android-16/android.jar]
...
Error:ProGuard: [main] Warning: android.support.v4.media.TransportMediatorJellybeanMR2: can't find superclass or interface android.media.RemoteControlClient$OnGetPlaybackPositionListener
...
现在我已经阅读了官方documentation,我已经尝试了1,2和3但没有成功。
简单地忽略图书馆并不起作用:
-dontwarn android.support.**
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
应用程序被混淆但是立即崩溃:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: package.name, PID: 7335
java.lang.ExceptionInInitializerError
at a.b.a.d.am.<clinit>(Unknown Source)
at a.d.b.b.a.a.<init>(Unknown Source)
将库指定为-libraryjars
也不起作用:
-libraryjars libs/android-support-v4.jar
这只是将库添加到库列表中...现在库被添加两次,一次作为injar,一次作为libraryjar。所以有重复的类错误。我已经尝试过各种各样的组合与injars / library jar,我甚至尝试将jar移动到SDK源。
有关如何在具有多个模块的项目中管理ProGuard的任何想法?也许排除一些罐子?似乎它们被IntelliJ添加了两次,遗憾的是我似乎无法编辑IntelliJ提供的所有输入参数。 任何帮助将不胜感激。