代码之家  ›  专栏  ›  技术社区  ›  bj0

proguard with applymapping生成重复的名称

  •  0
  • bj0  · 技术社区  · 6 年前

    我正在编写一个android模块,作为插件加载到第三方应用程序中。API由 .jar 它已被proguard混淆,并包含 mapping.txt 文件

    在我的proguard配置中,我有:

    -dontskipnonpubliclibraryclasses
    -dontshrink
    -dontoptimize
    
    -applymapping "mapping.txt"
    
    ...
    

    问题是,仅在模块中使用的类会映射到与库中使用的类相同的名称 .罐子 (但我不使用)。当它们在运行时加载时,会导致 IncompatibleClassChangeError .

    我可以清楚地看到生成的映射文件中的副本:

    mine:
    timber.log.Timber -> b.a.a:
    
    jars:
    gnu.nmea.ContainsPosition -> b.a.a:
    

    有没有办法让proguard 重用混淆名称?

    1 回复  |  直到 6 年前
        1
  •  3
  •   T. Neidhart    6 年前

    你应该使用规则

    -repackageclasses <packagename>
    

    在Android模块中。 这将把所有模糊的类移到这个(唯一的)包中,避免名称冲突。

    示例:您的模块名为 com.foo.mymodule ,然后您可以添加

     -repackageclasses com.foo.mymodule.internal
    

    所有模糊的类都会在那里结束。