11

カスタム ビルドを使用して Android アプリを再パッケージ化しようとしています。本番アプリと並行してインストールできる内部ベータ版を作成したいと考えています。

この答えはまさに私が必要としているもののように見えますが、うまくいかないようです。

私のbuild.xmlへの更新は次のとおりです。

<target
    name="-package-resources"
    depends="-crunch" >

    <echo>Repackaging AndroidManifest.xml to ${package.manifest.name} ${out.absolute.dir}/${resource.package.file.name}</echo>

    <exec executable="${aapt}" failonerror="true">
        <arg value="package" />
        <arg value="-f" />
        <arg value="--auto-add-overlay" />
        <arg value="-M" />
        <arg path="AndroidManifest.xml" />
        <arg value="-S" />
        <arg path="${resource.absolute.dir}" />
        <arg value="-S" />
        <arg path="${android.library.reference.1}/res" />
        <arg value="-A" />
        <arg path="${asset.absolute.dir}" />
        <arg value="-I" />
        <arg path="${project.target.android.jar}" />
        <arg value="-F" />
        <arg path="${out.absolute.dir}/${resource.package.file.name}" />
        <arg value="--rename-manifest-package" />
        <arg value="${package.manifest.name}" />
    </exec>
</target>

それを実行すると、新しいコードが正常に実行されるようです:

ant debug -Dpackage.manifest.name=com.example.test    
...    
 -package-resources:    
      [echo] Repackaging AndroidManifest.xml to com.example.test /<mypath>/bin/<appname>.ap_
...    
BUILD SUCCESSFUL

ただし、APKToolを使用して APK を検査すると、AndroidManifest のパッケージ名が新しい値に変更されていません。発生したように見えるのは、相対的なアクティビティ パス ".MyActivity" が元のパッケージ名に展開されたことだけです。

apktool d --force bin/<appname>-debug.apk

私が間違っていることを誰かが知っていますか?他のすべての Stackoverflow の回答を見てきましたが、ほとんどが少し古くなっているようです。minSdkVersion 8 用の Android SDK ツール リビジョン 21.1.0 でビルドしています。

更新: @athor が彼の回答の下にコメントしているように、AndroidManifest.xml の検査に関する私の仮定は間違っています。これをテストするには、逆コンパイルされた XML を表示するのではなく、実際にインストールしてみる必要があります。

4

2 に答える 2

1

変更を AndroidManifest.xml に反映させたい場合は、次のようなカスタム ターゲットを作成できます (私はこれと同様のターゲットを使用しています)。

<target name="repackage">
    <!-- Replaces all of the references to the old package name in files in the "src" directory -->
    <replace dir="src" value="${new.package}" token="${old.package}" summary="true"/>

    <!-- renames the src folders -->
    <move toDir="${new.package.dir}">
        <fileset dir="${old.package.dir}"/>
    </move>

    <!-- replaces the package name in the manifest -->
    <replace file="AndroidManifest.xml" value="${new.package}" token="${old.package}" summary="true"/>
</target>

デバッグ パッケージに再パッケージし、展開してから、運用パッケージに再パッケージ化する (またはその逆) ant ビルドを実行できます。

于 2014-03-16T01:14:23.470 に答える