4

わかりました。Androidプロジェクトでantからmavenに切り替えて、次のように簡単に実装できるかどうか疑問に思っています。

現在、リリースビルドを作成するためのいくつかのターゲットを持つカスタムbuild.xmlスクリプトがあります。それらのそれぞれは、異なるサーバーURLに対して実行するアプリケーションを構築するために使用されます。サーバーは、他の国にある開発サーバー、本番サーバー、ステージングサーバー、さらにはデプロイメントサーバーにすることができます。

その理由は、私たちのアプリケーションは、誰がそれを取得するかに応じていくつかの異なるサーバーに対して実行されるため、ユーザーが選択するものにしたくないからです。代わりに、アプリケーションにハードコーディングする必要があります。これが現在の動作方法です。

これはantでセットアップするのはかなり簡単です。[env].propertiesファイルから値を取得し、res / values/config.xmlのserver_url文字列を置き換えるだけです。例えば:

ant release-prod

server_urlが何であるかを定義するprod.propertiesという名前のファイルをプルリードします。config.xmlファイルを次のようにconfig/config.xmlに保存します。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="config_server_url">@CONFIG.SERVER_URL@</string>
</resources>

次に、私のantスクリプトはこれを行います。

<copy file="config/config.xml" todir="res/values" overwrite="true" encoding="utf-8">
    <filterset>
           <filter token="CONFIG.SERVER_URL" value="${config.server_url}" />
    </filterset>
</copy>

config.server_urlがprod.propertiesで定義されている場所。

Mavenと同様のことをどのように達成できるのでしょうか。何か案は。Mavenでプロパティファイルを読み取る方法を調べたところ、それが機能するかどうかにかかわらず、結果がまちまちであるように見えました。

4

1 に答える 1

5

Mavenでは、これはリソースフィルタリングと呼ばれ、android-maven-pluginは次のリソースタイプのフィルタリングをサポートします。

サンプルres/value / config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="config_server_url">${config.server.url}</string>
</resources>

res /ディレクトリの下にあるすべてのxmlファイルをフィルタリングするためのサンプルpom構成:

<build>
  <resources>
    <resource>
      <directory>${project.basedir}/res</directory>
      <filtering>true</filtering>
      <targetPath>${project.build.directory}/filtered-res</targetPath>
      <includes>
        <include>**/*.xml</include>
      </includes>
    </resource>
  </resources>
  <plugins>
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <executions>
        <execution>
          <phase>initialize</phase>
          <goals>
            <goal>resources</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>com.jayway.maven.plugins.android.generation2</groupId>
      <artifactId>android-maven-plugin</artifactId>
      <extensions>true</extensions>
      <configuration>
        <sdk>
          <platform>10</platform>
        </sdk>
        <undeployBeforeDeploy>true</undeployBeforeDeploy>
        <resourceDirectory>${project.build.directory}/filtered-res</resourceDirectory>
      </configuration>
    </plugin>
  </plugins>
</build>

置換された値を定義する方法はいくつかありますが、properties-maven-pluginを使用して外部プロパティファイルで定義できます。簡単にするために、私はMavenプロファイルを使用し、次のようにpom.xmlで定義することを好みます。

<profiles>
  <profile>
    <id>dev</id>
    <properties>
      <config.server.url>dev.company.com</config.server.url>
    </properties>
  </profile>
  <profile>
    <id>Test</id>
    <properties>
      <config.server.url>test.company.com</config.server.url>
    </properties>
  </profile>
  <profile>
    <id>Prod</id>
    <properties>
      <config.server.url>prod.company.com</config.server.url>
    </properties>
  </profile>
</profiles>

次に、を使用mvn clean install -Pxxxして対応するapkをビルドします。

于 2012-12-13T20:54:09.567 に答える