| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style license that can be |
| found in the LICENSE file. |
| --> |
| <project name="chrome_sdk_overrides" > |
| <!-- |
| Redefinition of targets used by SDK tools. |
| Supported version: SDK tools revision 20. |
| |
| SDK tools do not allow easy way of extending classpaths |
| for aidl and javac. This file defines targets which can be used to |
| override targets used by tools. |
| --> |
| <target name="-pre-compile"> |
| <!-- |
| Remove all .class files from the output directory. This prevents inclusion of incorrect .class |
| files in the final apk. For example, if a .java file was deleted, the apk should not contain |
| the .class files for that .java from previous builds. |
| --> |
| <delete> |
| <fileset dir="${out.classes.absolute.dir}" includes="**/*.class"/> |
| </delete> |
| </target> |
| |
| <!-- |
| Override the -compile target. |
| This target requires 'javac.custom.classpath' to be set to reference |
| of classpath to be used for javac. Also accepts custom path for |
| sources: 'javac.custom.sourcepath'. |
| --> |
| <target |
| name="-compile" |
| depends="-build-setup, -pre-build, -code-gen, -pre-compile"> |
| <do-only-if-manifest-hasCode elseText="hasCode = false. Skipping..." > |
| <!-- If javac.srcdirs.additional isn't set, set it to an empty path. --> |
| <if> |
| <condition> |
| <not> |
| <isreference refid="javac.srcdirs.additional"/> |
| </not> |
| </condition> |
| <then> |
| <path id="javac.srcdirs.additional"/> |
| </then> |
| </if> |
| <javac |
| bootclasspathref="project.target.class.path" |
| classpathref="javac.custom.classpath" |
| debug="true" |
| destdir="${out.classes.absolute.dir}" |
| encoding="${java.encoding}" |
| extdirs="" |
| fork="${need.javac.fork}" |
| includeantruntime="false" |
| source="${java.source}" |
| target="${java.target}" |
| verbose="${verbose}"> |
| <src path="${source.absolute.dir}"/> |
| <src path="${gen.absolute.dir}"/> |
| <src> |
| <path refid="javac.srcdirs.additional"/> |
| </src> |
| <compilerarg value="-Xlint:unchecked"/> |
| <compilerarg value="-Xlint:deprecation"/> |
| <compilerarg line="${java.compilerargs}"/> |
| </javac> |
| <!-- |
| If the project is instrumented, then instrument the classes |
| TODO(shashishekhar): Add option to override emma filter. |
| --> |
| <if condition="${build.is.instrumented}"> |
| <then> |
| <echo level="info"> |
| Instrumenting classes from ${out.absolute.dir}/classes... |
| </echo> |
| <!-- build the default filter to remove R, Manifest, BuildConfig --> |
| <getemmafilter |
| appPackage="${project.app.package}" |
| filterOut="emma.default.filter" |
| libraryPackagesRefId="project.library.packages"/> |
| <!-- |
| Define where the .em file is output. |
| This may have been setup already if this is a library. |
| --> |
| <property name="emma.coverage.absolute.file" |
| location="${out.absolute.dir}/coverage.em"/> |
| <!-- It only instruments class files, not any external libs --> |
| |
| <emma enabled="true"> |
| <instr |
| instrpath="${out.absolute.dir}/classes" |
| metadatafile="${emma.coverage.absolute.file}" |
| mode="overwrite" |
| outdir="${out.absolute.dir}/classes" |
| verbosity="${verbosity}"> |
| <filter excludes="${emma.default.filter}"/> |
| <filter value="${emma.filter}"/> |
| </instr> |
| </emma> |
| </then> |
| </if> |
| <!-- |
| If the project needs a test jar then generate a jar containing |
| all compiled classes and referenced jars. |
| project.is.testapp is set by Android's ant build system based on the |
| target's manifest. It is true only for instrumentation apks. |
| --> |
| <if condition="${project.is.testapp}"> |
| <then> |
| <echo level="info">Creating test jar file: |
| ${ant.project.name}.jar</echo> |
| <property-location name="create.test.jar.file" |
| location="${CHROMIUM_SRC}/build/android/ant/create-test-jar.js"/> |
| <script language="javascript" src="${create.test.jar.file}"/> |
| </then> |
| </if> |
| |
| </do-only-if-manifest-hasCode> |
| </target> |
| |
| <!-- |
| For debug builds, the Android SDK tools create a key in ~/.android and sign the build with it. |
| This has caused all kinds of issues. Instead, the debug build should be signed with a key in |
| build/android/ant. The SDK tools do not provide any support for overriding that behavior and so |
| instead one must use the hack below. |
| --> |
| |
| <!-- Disables automatic signing. --> |
| <property name="build.is.signing.debug" value="false"/> |
| |
| <!-- TODO(cjhopman): Remove this property when all gyp files define the CHROMIUM_SRC property. --> |
| <!-- __LB_SHELL__ |
| The path needs to be adjusted since LbShell is using a different directory |
| configuration. |
| --> |
| <property name="CHROMIUM_SRC" value="${PRODUCT_DIR}/../../../external/chromium" /> |
| <property name="LBSHELL_SRC" value="${PRODUCT_DIR}/../../../lbshell" /> |
| <!-- __LB_SHELL__ |
| Use our custom key for signing debug packages. |
| --> |
| <property name="key.store" value="${LBSHELL_SRC}/build/lbshell-debug.keystore"/> |
| <property name="key.store.password" value="lbshell"/> |
| <property name="key.alias" value="lbshelldebugkey"/> |
| <property name="key.alias.password" value="lbshell"/> |
| |
| <!-- SDK tools assume that out.packaged.file is signed and name it "...-unaligned" --> |
| <property name="out.packaged.file" |
| value="${apks.dir}/${ant.project.name}-unsigned.apk" /> |
| <property name="out.unaligned.file" |
| value="${apks.dir}/${ant.project.name}-unaligned.apk" /> |
| |
| <!-- By default, the SDK tools build only aligns the APK in the -do-debug target. --> |
| <target name="-do-debug" |
| depends="-set-debug-mode, -debug-obfuscation-check, -package, -post-package"> |
| <!-- only create apk if *not* a library project --> |
| <do-only-if-not-library elseText="Library project: do not create apk..." > |
| <sequential> |
| <!-- Signs the APK --> |
| <echo level="info">Signing final apk...</echo> |
| <signapk |
| input="${out.packaged.file}" |
| output="${out.unaligned.file}" |
| keystore="${key.store}" |
| storepass="${key.store.password}" |
| alias="${key.alias}" |
| keypass="${key.alias.password}"/> |
| |
| <!-- Zip aligns the APK --> |
| <zipalign-helper |
| in.package="${out.unaligned.file}" |
| out.package="${out.final.file}" /> |
| <echo level="info">Release Package: ${out.final.file}</echo> |
| </sequential> |
| </do-only-if-not-library> |
| <record-build-info /> |
| </target> |
| |
| <path id="native.libs.gdbserver"> |
| <fileset file="${android.gdbserver}"/> |
| </path> |
| |
| <target name="-post-compile"> |
| <!-- |
| Copy gdbserver to main libs directory if building a non-instrumentation debug apk. |
| --> |
| <if> |
| <condition> |
| <and> |
| <equals arg1="${build.target}" arg2="debug"/> |
| <isfalse value="${project.is.testapp}"/> |
| </and> |
| </condition> |
| <then> |
| <echo message="Copying gdbserver to the apk to enable native debugging"/> |
| <copy todir="${out.dir}/libs/${target.abi}"> |
| <path refid="native.libs.gdbserver"/> |
| </copy> |
| </then> |
| </if> |
| |
| <!-- Package all the compiled .class files into a .jar. --> |
| <jar |
| jarfile="${lib.java.dir}/${JAR_NAME}" |
| basedir="${out.classes.absolute.dir}" |
| /> |
| </target> |
| |
| <!-- |
| Override obfuscate target to pass javac.custom.classpath to Proguard. SDK tools do not provide |
| any way to pass custom class paths to Proguard. |
| --> |
| <target name="-obfuscate"> |
| <if condition="${proguard.enabled}"> |
| <then> |
| <property name="obfuscate.absolute.dir" location="${out.absolute.dir}/proguard"/> |
| <property name="preobfuscate.jar.file" value="${obfuscate.absolute.dir}/original.jar"/> |
| <property name="obfuscated.jar.file" value="${obfuscate.absolute.dir}/obfuscated.jar"/> |
| <!-- input for dex will be proguard's output --> |
| <property name="out.dex.input.absolute.dir" value="${obfuscated.jar.file}"/> |
| |
| <!-- Add Proguard Tasks --> |
| <property name="proguard.jar" location="${android.tools.dir}/proguard/lib/proguard.jar"/> |
| <taskdef name="proguard" classname="proguard.ant.ProGuardTask" classpath="${proguard.jar}"/> |
| |
| <!-- Set the android classpath Path object into a single property. It'll be |
| all the jar files separated by a platform path-separator. |
| Each path must be quoted if it contains spaces. |
| --> |
| <pathconvert property="project.target.classpath.value" refid="project.target.class.path"> |
| <firstmatchmapper> |
| <regexpmapper from='^([^ ]*)( .*)$$' to='"\1\2"'/> |
| <identitymapper/> |
| </firstmatchmapper> |
| </pathconvert> |
| |
| <!-- Build a path object with all the jar files that must be obfuscated. |
| This include the project compiled source code and any 3rd party jar |
| files. --> |
| <path id="project.all.classes.path"> |
| <pathelement location="${preobfuscate.jar.file}"/> |
| <path refid="project.all.jars.path"/> |
| <!-- Pass javac.custom.classpath for apks. --> |
| <path refid="javac.custom.classpath"/> |
| </path> |
| <!-- Set the project jar files Path object into a single property. It'll be |
| all the jar files separated by a platform path-separator. |
| Each path must be quoted if it contains spaces. |
| --> |
| <pathconvert property="project.all.classes.value" refid="project.all.classes.path"> |
| <firstmatchmapper> |
| <regexpmapper from='^([^ ]*)( .*)$$' to='"\1\2"'/> |
| <identitymapper/> |
| </firstmatchmapper> |
| </pathconvert> |
| |
| <!-- Turn the path property ${proguard.config} from an A:B:C property |
| into a series of includes: -include A -include B -include C |
| suitable for processing by the ProGuard task. Note - this does |
| not include the leading '-include "' or the closing '"'; those |
| are added under the <proguard> call below. |
| --> |
| <path id="proguard.configpath"> |
| <pathelement path="${proguard.config}"/> |
| </path> |
| <pathconvert pathsep='" -include "' property="proguard.configcmd" |
| refid="proguard.configpath"/> |
| |
| <mkdir dir="${obfuscate.absolute.dir}"/> |
| <delete file="${preobfuscate.jar.file}"/> |
| <delete file="${obfuscated.jar.file}"/> |
| <jar basedir="${out.classes.absolute.dir}" |
| destfile="${preobfuscate.jar.file}"/> |
| <proguard> |
| -include "${proguard.configcmd}" |
| -include "${out.absolute.dir}/proguard.txt" |
| -injars ${project.all.classes.value} |
| -outjars "${obfuscated.jar.file}" |
| -libraryjars ${project.target.classpath.value} |
| -dump "${obfuscate.absolute.dir}/dump.txt" |
| -printseeds "${obfuscate.absolute.dir}/seeds.txt" |
| -printusage "${obfuscate.absolute.dir}/usage.txt" |
| -printmapping "${obfuscate.absolute.dir}/mapping.txt" |
| </proguard> |
| </then> |
| </if> |
| </target> |
| </project> |