zxing Source path:  svn trunkandroidbuild.xml
<?xml version="1.0" encoding="UTF-8"?> 
<!-- 
Copyright (C) 2008 ZXing authors 
 
Licensed under the Apache License, Version 2.0 (the "License"); 
you may not use this file except in compliance with the License. 
You may obtain a copy of the License at 
 
     http://www.apache.org/licenses/LICENSE-2.0 
 
Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an "AS IS" BASIS, 
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
See the License for the specific language governing permissions and 
limitations under the License. 
--> 
<project name="BarcodeScanner" default="debug"> 
 
  <!-- Normally the Android build system looks for a local.properties. Since that's only used 
  to find the SDK location, I've removed it and pointed us at the global ZXing build.properties. --> 
  <property file="../build.properties"/> 
  <!-- Parts of the Android build system insist on the name 'sdk-location', so alias it. --> 
  <property name="sdk.dir" value="${android-home}"/> 
 
  <!-- The build.properties file can be created by you and is never touched 
  by the 'android' tool. This is the place to change some of the default property values 
  used by the Ant rules. 
  Here are some properties you may want to change/update: 
 
  application-package 
      the name of your application package as defined in the manifest. Used by the 
      'uninstall' rule. 
  source-folder 
      the name of the source folder. Default is 'src'. 
  out-folder 
      the name of the output folder. Default is 'bin'. 
 
  Properties related to the SDK location or the project target should be updated 
   using the 'android' tool with the 'update' action. 
 
  This file is an integral part of the build system for your application and 
  should be checked in in Version Control Systems. 
 
  --> 
  <property file="build.properties"/> 
 
  <!-- The default.properties file is created and updated by the 'android' tool, as well as ADT. 
  This file is an integral part of the build system for your application and 
  should be checked in in Version Control Systems. --> 
  <property file="default.properties"/> 
 
  <!-- Custom Android task to deal with the project target, and import the proper rules. 
  This requires ant 1.6.0 or above. --> 
  <path id="android.antlibs"> 
    <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" /> 
    <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" /> 
    <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" /> 
    <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" /> 
    <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" /> 
  </path> 
 
  <taskdef name="setup" 
           classname="com.android.ant.SetupTask" 
           classpathref="android.antlibs"/> 
 
  <!-- Execute the Android Setup task that will setup some properties specific to the target, 
       and import the rules files. 
       To customize the rules, copy/paste them below the task, and disable import by setting 
       the import attribute to false: 
          <setup import="false" /> 
 
       This will ensure that the properties are setup correctly but that your customized 
       targets are used. 
  --> 
  <setup import="false" /> 
 
  <!-- 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.dir}/tools" /> 
  <property name="platform-tools" value="${sdk.dir}/platform-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="../core" />--> 
 
  <!-- 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=""><os family="windows"/></condition> 
  <property name="adb" value="${platform-tools}/adb${exe}"/> 
 
  <!-- rules --> 
 
  <!-- Create the output directories if they don't exist yet. All builds do a clean first 
  to prevent stale resources and to make ProGuard happy. --> 
  <target name="dirs" depends="clean"> 
    <echo>Creating output directories if needed...</echo> 
    <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...</echo> 
    <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...</echo> 
    <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="false" extdirs="" 
           destdir="${out-classes}" 
           bootclasspathref="android.target.classpath" 
           includeantruntime="false"> 
      <src path="${source-folder}" /> 
      <src path="${gen-folder}" /> 
      <classpath> 
        <fileset dir="${external-libs-folder}" includes="*.jar"/> 
        <!-- yeah, want to not use this mechanism above --> 
        <pathelement path="../core/core.jar"/> 
        <pathelement path="${main-out-classes}"/> 
      </classpath> 
    </javac> 
 
    <unzip src="../core/core.jar" dest="${out-classes}" overwrite="true"/> 
 
    <antcall target="optimize"/> 
  </target> 
 
  <target name="optimize" unless="no-optimize"> 
    <mkdir dir="optimized"/> 
    <property name="libraryjars.path" refid="android.target.classpath"/> 
    <java jar="${proguard-jar}" fork="true" failonerror="true"> 
      <jvmarg value="-Dmaximum.inlined.code.length=48"/> 
      <arg value="-injars ${out-classes}"/> 
      <arg value="-outjars optimized"/> 
      <arg value="-libraryjars ${libraryjars.path}"/> 
      <arg value="-keep class com.google.zxing.client.android.*Activity"/> 
      <arg value="-keep class com.google.zxing.client.android.ViewfinderView { public * ; }"/> 
      <arg value="-keep class com.google.zxing.client.android.book.SearchBookContents* { public * ; }"/> 
      <arg value="-target 5"/> 
      <arg value="-optimizationpasses 5"/> 
      <arg value="-optimizations !field/*,!class/merging/*"/> <!-- works around dex VerifyError --> 
      <arg value="-dontshrink"/> 
      <arg value="-dontobfuscate"/> 
      <arg value="-dontskipnonpubliclibraryclasses"/> 
      <arg value="-verbose"/> 
      <arg value="-dump proguard-dump.txt"/> 
    </java> 
    <delete dir="${out-classes}"/> 
    <move file="optimized" tofile="${out-classes}"/> 
  </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}...</echo> 
    <apply executable="${dx}" failonerror="true" parallel="true"> 
      <arg value="-JXmx256M"/> 
      <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</echo> 
    <aaptexec executable="${aapt}" 
              command="package" 
              manifest="AndroidManifest.xml" 
              assets="${asset-folder}" 
              androidjar="${android.jar}" 
              apkfolder="${out-folder}" 
              resourcefilename="${ant.project.name}"> 
      <res path="${resource-folder}"/> 
    </aaptexec> 
  </target> 
 
  <!-- 
  Getting an error like this? 
 
   [apply] UNEXPECTED TOP-LEVEL EXCEPTION: 
   [apply] com.android.dx.cf.code.SimException: local variable type 
   mismatch: attempt to set or access a value of type int using a local 
   variable of type com.google.zxing.qrcode.decoder.Version. This is 
   symptomatic of .class transformation tools that ignore local variable 
   information. 
 
  Build core/ with the 'build-no-debug' target. It's a long story. 
  --> 
 
  <!-- 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}" 
        resourcefile="BarcodeScanner" 
        apkfilepath="${out-folder}/BarcodeScanner-debug.apk" 
        debugpackaging="true" 
        debugsigning="true" 
        verbose="false"> 
      <dex path="${intermediate-dex-location}" /> 
      <sourcefolder path="${source-folder}" /> 
      <jarfolder path="${external-libs-folder}" /> 
    </apkbuilder> 
    <copy file="${out-folder}/BarcodeScanner-debug.apk" tofile="${out-folder}/temp.apk" overwrite="true"/> 
    <exec executable="${android-tools}/zipalign"> 
      <arg value="-f"/> 
      <arg value="-v"/> 
      <arg value="4"/> 
      <arg value="${out-folder}/temp.apk"/> 
      <arg value="${out-folder}/BarcodeScanner-debug.apk"/> 
    </exec> 
  </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}" 
        resourcefile="BarcodeScanner" 
        apkfilepath="${out-folder}/BarcodeScanner-unsigned.apk" 
        debugpackaging="false" 
        debugsigning="false" 
        verbose="false"> 
      <dex path="${intermediate-dex-location}" /> 
      <sourcefolder path="${source-folder}" /> 
      <jarfolder path="${external-libs-folder}" /> 
    </apkbuilder> 
    <echo>All generated packages need to be signed with jarsigner before they are published.</echo> 
    <echo>Also run zipalign -f -v 4 BarcodeScanner.apk BarcodeScanner-aligned.apk after signing</echo> 
  </target> 
 
  <!-- Install (or reinstall) the package on the default emulator --> 
  <target name="install" depends="debug"> 
    <echo>Installing ${out-debug-package} onto default emulator...</echo> 
    <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...</echo> 
    <exec executable="${adb}" failonerror="true"> 
      <arg value="uninstall" /> 
      <arg value="${application-package}" /> 
    </exec> 
  </target> 
 
  <target name="help"> 
    <echo>Android Ant Build. Available targets:</echo> 
    <echo>   help:      Displays this help.</echo> 
    <echo>   debug:     Builds the application and sign it with a debug key.</echo> 
    <echo>   release:   Builds the application. The generated apk file must be</echo> 
    <echo>              signed before it is published.</echo> 
    <echo>   install:   Installs the debug package onto a running emulator or</echo> 
    <echo>              device. This can only be used if the application has </echo> 
    <echo>              not yet been installed.</echo> 
    <echo>   reinstall: Installs the debug package on a running emulator or</echo> 
    <echo>              device that already has the application.</echo> 
    <echo>              The signatures must match.</echo> 
    <echo>   uninstall: uninstall the application from a running emulator or</echo> 
    <echo>              device.</echo> 
  </target> 
 
  <target name="clean"> 
    <delete dir="${out-folder}"/> 
    <delete dir="${gen-folder}"/> 
  </target> 
