ビルド時にマニフェストを更新する必要がある同様のことをしました(ただし、この理由ではありません)。これを達成する方法は、2 つ目の AndroidManifest を作成し、それを config という名前のディレクトリの下に置くことでした。したがって、config/AndroidManifest には次のようなものがあります。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="@CONFIG.APP_PACKAGE_NAME@"
android:versionCode="@CONFIG.APP_VERSION_CODE@"
android:versionName="@CONFIG.APP_VERSION@">
<!-- EVERYTHING ELSE GOES HERE -->
</manifest>
次に、通常のベアボーン build.xml ant スクリプトをいくつか変更するだけで使用できます (車輪を再発明せずに使用できるようにいくつかのフックが追加されているため、Android ビルド システムからスクリプト全体をコピーする必要はありません)。ビルド スクリプトは、デフォルトで local.properties を読み取る必要がありますが、そうでない場合は、次のような行を追加 (またはコメント解除) します。
<property file="local.properties" />
ビルド スクリプトに「-pre-build」というタスクが表示されます。次のように変更します。
<target name="-pre-build">
<copy file="config/AndroidManifest.xml" todir="." overwrite="true" encoding="utf-8">
<filterset>
<filter token="CONFIG.APP_PACKAGE_NAME" value="${app.packagename}" />
<filter token="CONFIG.APP_VERSION" value="${app.version}" />
<filter token="CONFIG.APP_VERSION_CODE" value="${app.versioncode}" />
</filterset>
</copy>
</target>
次に、local.properties ファイルにパッケージ名、バージョン名/コードを次のように入力します。
app.version=1.0
app.versioncode=1
app.packagename=com.mypackage.name
マニフェストで、すべてのアクティビティ/サービス/ブロードキャスト リスナーなどを完全に修飾する必要があるだけです。つまり、常にソース コードの完全なパッケージを指定します。独自のソース コードのパッケージを動的にしたい場合は、各クラスの各プレフィックスを置き換えることができます..プロジェクトにソースまたは jar を含めるだけで、任意のプロジェクトから使用できます。
-- 更新 -- パッケージ名を定義する必要があることをユーザーに通知するためにできるもう 1 つのことは、ビルド xml で次のように失敗タグを使用することです。
<fail message="app.packagename is missing. This must be defined in your local.properties file" unless="app.packagename" />
local.properties ファイルを読み取る行の後にこれを置きます