我想从命令行构建android项目。通常,我为两个环境(商家和生产)构建项目,我想从命令行自动执行商家和生产URL,而不是每次都在手动指定项目。例如,Say,为生产环境构建项目,或者说,通过在命令本身中指定环境来为商家环境构建项目。可以吗?请帮忙。
答案 0 :(得分:4)
您可以使用Maven,Ant和Gradle构建项目。他们都会做你想做的事 我使用Maven因此我将专注于Maven配置。如果你不知道Maven如何工作,这可能是一项复杂的任务。
这里描述的第一个先决条件:
https://code.google.com/p/maven-android-plugin/wiki/GettingStarted
配置你的项目用android maven插件构建:
https://code.google.com/p/maven-android-plugin/
Eclipse的示例配置:
https://code.google.com/p/maven-android-plugin/wiki/QuickStartForEclipseProject
您还可以使用以下命令生成示例项目:
mvn archetype:generate \
-DarchetypeArtifactId=android-quickstart \
-DarchetypeGroupId=de.akquinet.android.archetypes \
-DarchetypeVersion=1.0.8 \
-DgroupId=com.myproject \
-DartifactId=my-android-application
第二步是为生产创建构建配置文件。
重要提示:以下配置文件片段基础上使用上面命令mvn archetype:generate
命令生成的pom.xml。
下面列出的配置文件替换了位于res / values / strings.xml
中的文件中的字符串形式:
<string name="hello">Whatever text</string>
为:
<string name="hello">productionURL</string>
配置文件(将其包含在</project>
上方的pom.xml中):
<profiles>
<profile>
<id>production</id>
<build>
<plugins>
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.2</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<file>${project.basedir}/res/values/strings.xml</file>
<regex>true</regex>
<replacements>
<replacement>
<token><![CDATA[(<string name="hello">)(.+)(</string>)]]></token>
<value><![CDATA[$1productionURL$3]]></value>
</replacement>
</replacements>
</configuration>
</plugin>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<sign>
<debug>true</debug>
</sign>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
它使用https://code.google.com/p/maven-replacer-plugin/替换字符串。
对于商家,只需复制粘贴上面列出的<profile>
,将<id>production</id>
更改为<id>merchant</id>
,然后更改为<value>
更新网址。
mvn install -Pproduction
或
mvn install -Pmerchant
答案 1 :(得分:1)
使用Ant,您可以通过复制模板资源文件或模板java文件来自定义项目,该文件将在运行标准android Ant文件的发布目标之前生成。
生成的文件应该被版本控制忽略。
以下是在使用ant release构建应用程序之前应该调用的ANT目标示例。它生成一个java文件和一个资源文件:
<target name="updateMyConfiguration"">
<copy file="./MyTemplateConfiguration.java"
tofile="./src/com/mycompany/android/myapp/MyCodeConfiguration.java"
overwrite="true">
</copy>
<replace file="./src/com/mycompany/android/myapp/MyCodeConfiguration.java">
<replacefilter token="token_my_boolean"
value="${code.configuration.my_boolean}" />
<replacefilter token="token_my_integer"
value="${code.configuration.my_integer}" />
<replacefilter token="token_my_string"
value="${code.configuration.my_string}" />
</replace>
<copy file="./MyTemplateRes.xml"
tofile="./res/values/MyResConfiguration.xml"
overwrite="true">
</copy>
<replace file="./res/values/MyResConfiguration.xml">
<replacefilter token="token_my_string"
value="${res.configuration.my_string}" />
<replacefilter token="token_my_integer"
value="${res_configuration.my_integer}" />
</replace>
</target>
package com.mycompany.android.myapp;
public final class MyCodeConfiguration
{
static final boolean my_boolean = token_my_boolean;
static final String my_string = "token_my_string";
static final int my_integer = token_my_integer;
}
<?xml version="1.0" encoding="utf-8"?>
<resources>
<add-resource type="string" name="my_string"/>
<string name="my_string">token_my_string</string>
<add-resource type="integer" name="my_integer"/>
<integer name="my_integer">token_my_integer</integer>
</resources>
然后你只需要以这种方式运行Ant:
ant updateMyConfiguration -Dres.configuration.string=MyCustomBuildString -Dcode.configuration.my_integer=1234