</project> 

<?xml version="1.0" encoding="UTF-8"?> 
<!-- 
 Copyright (C) 2008 Google Inc. 
 
 Licensed under the Apache License, Version 2.0 (the "License"); 
 you may not use this file except in compliance with the License. 
 You may obtain a copy of the License at 
 
      http://www.apache.org/licenses/LICENSE-2.0 
 
 Unless required by applicable law or agreed to in writing, software 
 distributed under the License is distributed on an "AS IS" BASIS, 
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 See the License for the specific language governing permissions and 
 limitations under the License. 
 --> 
 
<!-- This is a mildly hacked version of the auto-generated project 
     build.xml file. --> 
<project name="BarcodeReader" default="package"> 
  <property file="../build.properties"/> 
  <property name="sdk-folder" value="${android-home}"/> 
  <property name="android-tools" value="${sdk-folder}/tools"/> 
  <property name="android-framework" value="${android-tools}/lib/framework.aidl"/> 
 
  <!-- The intermediates directory --> 
  <!-- Eclipse uses "bin" for its own output, so we do the same. --> 
  <property name="outdir" value="bin"/> 
 
  <!-- No user servicable parts below. --> 
 
  <!-- Input directories --> 
  <property name="resource-dir" value="res"/> 
  <property name="asset-dir" value="assets"/> 
  <property name="srcdir" value="src"/> 
 
  <!-- Output directories --> 
  <property name="outdir-classes" value="${outdir}/classes"/> 
 
  <!-- Create R.java in the source directory --> 
  <property name="outdir-r" value="src"/> 
 
  <!-- Intermediate files --> 
  <property name="dex-file" value="classes.dex"/> 
  <property name="intermediate-dex" value="${outdir}/${dex-file}"/> 
 
  <!-- The final package file to generate --> 
  <property name="out-package" value="${outdir}/${ant.project.name}.apk"/> 
 
  <!-- Tools --> 
  <property name="aapt" value="${android-tools}/aapt"/> 
  <property name="aidl" value="${android-tools}/aidl"/> 
  <property name="dx" value="${android-tools}/dx"/> 
  <property name="adb" value="${android-tools}/adb" /> 
  <property name="android-jar" value="${sdk-folder}/android.jar" /> 
  <property name="zip" value="zip"/> 
 
  <!-- Rules --> 
 
  <target name="init"> 
    <tstamp/> 
    <fail message="Please set 'android-home' in build.properties"> 
      <condition> 
        <not> 
          <available file="${android-home}" type="dir"/> 
        </not> 
      </condition> 
    </fail> 
    <fail message="Please build 'core' first"> 
      <condition> 
        <not> 
          <available file="../core/core.jar" type="file"/> 
        </not> 
      </condition> 
    </fail> 
    <fail message="Please put proguard.jar in 'bin' under the WTK install directory"> 
      <condition> 
        <and> 
          <not> 
            <isset property="debug"/> 
          </not> 
          <not> 
            <available file="${WTK-home}/bin/proguard.jar" type="file"/> 
          </not> 
        </and> 
      </condition> 
    </fail> 
  </target> 
 
  <!-- Create the output directories if they don't exist yet. --> 
  <target name="dirs"> 
    <mkdir dir="${outdir}"/> 
    <mkdir dir="${outdir-classes}"/> 
  </target> 
 
  <!-- Generate the R.java file for this project's resources. --> 
  <target name="resource-src" depends="dirs"> 
 
    <copy file="strings.xml.template" tofile="res/values/strings.xml" overwrite="true"> 
      <filterset> 
        <filter token="VERSION" value="${version}"/> 
      </filterset> 
    </copy> 
 
    <echo>Generating R.java...</echo> 
    <exec executable="${aapt}" failonerror="true"> 
      <arg value="compile"/> 
      <arg value="-m"/> 
      <arg value="-J"/> 
      <arg value="${outdir-r}"/> 
      <arg value="-M"/> 
      <arg value="AndroidManifest.xml"/> 
      <arg value="-S"/> 
      <arg value="${resource-dir}"/> 
      <arg value="-I"/> 
      <arg value="${android-jar}"/> 
    </exec> 
  </target> 
 
  <!-- Generate java classes from .aidl files. --> 
  <target name="aidl" depends="dirs"> 
    <apply executable="${aidl}" failonerror="true"> 
      <arg value="-p${android-framework}"/> 
      <arg value="-I${srcdir}"/> 
      <fileset dir="${srcdir}"> 
        <include name="**/*.aidl"/> 
      </fileset> 
    </apply> 
  </target> 
 
  <!-- Compile this project's .java files into .class files. --> 
  <target name="compile" depends="init, clean, dirs, resource-src, aidl"> 
    <javac encoding="ascii" target="1.5" debug="true" optimize="true" extdirs="" 
           srcdir="." 
           destdir="${outdir-classes}" 
           bootclasspath="${android-jar}"> 
      <classpath> 
        <pathelement location="../core/core.jar"/> 
      </classpath> 
    </javac> 
    <unzip src="../core/core.jar" dest="${outdir-classes}"/> 
  </target> 
 
  <target name="optimize" depends="compile" unless="debug"> 
    <jar basedir="${outdir-classes}" destfile="temp.jar"/> 
    <java jar="${WTK-home}/bin/proguard.jar" fork="true" failonerror="true"> 
     <jvmarg value="-Dmaximum.inlined.code.length=32"/> 
     <arg value="-injars temp.jar"/> 
     <arg value="-outjars optimized.jar"/> 
     <arg value="-libraryjars ${android-jar}"/> 
     <arg value="-dontpreverify"/> 
     <arg value="-dontobfuscate"/> 
     <arg value="-keep public class com.google.zxing.client.android.BarcodeReaderCaptureActivity"/> 
     <arg value="-optimizationpasses 7"/> 
     <arg value="-overloadaggressively"/> 
     <arg value="-verbose"/> 
   </java> 
   <delete file="temp.jar"/> 
   <delete dir="${outdir-classes}"/> 
   <mkdir dir="${outdir-classes}"/> 
   <unzip src="optimized.jar" dest="${outdir-classes}"/> 
   <delete file="optimized.jar"/> 
  </target> 
 
  <!-- Convert this project's .class files into .dex files. --> 
  <target name="dex" depends="compile, optimize"> 
 
    <condition property="locals" value="full"> 
      <isset property="debug"/> 
    </condition> 
    <condition property="locals" value="none"> 
      <not> 
        <isset property="debug"/> 
      </not> 
    </condition> 
    <condition property="positions" value="lines"> 
      <isset property="debug"/> 
    </condition> 
    <condition property="positions" value="none"> 
      <not> 
        <isset property="debug"/> 
      </not> 
    </condition> 
 
    <exec executable="${dx}" failonerror="true"> 
      <arg value="-JXmx384M"/> 
      <arg value="--dex"/> 
      <arg value="--output=${intermediate-dex}"/> 
      <arg value="--locals=${locals}"/> 
      <arg value="--positions=${positions}"/> 
      <arg path="${basedir}/${outdir-classes}"/> 
    </exec> 
  </target> 
 
  <!-- Put the project's resources into the output package file. --> 
  <target name="package-res-and-assets"> 
    <echo>Packaging resources and assets...</echo> 
    <exec executable="${aapt}" failonerror="true"> 
      <arg value="package"/> 
      <arg value="-f"/> 
      <arg value="-c"/> 
      <arg value="-M"/> 
      <arg value="AndroidManifest.xml"/> 
      <arg value="-S"/> 
      <arg value="${resource-dir}"/> 
      <arg value="-A"/> 
      <arg value="${asset-dir}"/> 
      <arg value="-I"/> 
      <arg value="${android-jar}"/> 
      <arg value="${out-package}"/> 
    </exec> 
  </target> 
 
  <!-- Same as package-res-and-assets, but without "-A ${asset-dir}" --> 
  <target name="package-res-no-assets"> 
    <echo>Packaging resources...</echo> 
    <exec executable="${aapt}" failonerror="true"> 
      <arg value="package"/> 
      <arg value="-f"/> 
      <arg value="-c"/> 
      <arg value="-M"/> 
      <arg value="AndroidManifest.xml"/> 
      <arg value="-S"/> 
      <arg value="${resource-dir}"/> 
      <!-- No assets directory --> 
      <arg value="-I"/> 
      <arg value="${android-jar}"/> 
      <arg value="${out-package}"/> 
    </exec> 
  </target> 
 
  <!-- Invoke the proper target depending on whether or not 
