android - 带有代码混淆的多模块库
问题描述
我有一套图书馆作为 3 个独立的 aars 分布。有没有办法能够独立地混淆每个库,但保持内部模块之间调用方法的能力?
例如,如果libA
需要从 调用myMethod
,libB
但我不想myMethod
暴露给集成我的库的客户端(但所有库都必须被混淆)。
现在我被迫myMethod
公开并将其排除在混淆之外,以便可以从libA
. 这个问题有没有更好的解决方案,既不会暴露myMethod
给客户,又会被混淆?
解决方案
我不确定您是否已经找到了解决问题的方法,但我玩了一点并找到了可行的解决方案。我制作了一个小型 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"
我想保留的课程用@Keep
from注释androidx.annotation.Keep
推荐阅读
- java - 创建一个模拟信号量的类,但允许的数量不应超过 0
- python - 在 pyqtgraph 中用鼠标单击时从图形中获取图形坐标
- android - 在 android 上发布 ShapeRenderer 行为
- python - ValueError:无法将字符串转换为浮点数:'-'
- javascript - 为什么我不能在这里使用 mockResolvedValue?
- c# - 如何使用数据库优先方法更新 .Net Core 中的数据库上下文类?
- java - 使用 JavaFx 画一条直线?
- discord.py - discord.ext.commands.errors.CommandInvokeError 命令引发异常:NameError: name 'self' is not defined
- flutter - Flutter - 忽略拇指向下
- react-native-mapbox-gl - MapboxGL.SymbolLayer 过滤表达式以检查数组中的 id