首页 > 解决方案 > 带有代码混淆的多模块库

问题描述

我有一套图书馆作为 3 个独立的 aars 分布。有没有办法能够独立地混淆每个库,但保持内部模块之间调用方法的能力?

例如,如果libA需要从 调用myMethodlibB但我不想myMethod暴露给集成我的库的客户端(但所有库都必须被混淆)。

现在我被迫myMethod公开并将其排除在混淆之外,以便可以从libA. 这个问题有没有更好的解决方案,既不会暴露myMethod给客户,又会被混淆?

标签: androidgradledexguard

解决方案


我不确定您是否已经找到了解决问题的方法,但我玩了一点并找到了可行的解决方案。我制作了一个小型 HelloWorld 应用程序来展示它是如何完成的:https ://github.com/jmineraud/multi-module-android-app 。

它包含 lib 的 repo 作为 git 子模块(https://github.com/jmineraud/multi-module-android-lib

诀窍是独立混淆库,而不是优化它们(我们不想删除任何函数)并且所有依赖的子模块必须重用相同的mapping.txt文件。

在我的子模块 proguard 文件中,我添加了:

-dontshrink
-dontoptimize
#-useuniqueclassmembernames # Option does not work with R8
-repackageclasses "com.your.package"  # I do not want to obfuscate the whole hierarchy to keep my obfuscated library class separate and avoid obfuscation problems when the lib is used in the app project (which will be in turn obfuscated)
-applymapping "../lib-core/build/outputs/mapping/release/mapping.txt"

我想保留的课程用@Keepfrom注释androidx.annotation.Keep


推荐阅读