an assets directory is present. --> 
  <!-- TODO: find a nicer way to include the "-A ${asset-dir}" argument 
only when the assets dir exists. --> 
  <target name="package-res"> 
    <available file="${asset-dir}" type="dir" 
               property="res-target" value="and-assets"/> 
    <property name="res-target" value="no-assets"/> 
    <antcall target="package-res-${res-target}"/> 
  </target> 
 
  <!-- Put the project's .class files into the output package file. --> 
  <target name="package-java" depends="compile, package-res"> 
    <echo>Packaging java...</echo> 
    <jar destfile="${out-package}" 
         basedir="${outdir-classes}" 
         update="true"/> 
  </target> 
 
  <!-- Put the project's .dex files into the output package file. 
       Use the "zip" command, available on most un*x/Linux/MacOS systems, 
       to create the new package (Ant 1.7 has an internal 'zip' command, 
       however Ant 1.6.5 lacks it and is still widely installed.) 
  --> 
  <target name="package-dex" depends="dex, package-res"> 
    <echo>Packaging dex...</echo> 
    <exec executable="${zip}" failonerror="true"> 
      <arg value="-qj"/> 
      <arg value="${out-package}"/> 
      <arg value="${intermediate-dex}"/> 
    </exec> 
  </target> 
 
  <!-- Create the package file for this project from the sources. --> 
  <target name="package" depends="package-dex"/> 
 
  <!-- Install package on the default emulator --> 
  <target name="install"> 
    <echo>Sending package to default emulator...</echo> 
    <exec executable="${adb}" failonerror="true"> 
      <arg value="install" /> 
      <arg value="${out-package}" /> 
    </exec> 
  </target> 
 
  <target name="clean"> 
    <delete dir="${outdir}"/> 
  </target> 
 
</project>