我正在编写一个作为插件加载到第三方应用程序的android模块。 API由.jar
提供,已被proguard混淆并包含mapping.txt
文件。
在我的proguard配置中,我有:
-dontskipnonpubliclibraryclasses
-dontshrink
-dontoptimize
-applymapping "mapping.txt"
...
问题是,仅在我的模块中使用的类被映射到与库.jar
中使用的类相同的名称(但我不会使用)。在运行时加载它们会导致IncompatibleClassChangeError
。
我可以清楚地看到生成的映射文件中的重复项:
mine:
timber.log.Timber -> b.a.a:
jars:
gnu.nmea.ContainsPosition -> b.a.a:
有没有办法让proguard 不重用obfusaction名称?
答案 0 :(得分:2)
您应该使用规则
-repackageclasses <packagename>
在您的Android模块中。 这会将所有混淆的类移动到这个(唯一的)包中,避免名称冲突。
示例:您的模块名为com.foo.mymodule
,然后您将添加
-repackageclasses com.foo.mymodule.internal
所有混淆的类都会在那里结束。