使用不同的url / Environment从命令行构建android项目

时间:2013-02-07 19:05:01

标签: android maven build

我想从命令行构建android项目。通常,我为两个环境(商家和生产)构建项目,我想从命令行自动执行商家和生产URL,而不是每次都在手动指定项目。例如,Say,为生产环境构建项目,或者说,通过在命令本身中指定环境来为商家环境构建项目。可以吗?请帮忙。

2 个答案:

答案 0 :(得分:4)

您可以使用Maven,Ant和Gradle构建项目。他们都会做你想做的事 我使用Maven因此我将专注于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