包括Java库不在.dex文件中

时间:2012-12-03 11:47:13

标签: java android apk dex

我有一些关于在我的Android应用程序中使用lgpl库的问题:

  1. 是否有可能让我的apk中的其他任何地方的库 - 不是 .dex文件?
  2. 如果我在同一个项目中创建服务,那么该服务是否在.dex文件中?
  3. Android应用程序可以包含apk中的多个.dex文件吗?
  4. 有没有办法在安装过程中自动安装另一个apk(无需询问用户/不先搜索)?
  5. 谢谢, 弗洛里安

2 个答案:

答案 0 :(得分:1)

无论法律地位(IANAL)如何,我都无法真正看到您在技术上可以实现这一目标的情况。

据我所知,Android应用程序中使用的Java库必须同时提供给dx编译器 apkbuilder,以便nixes#1。 dx的输入还包括已编译的aidl源,因此#2上的“是”。接下来,我相信在Android应用程序中只能有一个classes.dex文件,因此#3已经出局。不确定#4(根据Matt Wolfe的评论,这也是一个不)。希望有助于澄清事情,祝你好运......

参考: http://www.alittlemadness.com/2010/06/07/understanding-the-android-build-process/

答案 1 :(得分:1)

如果你没有用Proguard掩盖LGPL库,最终用户可以将你的apk转换为jar,解压缩jar,替换LGPL库类,重新打包jar,用用户生成的密钥签名,将jar转换为apk,然后将新apk安装到Android设备上。 droidtext project has an explanation page of this process. 这样做很困惑,所以Quinn Bailey的答案仍然更好。

编辑:我引用的wiki页面已经死了,因为droidtext项目was shutdown due to licensing issues.如果你有一个wiki页面的本地副本,我真的很感激。以下是我记得的重要步骤列表:

  1. 开发人员应编辑他们的Proguard配置文件,以便排除整个LGPL库包被遮挡。 (How to stop proguard from obfuscating entire package?

  2. 用户可以使用apktooldex2jar等工具解压缩,修改和重新打包apk及其内容。