6

いつものように、非標準のものを作成しようとすると、maven に固執します。

現在、Android アプリのメイン アプリケーション パッケージの名前を変更して、同じソースからさまざまなブランドのアプリを実行できるようにしようとしています。

Android Mavenプラグインを使用していますが、それを達成するのは非常に困難です。

  1. 私は最初の簡単な方法を試していました - renameManifestPackage構成を使用します。しかし、これは私が期待したものではないようです。結果のapkは現在インストールできないためです。

  2. 私は2番目のアプローチを試みました。ソース/リソース/テスト/AndroidManifest.xml からパッケージの名前を変更するには、初期化フェーズで ant を実行します。テストをスキップすると、これはほとんど機能します。そうでない場合、元のマニフェストを使用しているため、Robolectric は失敗します。マニフェストをコピーせずに元のファイルで置き換えを行うと、すべてが機能しますが、AndroidManifest を変更したため、作業環境 (IDE) が壊れます。

パッケージの名前を変更して作業環境を維持するための明確な手順を持っている人はいますか?

UPD:ポイント 1 で言及した問題は、間違ったパッケージ名「devapp」を使用したことです。少なくとも 1 つの「.」が含まれている必要があります。「my.package.devapp」を使用することで修正されます。そして、インストールは成功しました。しかし、次の理由により、現在新しいアプリをインストールできません。

Can't install because provider name my.package.app (in package my.package.devapp) is already used by my.package.live

次に何をすべきかわかりません。apktool をさらに深く掘り下げます。

4

2 に答える 2

1

AndroidManifest.xml が上書きされないようにする

android-maven-plugin を使用して AndroidManifest.xml ファイルを変更すると、誤って SCM にコミットされる可能性があるという問題があります。

android-maven-plugin バージョン 3.8.0 以降、新しい機能が導入され、更新された AndroidManifest.xml を別の場所に保存できるようになりました。

サンプル:

  <plugin>
    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
    <artifactId>android-maven-plugin</artifactId>
    <version>3.8.2</version>
    <extensions>true</extensions>
    <configuration>
      <renameManifestPackage>com.domain.android${environment}</renameManifestPackage>
      <updatedManifestFile>${project.build.directory}/AndroidManifest.xml</updatedManifestFile>
      <manifestApplicationLabel>Appname${environment}</manifestApplicationLabel>
      <manifest>
          <providerAuthorities>
               <property>
                   <name>com.domain.android.vc2.utility.SearchSuggestionsProvider</name>
                   <value>com.domain.android${environment}.searchsuggestionsprovider</value>
               </property>
               <property>
                   <name>com.domain.android.widget.VPWidgetDataProvider</name>
                   <value>com.domain.android${environment}.widget.provider</value>
               </property>
          </providerAuthorities>
      </manifest>
    </configuration>
    <executions>
      <execution>
        <id>update-manifest</id>
        <goals>
          <goal>manifest-update</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

その後、要素内のコンテンツはupdatedManifestFile元の AndroidManifest.xml ファイルのコピーになり、この名前で作成され、更新に使用されます。もちろんapkのパッケージングにも。

プロパティ環境を mvn コマンドに追加することで、同じデバイス上に相互にインストールされる異なるビルドを作成できます。

 mvn clean package -Denvironment=.beta

もっと読む

このリンクでは、これとプラグインのプロパティについて詳しく説明しています。

http://jayway.github.io/maven-android-plugin/manifest-update-mojo.html#updatedManifestFile

于 2014-01-22T12:55:41.317 に答える