我有一个Android项目,我需要构建许多.apk来自。 .apk只有几个方面彼此不同:
自动构建所有这些不同的.apk的最佳方法是什么?
谢谢!
答案 0 :(得分:4)
使用Android Maven plugin。它支持android library projects。
以下是一个示例:https://github.com/jayway/maven-android-plugin-samples/tree/master/libraryprojects
(您需要创建几个'libraryprojects-mainapp'模块)
答案 1 :(得分:0)
如果您使用git,您可以在构建之前制作不同的分支并结帐。如果您使用的是Mac或Linux,也可以编写一个shell脚本来自动执行此操作。
开发可以在集成分支上完成,该分支将合并到您的三个不同分支中。
我不知道这是否会让你更容易,但这只是一种方式。
答案 2 :(得分:0)
2011很久以前..但似乎没有Eclipse / Netbeans解决方案。我最近在Netbeans的一个cordova项目上遇到了同样的问题。
在最前沿的Android Studio上,有一个名为“flavours”的便捷解决方案。
它基于镜像目录层次结构。一个“主”目录层次结构,包含“main”构建的所有文件和“flavors”目录层次结构,每个flavor目录包含将在构建时覆盖或补充那些“主要”文件的文件。
对于我的使用(我无法迁移到Android Studio),我编写了一个简单的ant脚本来模仿该功能。它适用于Netbeans和Eclipse,我认为它是某种与项目无关的。
要使用它,完整的项目文件夹必须退回一级层次结构,原始的文件夹需要放在“主”目录上。必须创建一个构建目录,并将多个“flavors”文件夹放在“flavors”中,如下所示:
├── build.xml < - ant script file
├── main < - original project
├── flavors
│ ├── freeVersion < - files related with a freeVersion app
│ └── paidVersion < - files related with a paidVersion app
└── build < - temporary build folder
运行脚本($ ant change-flavor),它会询问你想要构建的女巫味道目录。用户输入后,它会检查flavor目录是否存在,并将所有主目录复制到build文件夹中,加上最终的“flavors”文件,覆盖“main”文件。
生成的构建文件夹是一个全新的原生Android / Cordova /无论什么项目,都可以通过IDE进行编译。
<?xml version="1.0" encoding="UTF-8"?>
<project name="Flavors" basedir="." >
<property name="flavors.dir" value="flavors"/>
<property name="flavors.build.dir" value="build"/>
<property name="flavors.main.dir" value="main"/>
<target name="change-flavor">
<input message="Witch Flavor?" addproperty="flavor.dir" />
<fail message="Empty flavor not allowed">
<condition>
<equals arg1="${flavor.dir}" arg2=""/>
</condition>
</fail>
<fail message="Directory ${flavors.dir}/${flavor.dir} not exists">
<condition>
<not>
<available file="${flavors.dir}/${flavor.dir}" type="dir" />
</not>
</condition>
</fail>
<echo message="Deleting build dir ${flavors.build.dir}"/>
<delete includeemptydirs="true">
<fileset dir="${flavors.build.dir}" includes="**/*"/>
</delete>
<echo message="Copying from main ${flavors.build.dir}"/>
<copy todir="${flavors.build.dir}" includeemptydirs="true" >
<fileset dir="${flavors.main.dir}" includes="**"/>
</copy>
<echo message="Copying from flavor ${flavors.build.dir}"/>
<copy todir="${flavors.build.dir}" includeemptydirs="true" overwrite="true" >
<!-- exclude folder is here because my flavors directories are also netbeans
projects. If similar approach is used on eclipse, maybe put here .project
and .settings folders -->
<fileset dir="${flavors.dir}/${flavor.dir}" includes="**" excludes="nbproject/**"/>
</copy>
</target>
</project>
每个风味构建都有一个惩罚时间,因为没有预编译的东西,但在我的情况下,我认为它的价值,因为从味道到另一个的唯一变化是属性文件和资产。大多数开发过程都可以在“主”项目上完成,风味只是皮肤。除此之外,它避免了对cordova自己的构建系统/ netbeans集成的插入。