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

时间:2011-02-06 22:09:58

标签: android lgpl

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

6 个答案:

答案 0 :(得分:12)

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

  1. 向用户显示所使用的库以及在何处查找原始代码;
  2. 将proguard配置为模糊LGPL所涵盖的代码;
  3. 避免在您的应用中检查签名合规性;
  4. 向用户说明如何更换库。
  5. 对于第4点,您可以指示使用dex2jar,替换LGPL代码并重新签名APK。它需要为用户做很多工作,但可能这样做,并允许最终用户重新组合或重新链接代码,正如LGPL所说。此外,如果您的应用使用任何Google服务,则用户需要创建帐户以生成自己的API密钥等。

答案 1 :(得分:11)

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

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

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

答案 2 :(得分:9)

我不是律师,但根据我对the GNU Lesser General Public License 3.0的理解,section 4明确排除静态链接作为要求说明:

  

您可以根据您选择的条款传达合并作品,这些合并后的作品,有效地不会限制对合并作品中包含的库部分进行修改以及用于调试此类修改的逆向工程, 如果您还执行以下各项

     
      
  • [...]
  •   
  • d)以下之一:

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

(强调我的。)

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

第4d.1节可以通过部署两个APK来实现

  • 一个包含LGPL库并依次开源且在LGPL下获得许可的APK
  • 另一个引用LGPL应用程序的专有APK。

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

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

答案 3 :(得分:6)

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

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

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

答案 4 :(得分:3)

这应该概述您的主要问题:http://answers.google.com/answers/threadview/id/439136.html

大部分内容似乎都在披露您对图书馆的使用,并确保您遵守许可证的规定。

答案 5 :(得分:3)

我一直认为LGPL非常“灰色地带”。虽然有关于如何使用LGPL代码/库等的具体细节,但它并不一定反映作者的确切要求。

我个人建议联系作者,解释您的疑虑,并询问他们是否乐意让您使用它。