我对在我的 android 应用程序中使用 lgpl 库有一些疑问:
- 是否可以在我的 apk 中的其他任何地方拥有该库 - 而不是在 .dex 文件中?
- 如果我在同一个项目中创建服务,该服务是否在 .dex 文件中?
- android 应用程序可以在 apk 中包含多个 .dex 文件吗?
- 有没有办法在安装过程中自动安装另一个 apk(无需询问用户/无需先搜索)?
谢谢,弗洛里安
如果您不使用 Proguard 隐藏 LGPL 库,最终用户可以将您的 apk 转换为 jar,提取 jar,替换 LGPL 库类,重新打包 jar,使用用户生成的密钥对其进行签名,将 jar 转换为 apk,然后安装新的apk 到 Android 设备。
droidtext 项目有这个过程的解释页面。这样做很令人困惑,所以 Quinn Bailey 的回答仍然更好。
编辑:我引用的 wiki 页面已失效,因为 droidtext 项目因许可问题而关闭。如果您有 wiki 页面的本地副本,我将不胜感激。以下是我能记住的重要步骤列表:
开发人员应该编辑他们的 Proguard 配置文件,以防止整个 LGPL 库包被遮挡。(如何阻止 proguard 混淆整个包?)
用户可以使用apktool和dex2jar等工具对 apk 及其内容进行解包、修改和重新打包。
无论法律地位如何(IANAL),我都看不到您可以在技术上实现这一目标的场景。
据我了解,android 应用程序中使用的 Java 库必须同时提供给 dx 编译器和apkbuilder,以便消除 #1。dx 的输入还包括您编译的aidl 源代码,因此在#2 上是“是”。接下来,我相信在一个 android 应用程序中只能有一个 classes.dex 文件,所以#3 出来了。不确定#4(根据 Matt Wolfe 的评论,这也是否定的)。希望这有助于澄清事情,祝你好运......
参考: http ://www.alittlemadness.com/2010/06/07/understanding-the-android-build-process/