2012-12-03 39 views
3

我已经在我的Android应用程序使用LGPL库的一些问题:包括Java库不.DEX文件

  1. 是否有可能有图书馆其他地方在我的apk - 不 的。 DEX文件?
  2. 如果我在同一个项目中创建一个服务,是.dex文件中的服务吗?
  3. Android的应用程序可以包含apk中的多个.dex文件吗?
  4. 有没有办法在安装过程中自动安装另一个apk(无需询问用户/不先搜索)?

感谢, 弗洛里安

+0

一个很好的questiob!因为lgpl不允许在dex文件中。一个很好的问题是,智能手机上是否允许使用lgpl lib? Lgpl库必须可由最终用户交换,而在商店的应用程序中则不是这样。 – AlexWien

回答

1

不管法律地位(IANAL),我实在看不出这样一个场景,你可以在技术上实现这一点。

据我所知,android应用程序中使用的Java库必须同时提供给dx编译器 apkbuilder,以使nixes#1。对dx的输入还包括您编译的aidl源文件,所以这对第二个是“是”。接下来,我相信在android应用程序中只能有一个classes.dex文件,所以#3已经不存在了。不知道#4(根据马特沃尔夫的评论,这也是一个不)。希望可以帮助澄清的事情,运气好的话...

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

+0

你不能在用户的手机上安装apk,我知道这一点。你可以在你自己的套件中捆绑另一个apk,当用户启动应用程序时将其卸载到外部存储,然后提示他们安装它(采取他们直接到安装程序)。我们这样做,它运作良好,用户需要设置,以允许安装非Play商店应用程序。 –

+0

这对于卸载第二个apk文件是有意义的,但仍然在编译第二个apk文件,我相信你需要将你的Java库提供给dx和apkbuilder。我并没有试图击败Florian试图做的事情的可能性,但我的理解是平台的限制不允许它(除了由于LGPL要求可能在法律灰色地带的事实)。 –

+0

这个答案实际上是不正确的 - 它实际上可能有多个dex文件,如果不是直接的手段,那么通过手动加载额外的文件。 –

1

如果不掩盖LGPL库Proguard的,最终用户可以将您的APK至罐子,罐子提取,替换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页面我会很感激的本地副本。以下是重要的步骤列表我还记得:所以它被遮蔽排除整个LGPL库包

  1. 开发人员应编辑Proguard的配置文件。 (How to stop proguard from obfuscating entire package?

  2. 用户可解压缩,修改,并通过使用工具,如apktooldex2jar重新包装APK和它的内容。