alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Android example source code file (android_rules.xml)

This example Android source code file (android_rules.xml) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Android by Example" TM.

Java - Android tags/keywords

additionnaly, ant, builds, compile, convert, custom, displays, generate, installs, intermediate, j, package, the, this

The android_rules.xml Android example source code

<?xml version="1.0" encoding="UTF-8"?>
<project name="android_rules" default="debug">

    <!--
        This rules file is meant to be imported by the custom Ant task:
            com.android.ant.AndroidInitTask

        The following properties are put in place by the importing task:
            android-jar, android-aidl, aapt, aidl, and dx

        Additionnaly, the task sets up the following classpath reference:
            android.target.classpath
        This is used by the compiler task as the boot classpath.
    -->

    <!-- Custom tasks -->
    <taskdef name="aaptexec"
        classname="com.android.ant.AaptExecLoopTask"
        classpathref="android.antlibs"/>

    <taskdef name="apkbuilder"
        classname="com.android.ant.ApkBuilderTask"
        classpathref="android.antlibs"/>

    <!-- Properties -->

    <property name="android-tools" value="${sdk-location}/tools" />

    <!-- Input directories -->
    <property name="source-folder" value="src" />
    <property name="gen-folder" value="gen" />
    <property name="resource-folder" value="res" />
    <property name="asset-folder" value="assets" />
    <property name="source-location" value="${basedir}/${source-folder}" />

    <!-- folder for the 3rd party java libraries -->
    <property name="external-libs-folder" value="libs" />

    <!-- folder for the native libraries -->
    <property name="native-libs-folder" value="libs" />

    <!-- Output directories -->
    <property name="gen-folder" value="gen" />
    <property name="out-folder" value="bin" />
    <property name="out-classes" value="${out-folder}/classes" />
    <property name="out-classes-location" value="${basedir}/${out-classes}"/>
    <!-- out folders for a parent project if this project is an instrumentation project -->
    <property name="main-out-folder" value="../${out-folder}" />
    <property name="main-out-classes" value="${main-out-folder}/classes"/>

    <!-- Intermediate files -->
    <property name="dex-file" value="classes.dex" />
    <property name="intermediate-dex" value="${out-folder}/${dex-file}" />
    <!-- dx does not properly support incorrect / or \ based on the platform
         and Ant cannot convert them because the parameter is not a valid path.
         Because of this we have to compute different paths depending on the platform. -->
    <condition property="intermediate-dex-location"
            value="${basedir}\${intermediate-dex}"
            else="${basedir}/${intermediate-dex}" >
        <os family="windows"/>
    </condition>

    <!-- The final package file to generate -->
    <property name="out-debug-package" value="${out-folder}/${ant.project.name}-debug.apk"/>

    <!-- Tools -->
    <condition property="exe" value=".exe" else="">
    <property name="adb" value="${android-tools}/adb${exe}"/>

    <!-- rules -->

    <!-- Create the output directories if they don't exist yet. -->
    <target name="dirs">
        <echo>Creating output directories if needed...
        <mkdir dir="${resource-folder}" />
        <mkdir dir="${external-libs-folder}" />
        <mkdir dir="${gen-folder}" />
        <mkdir dir="${out-folder}" />
        <mkdir dir="${out-classes}" />
    </target>

    <!-- Generate the R.java file for this project's resources. -->
    <target name="resource-src" depends="dirs">
        <echo>Generating R.java / Manifest.java from the resources...
        <exec executable="${aapt}" failonerror="true">
            <arg value="package" />
            <arg value="-m" />
            <arg value="-J" />
            <arg path="${gen-folder}" />
            <arg value="-M" />
            <arg path="AndroidManifest.xml" />
            <arg value="-S" />
            <arg path="${resource-folder}" />
            <arg value="-I" />
            <arg path="${android-jar}" />
        </exec>
    </target>

    <!-- Generate java classes from .aidl files. -->
    <target name="aidl" depends="dirs">
        <echo>Compiling aidl files into Java classes...
        <apply executable="${aidl}" failonerror="true">
            <arg value="-p${android-aidl}" />
            <arg value="-I${source-folder}" />
            <arg value="-o${gen-folder}" />
            <fileset dir="${source-folder}">
                <include name="**/*.aidl"/>
            </fileset>
        </apply>
    </target>

    <!-- Compile this project's .java files into .class files. -->
    <target name="compile" depends="resource-src, aidl">
        <javac encoding="ascii" target="1.5" debug="true" extdirs=""
                destdir="${out-classes}"
                bootclasspathref="android.target.classpath">
            <src path="${source-folder}" />
            <src path="${gen-folder}" />
            <classpath>
                <fileset dir="${external-libs-folder}" includes="*.jar"/>
                <pathelement path="${main-out-classes}"/>
            </classpath>
         </javac>
    </target>

    <!-- Convert this project's .class files into .dex files. -->
    <target name="dex" depends="compile">
        <echo>Converting compiled files and external libraries into ${out-folder}/${dex-file}...
        <apply executable="${dx}" failonerror="true" parallel="true">
            <arg value="--dex" />
            <arg value="--output=${intermediate-dex-location}" />
            <arg path="${out-classes-location}" />
            <fileset dir="${external-libs-folder}" includes="*.jar"/>
        </apply>
    </target>

    <!-- Put the project's resources into the output package file
         This actually can create multiple resource package in case
         Some custom apk with specific configuration have been
         declared in default.properties.
         -->
    <target name="package-resources">
        <echo>Packaging resources
        <aaptexec executable="${aapt}"
                command="package"
                manifest="AndroidManifest.xml"
                resources="${resource-folder}"
                assets="${asset-folder}"
                androidjar="${android-jar}"
                outfolder="${out-folder}"
                basename="${ant.project.name}" />
    </target>

    <!-- Package the application and sign it with a debug key.
         This is the default target when building. It is used for debug. -->
    <target name="debug" depends="dex, package-resources">
        <apkbuilder
                outfolder="${out-folder}"
                basename="${ant.project.name}"
                signed="true"
                verbose="false">
            <file path="${intermediate-dex}" />
            <sourcefolder path="${source-folder}" />
            <jarfolder path="${external-libs-folder}" />
            <nativefolder path="${native-libs-folder}" />
        </apkbuilder>
    </target>

    <!-- Package the application without signing it.
         This allows for the application to be signed later with an official publishing key. -->
    <target name="release" depends="dex, package-resources">
        <apkbuilder
                outfolder="${out-folder}"
                basename="${ant.project.name}"
                signed="false"
                verbose="false">
            <file path="${intermediate-dex}" />
            <sourcefolder path="${source-folder}" />
            <jarfolder path="${external-libs-folder}" />
            <nativefolder path="${native-libs-folder}" />
        </apkbuilder>
        <echo>All generated packages need to be signed with jarsigner before they are published.
    </target>

    <!-- Install the package on the default emulator -->
    <target name="install" depends="debug">
        <echo>Installing ${out-debug-package} onto default emulator...
        <exec executable="${adb}" failonerror="true">
            <arg value="install" />
            <arg path="${out-debug-package}" />
        </exec>
    </target>

    <target name="reinstall" depends="debug">
        <echo>Installing ${out-debug-package} onto default emulator...
        <exec executable="${adb}" failonerror="true">
            <arg value="install" />
            <arg value="-r" />
            <arg path="${out-debug-package}" />
        </exec>
    </target>

    <!-- Uinstall the package from the default emulator -->
    <target name="uninstall">
        <echo>Uninstalling ${application-package} from the default emulator...
        <exec executable="${adb}" failonerror="true">
            <arg value="uninstall" />
            <arg path="${application-package}" />
        </exec>
    </target>
    
    <target name="help">
        <!-- displays starts at col 13
              |13                                                              80| -->
        <echo>Android Ant Build. Available targets:
        <echo>   help:      Displays this help.
        <echo>   debug:     Builds the application and sign it with a debug key.
        <echo>   release:   Builds the application. The generated apk file must be
        <echo>              signed before it is published.
        <echo>   install:   Installs the debug package onto a running emulator or
        <echo>              device. This can only be used if the application has 
        <echo>              not yet been installed.
        <echo>   reinstall: Installs the debug package on a running emulator or
        <echo>              device that already has the application.
        <echo>              The signatures must match.
        <echo>   uninstall: uninstall the application from a running emulator or
        <echo>              device.
    </target>
</project>

Other Android examples (source code examples)

Here is a short list of links related to this Android android_rules.xml source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.