Android 应用程序和开源库

标签 android c++ stl licensing

<分区>

我有一个基于 c++ 的现有应用程序(未公开发布,只是内部发布),我想将其移植到 android 并在我的 android 应用程序中使用它的服务。我在该应用程序中使用 STL 和 boost。

我的问题是,如果我想将现有代码移植到 android,我可以将它们编译为静态或共享对象吗?

我计划使用 Android NDK 将 native c++ 代码作为库移植到 android,并在我的 Java android 应用程序中使用它

但因为我也使用开源库,如果我在我的 Android 应用程序代码中使用它们,我是否也应该发布我的库的源代码?

在将其作为公共(public)应用程序发布时,我不明白这些许可证通常是如何运作的。我想如果我将它编译为共享库,我想我应该没问题,但我认为在应用程序上传方面会有一些问题??(也许不是??)

其次,如果我将它们编译为静态库,那么我想我需要发布我的源目标文件??

我不太愿意发布我的源代码,我怎样才能有效地做到这一点?我应该采用哪条路径(共享/静态对象),或者它甚至无关紧要,因为无论如何应用程序只是一个安装程序并且它应该在任何手机上都可以正常工作?如果我这样做会不会有任何开源违规问题??

谢谢

最佳答案

你首先得学习 Java... 并弄清楚没有 STL 和 boost 库。

Java 生态系统拥有自己的开源库群,您可以使用它们来提高工作效率。将它们包含在您的应用程序中就像在正确的文件夹中复制一组 .jar 文件并将它们添加到构建路径中一样。

关于许可,大多数问题都与 GPL 许可库有关。 GPL 许可证要求使用 GPL 组件制作的任何应用程序也必须是开源的并使用 GPL(著名的“传染性”许可证)获得许可。

无论如何,GPL 很少用于库,因为这种完全开源的要求会限制它们的采用。有一个名为 LGPL 的派生 GPL 许可证,它不要求您的应用程序是开源的。

不过,库通常是在更宽松的许可下分发的,而且大多数时候将它们包含在您的应用中不是问题。

关于Android 应用程序和开源库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6907917/

相关文章:

java - Android 谷歌地图定位权限

c++ - 使用C++和Visual Studio调试是否有办法在超出数组或内存分配的界限时始终抛出异常?

c++ - 为什么返回不复制对象?

Android cursor.getColumnNames() 不包含新添加的列

java - 在 Eclipse 中匹配颜色

c++ - 如何将指针保存到重新定义的运算符?

c++ - STL算法删除容器中的所有对象?

c++ - __glibcxx_function_requires 和 __glibcxx_requires_valid_range 宏是如何工作的?

c++ - 关联容器中的 end() 迭代器

android - custonlistadapter 的空指针异常?