在付费Android应用程序中使用LGPL库

Kam*_*ran 19 android lgpl

我可以在付费的Android应用程序中使用LGPL库吗?我不打算修改LGPL库,我只是想用它.这合法吗?

gre*_*f82 13

在Android免费或付费应用程序中使用LGPL是合法的,但要符合LGPL,您必须:

  1. 向用户显示所使用的库以及在何处查找原始代码;
  2. 配置proguard以混淆LGPL涵盖的代码;
  3. 避免在您的应用中检查签名合规性;
  4. 向用户提供如何更换库的指示.

对于第4点,您可以指示使用dex2jar,替换LGPL代码并重新签名APK.它需要为用户做很多工作,但有可能做到这一点,并允许最终用户重新组合或重新链接代码,正如LGPL所说.此外,如果您的应用使用任何Google服务,则用户需要创建帐户以生成自己的API密钥等.

  • 在我看来,这应该是公认的答案 (2认同)

pwe*_*wes 12

如果您正在制作付费的Android应用程序,您可能会遇到特定问题LGPL的问题:可替代性.通常,它指出当您分发组合作品时,您必须为用户提供用不同版本替换库的可能性(例如,更新版本).如前所述,在DEX文件的情况下非常值得怀疑.

单个DEX文件的替代方法是从依赖库中创建一个在LGPL上发布的单独应用程序.在这样的应用程序中,您可以创建从付费应用程序连接到的服务.然后,用更新的版本替换LGPL库只重新编译并重新安装库的APK是必需的.

当然,麻烦是现在你要安装多个APK.


Pau*_*sma 9

我不是律师,但根据我对GNU宽通用公共许可证3.0的理解,第4节明确规定了静态链接,因为要求规定:

您可能会传达一个联合工作下,您选择的条件是,加在一起,有效地不限制包含在合并作品图书馆的部分进行修改和逆向工程进行调试修改,如果你同时做以下每一项:

  • [...]
  • d)做的一个如下:

    • 0)根据本许可条款和相应的应用程序代码,以允许用户重新组合或重新链接应用程序与链接版本的修改版本的条款相应的形式传送相应的应用程序代码,以生成修改的组合工作,按照GNU GPL第6节规定的方式传送相应的来源.
    • 1)使用合适的共享库机制链接库.合适的机制是(a)在运行时使用已经存在于用户计算机系统上的库的副本,以及(b)将与与链接版本接口兼容的库的修改版本正确地操作.

(强调我的.)

Android APK的性质无法实现第4d.0节:APK被编译为Dex并作为整体签名,包含引用的库,因此如果没有原始源代码,密钥库和密钥库密码,则无法完成交换库.

第4d.1 可以通过部署2周的APK是可能的:

  • 一个APK包含LGPL库,反过来开源并在LGPL下获得许可
  • 另一个专有APK引用LGPL应用程序.

但是,如果没有明确添加用户继续下载LGPL依赖关系的要求,则无法直接通过Google Play部署此类应用程序,这需要在Google Play上作为单独的应用程序进行部署.这对最终用户来说非常繁琐,并且实际上不是典型消费者应用程序的选项.

根据在William Tate的回答中与Falken教授的讨论,LGPL的条款可能更适用于通过本机代码包含的C库,因为它们作为单独的库驻留在APK中.虽然APK无法签名,但可以在替换目标文件的情况下重新打包APK.从我的角度来看,这在技术上符合许可证的要求.

  • +1这是一个比我原来的(读取:懒惰)尝试更好,更深入的答案. (2认同)

小智 6

droidText库(用于在Android上导出为PDF格式并在LGPL下发布)详细解释了如何使用它们的库并仍然符合LGPL:

http://code.google.com/p/droidtext/wiki/LGPLCompliance

我发现它非常有帮助.基本上你使用utililty(dex2jar)来获取dex文件的库的jar - 从而允许和最终用户在需要时使用更高版本的droidText库进行更新.

  • 链接坏了;( (8认同)