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