我正在开发一个Java Android应用程序,我使用了一些非免费组件:谷歌地图,分析,以及许多开源(GPL)包。我希望能够轻松编译两个版本:
我认为Eclipse具有一些预处理能力,但这不是便携式或标准的。
这种情况的最佳做法是什么?
答案 0 :(得分:2)
这种情况的最佳做法是什么?
这个问题有三个答案。
第一个答案是咨询合格的法律顾问以及相关技术人员,以确定您的计划是否符合GPL的要求。 IANAL,但如果“完全成熟”包含GPL组件,你不能替换某些单独的应用程序的源代码,即使某些源代码是相同的,并声称你遵守GPL,如果有人请求源代码到“完全成熟”的应用程序。许可条款讨论对于StackOverflow来说是偏离主题的,但如果你有“这样的实现是否满足这个技术要求(恰好由GPL强加)”的问题,请随时问这些人。
第二个答案是zapl在评论中建议的内容,即考虑Gradle for Android。该构建系统中引入的“产品风格”使得一个项目可以相对容易地为不同的环境构建单独的应用程序版本,例如:
为单独的分销渠道使用单独的应用内购买API(例如,Play商店与亚马逊AppStore for Android)
使用ARM与x86 NDK编译的二进制文件
使用不同的广告网络
等
然而,虽然有一些方法可以让Eclipse和Gradle for Android相处,但它只适用于那些不同产品口味的源代码,资源或清单内容不同的项目。否则,至少在今天,Eclipse将不是一个选择。 Android Studio应该是一个选项,但我还没有尝试过使用它来构建产品风格。如果您没有使用IDE进行构建,而是使用Ant,那么Gradle for Android几乎支持Ant的功能超集,即使它(和Android Studio)此时仍然是预先发布的。
如果没有Gradle for Android,您可以将常用代码放入Android库项目中,并从两个应用程序中使用该库项目。
然而,再次,首先关注符合许可条款的解决方案,然后确定实施解决方案的方法。