[Android] Build gtest APKs like other APKs

After much work, we can build gtest APKs without first transforming .java files, resource files, or the AndroidManifest.xml. We can directly use java_apk.gypi and build like all other APKs.

Do that.

Also, native_test_apk.xml was the last user of common.xml and sdk-targets.xml, and so those can now be removed.

Review URL: https://chromiumcodereview.appspot.com/13828003

git-svn-id: http://src.chromium.org/svn/trunk/src/build@193576 4ff67af0-8c30-449e-8e8b-ad334ec8d88c
This commit is contained in:
cjhopman@chromium.org 2013-04-11 04:47:10 +00:00
Родитель ef636e4d0c
Коммит 6260898c10
3 изменённых файлов: 2 добавлений и 415 удалений

Просмотреть файл

@ -1,92 +0,0 @@
<?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_common_defines">
<!-- Common build properties for Chrome for android. -->
<!--
Macro for checking that a property is correctly set. Performs checks for:
1. Property is set and not null.
2. String value of property does not contains any '$' signs.
-->
<macrodef name="check-property-value">
<attribute name="property"/>
<sequential>
<fail message ="Property @{property} is not set.">
<condition>
<or>
<not><isset property="@{property}"/></not>
<length string="${@{property}}" trim="true" when="less" length="1"/>
</or>
</condition>
</fail>
<!--
Check for $ signs. This catches errors when properties are initialized from environment
variables. E.g. if we have <property name="foo" value="${env.bar}" /> but env.bar is
not set then foo will have the literal value of '${env.bar}'.
-->
<fail message="Value checked failed for property: @{property} : ${@{property}}.
Property value contains an uninitialized environment variable.">
<condition>
<contains string="${@{property}}" substring="$"/>
</condition>
</fail>
</sequential>
</macrodef>
<!--
A safe setter for location properties. Checks that a location is not
empty and actually exists. For specifying output directories, location
check can be disabled by specifying check-exists="false".
-->
<macrodef name="property-location">
<attribute name="name"/>
<attribute name="location"/>
<attribute name="check-exists" default="true"/>
<sequential>
<property name="@{name}" location="@{location}"/>
<check-property-value property="@{name}"/>
<fail message="Location specified for @{name} : @{location} does not exist.">
<condition>
<and>
<equals arg1="@{check-exists}" arg2="true"/>
<not><available file="@{location}"/></not>
</and>
</condition>
</fail>
</sequential>
</macrodef>
<!-- A safe setter for property values -->
<macrodef name="property-value">
<attribute name="name"/>
<attribute name="value"/>
<sequential>
<property name="@{name}" value="@{value}"/>
<check-property-value property="@{name}"/>
</sequential>
</macrodef>
<!-- Common environment properties. -->
<property-location name="sdk.dir" location="${ANDROID_SDK_ROOT}"/>
<property-value name="target" value="android-${ANDROID_SDK_VERSION}"/>
<property name="source.dir" location="src"/>
<property-location name="android.gdbserver" location="${ANDROID_GDBSERVER}"/>
<!--
Common directories used by SDK Build, when making changes here
make sure to update gyp files and test scripts constants in
build/android/pylib/constants.py
-->
<!-- Common directory for chromium_*.jars. -->
<property-location name="lib.java.dir" location="${PRODUCT_DIR}/lib.java"/>
<!-- Common directory for test jars. -->
<property-location name="test.lib.java.dir"
location="${PRODUCT_DIR}/test.lib.java"/>
<!-- Common directory for apks. -->
<property-location name="apks.dir" location="${PRODUCT_DIR}/apks"/>
<!-- Don't worry about computing deps in ant. They're managed in gyp. -->
<property name="dont.do.deps" value="true"/>
</project>

Просмотреть файл

@ -1,278 +0,0 @@
<?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 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>
<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. -->
<property name="CHROMIUM_SRC" value="${PRODUCT_DIR}/../.." />
<property name="key.store" value="${CHROMIUM_SRC}/build/android/ant/chromium-debug.keystore"/>
<property name="key.store.password" value="chromium"/>
<property name="key.alias" value="chromiumdebugkey"/>
<property name="key.alias.password" value="chromium"/>
<!-- 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>
<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>

Просмотреть файл

@ -23,10 +23,6 @@
'<(DEPTH)/base/base.gyp:base_java',
'<(DEPTH)/tools/android/android_tools.gyp:android_tools',
],
'variables': {
'generator_intermediate_dir': '<(PRODUCT_DIR)/<(test_suite_name)_apk/generated/',
'generate_native_test_stamp': '<(generator_intermediate_dir)/generate_native_test.stamp',
},
'conditions': [
['OS == "android" and gtest_target_type == "shared_library"', {
'variables': {
@ -34,49 +30,10 @@
'apk_name': '<(test_suite_name)',
'intermediate_dir': '<(PRODUCT_DIR)/<(test_suite_name)_apk',
'final_apk_path': '<(intermediate_dir)/<(test_suite_name)-debug.apk',
'java_in_dir': '<(DEPTH)/build/android/empty',
'android_manifest_path': '<(generator_intermediate_dir)/AndroidManifest.xml',
'java_in_dir': '<(DEPTH)/testing/android/java',
'android_manifest_path': '<(DEPTH)/testing/android/AndroidManifest.xml',
'native_lib_target': 'lib<(test_suite_name)',
'generated_src_dirs': [
'<(generator_intermediate_dir)/java',
],
'additional_input_paths': [
'<(generate_native_test_stamp)',
],
'additional_res_dirs': [
'<(generator_intermediate_dir)/res',
],
},
'actions': [
{
'action_name': 'apk_<(test_suite_name)',
'message': 'Building <(test_suite_name) test apk.',
'inputs': [
'<(DEPTH)/testing/android/AndroidManifest.xml',
'<(DEPTH)/testing/android/generate_native_test.py',
'<(input_shlib_path)',
'>@(input_jars_paths)',
'<!@(find <(DEPTH)/testing/android/java)',
],
'outputs': [
'<(generate_native_test_stamp)',
'<(android_manifest_path)',
],
'action': [
'<(DEPTH)/testing/android/generate_native_test.py',
'--native_library',
'<(input_shlib_path)',
'--output',
'<(generator_intermediate_dir)',
'--strip-binary=<(android_strip)',
'--app_abi',
'<(android_app_abi)',
'--stamp-file',
'<(generate_native_test_stamp)',
'--no-compile',
],
},
],
'includes': [ 'java_apk.gypi' ],
}], # 'OS == "android" and gtest_target_type == "shared_library"
], # conditions