Androidでantでビルドするときにファイル名を設定する。

タイトル通り、基本的にandroid update-projectで自動生成されたbuild.xmlを使用してビルドするとプロジェクト名-release.apkファイルというファイルになるのでそのファイル名を変更する方法

http://monogusadev.blogspot.jp/2013/03/androidantapk.html

基本的には上記URLでの内容と同内容なんだけれども、android update-projectで生成されたbuild.xmlの中にカスタマイズの方法があったので、それを使用した書き方。

  • set-release-modeという名前でtargetを作成するとできるという内容。

この-set-release-modeというのは${sdk.dir}/tools/ant/build.xmlで定義されているtarget。
このターゲットで最終的な成果物のファイル名が決定される。なんだけど、importするまえにこのターゲットを書くことでこのターゲット上書きできるらしい。

build.xmlの中にcustom_rule.xmlをインポートする記述があるので、この中に-set-release-modeを記述すると書き換えることができる。

${プロジェクト名}-{バージョン名}.apkとする例


custom_rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <target name="-set-release-mode" depends="-set-mode-check">
        <xpath input="${manifest.abs.file}" expression="/manifest/@android:versionName" output="app.version.name" />
        <xpath input="${manifest.abs.file}" expression="/manifest/@package" output="app.package" />
        <property name="out.packaged.file" location="${out.absolute.dir}/${ant.project.name}-${app.version.name}-unsigned.apk" />
        <property name="out.final.file" location="${out.absolute.dir}/${ant.project.name}-${app.version.name}.apk" />
    	
        <property name="build.is.mode.set" value="true" />

        <property name="build.target" value="release" />

        <property name="build.is.instrumented" value="false" />

        <xpath input="${manifest.abs.file}" expression="/manifest/application/@android:debuggable"
                output="build.is.packaging.debug" default="false"/>

        <property name="build.is.signing.debug" value="false" />

        <property name="renderscript.opt.level" value="${renderscript.release.opt.level}" />

        <if condition="${build.is.packaging.debug}">
            <then>
                <echo>*************************************************</echo>
                <echo>****  Android Manifest has debuggable=true   ****</echo>
                <echo>**** Doing DEBUG packaging with RELEASE keys ****</echo>
                <echo>*************************************************</echo>
            </then>
            <else>
                <property name="build.is.mode.release" value="true"/>
            </else>
        </if>
    </target>
</project>