Reputation: 396
I have a script to filter src, res, libs etc. (based on the device type) from Android project folder to another specific folders. For example type 1 and type 2 device will have following structure after running the script.
Device_Type_1
\src
\res
\libs
\assets
\AndroidManifest.xml
Device_Type_2
\src
\res
\libs
\assets
\AndroidManifest.xml
I have to write a script to make build using the above folder names. I tried out ant release command but it's throwing Java compilation error.
I like to know is there any command/script where I can pass path of src, res, lib, asset and manifest file as parameters and can build project.
Upvotes: 1
Views: 160
Reputation: 18107
Not sure if I understood you correctly, but here's my script I use to build different apks for tablets and phones:
<?xml version="1.0" encoding="UTF-8"?>
<property file="local.properties" />
<property environment="env" />
<property name="temp.dir" location="bin/temp" />
<property name="resource.absolute.dir" location="${temp.dir}/res" />
<property name="resource.source.dir" location="res" />
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
<isset property="env.ANDROID_HOME" />
</condition>
<loadproperties srcFile="project.properties" />
<fail message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable." unless="sdk.dir" />
<import file="${sdk.dir}/tools/ant/build.xml" />
<macrodef name="prepare-temp-dir">
<attribute name="target" default="phone" />
<sequential>
<delete dir="${temp.dir}" />
<mkdir dir="${temp.dir}" />
<mkdir dir="${resource.absolute.dir}" />
<!-- Probably should rewrite this with ant-contrib -->
<if>
<condition>
<and>
<equals arg1="@{target}" arg2="phone" />
</and>
</condition>
<then>
<copy todir="${resource.absolute.dir}">
<fileset dir="${resource.source.dir}" casesensitive="no">
<exclude name="/*sw600dp*/**" />
<exclude name="/*large*/*" />
<exclude name="/*xlarge*/*" />
</fileset>
</copy>
</then>
<else>
<if>
<condition>
<and>
<equals arg1="@{target}" arg2="tablet" />
</and>
</condition>
<then>
<copy todir="${resource.absolute.dir}">
<fileset dir="${resource.source.dir}" casesensitive="no">
<exclude name="/*small*/**" />
<exclude name="/*normal*/*" />
</fileset>
</copy>
</then>
</if>
</else>
</if>
</sequential>
</macrodef>
<macrodef name="clean-temp-dir">
<sequential>
<delete dir="${temp.dir}" />
</sequential>
</macrodef>
<target name="release-phone">
<echo message="Starting build procedure for target 'phone'" />
<prepare-temp-dir target="phone" />
<clean-temp-dir />
</target>
<target name="release-tablet">
<echo message="Starting build procedure for target 'tablet'" />
<prepare-temp-dir target="tablet" />
<clean-temp-dir />
</target>
It just extends standard android build.xml and slightly modifies it. When build starts, I create a temp dir and copy all the resources I need for the target, then build from that temp dir.
Right now it just separates drawable folders, but you can tweak it easily to accomplish your goals
Upvotes: 1