Merge pull request #213 from alexey-pelykh/buildFix

Android SDK 17 broke old Ant script
This commit is contained in:
Pavol Zibrita 2012-04-10 04:22:34 -07:00
commit f37f40eb00
3 changed files with 353 additions and 4 deletions

View file

@ -18,3 +18,4 @@
key.alias=osmand key.alias=osmand
key.store=../../osmand_key key.store=../../osmand_key
jar.libs.dir=lib jar.libs.dir=lib
java.compilerargs=-Xlint

View file

@ -38,9 +38,6 @@
This file is an integral part of the build system for your This file is an integral part of the build system for your
application and should be checked into Version Control Systems. --> application and should be checked into Version Control Systems. -->
<loadproperties srcFile="project.properties" /> <loadproperties srcFile="project.properties" />
<!-- specify java.compilerArgs if they were not specified -->
<property name="java.compilerargs" value=""/>
<!-- quick check on sdk.dir --> <!-- quick check on sdk.dir -->
<fail <fail
@ -161,7 +158,6 @@
<src path="${source.absolute.dir}" /> <src path="${source.absolute.dir}" />
<!-- osmchange --> <!-- osmchange -->
<compilerarg value="-Xlint"/>
<src path="${use.absolute.dir}" /> <src path="${use.absolute.dir}" />
<exclude name="**/LogUtil.java" /> <exclude name="**/LogUtil.java" />
<exclude name="**/OsmStorageWriter.java" /> <exclude name="**/OsmStorageWriter.java" />

352
OsmAnd/build_sdk17.xml Executable file
View file

@ -0,0 +1,352 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="OsmAnd" default="help">
<property file="local.properties" />
<property file="ant.properties" />
<loadproperties srcFile="project.properties" />
<!-- quick check on sdk.dir -->
<fail
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
unless="sdk.dir"
/>
<property name="use.dir" value="../DataExtractionOSM/src/" />
<property name="use.absolute.dir" location="${use.dir}" />
<property name="raw.absolute.dir" location="raw" />
<property name="base.dir" location="." />
<!-- Altered generic setup -->
<!-- Workaround issue that Android SDK17 has a bug that by default and unchangable looks for jars inside libs folder -->
<target name="-setup">
<if>
<condition>
<not><isset property="setup.done" /></not>
</condition>
<then>
<echo>Creating output directories if needed...</echo>
<mkdir dir="${resource.absolute.dir}" />
<mkdir dir="${jar.libs.absolute.dir}" />
<mkdir dir="${out.absolute.dir}" />
<mkdir dir="${out.res.absolute.dir}" />
<property name="setup.done" value="true" />
<echo>Gathering info for ${ant.project.name}...</echo>
<!-- load project properties, resolve Android target, library dependencies
and set some properties with the results.
All property names are passed as parameters ending in -Out -->
<setup
projectTypeOut="android.project.type"
androidJarFileOut="android.jar"
androidAidlFileOut="android.aidl"
renderScriptExeOut="renderscript"
renderScriptIncludeDirOut="android.rs"
bootclasspathrefOut="android.target.classpath"
projectLibrariesRootOut="project.libraries"
projectLibrariesJarsOut="original.project.libraries.jars"
projectLibrariesResOut="project.libraries.res"
projectLibrariesPackageOut="project.libraries.package"
projectLibrariesLibsOut="project.libraries.libs"
targetApiOut="target.api"
verbose="${verbose}"
/>
<!-- osmchange -->
<path id="project.libraries.jars">
<path refid="original.project.libraries.jars"/>
<fileset dir="${jar.libs.absolute.dir}">
<include name="*.jar"/>
</fileset>
</path>
<!-- osmchange -->
<!-- sets a few boolean based on android.project.type
to make the if task easier -->
<condition property="project.is.library" else="false">
<equals arg1="${android.project.type}" arg2="library" />
</condition>
<condition property="project.is.test" else="false">
<equals arg1="${android.project.type}" arg2="test" />
</condition>
<!-- If a test project, resolve absolute path to tested project. -->
<if condition="${project.is.test}">
<then>
<property name="tested.project.absolute.dir" location="${tested.project.dir}" />
</then>
</if>
</then>
</if>
</target>
<!-- Puts 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" depends="-crunch">
<aapt executable="${aapt}"
command="package"
versioncode="${version.code}"
versionname="${version.name}"
debug="${build.is.packaging.debug}"
manifest="AndroidManifest.xml"
assets="${asset.absolute.dir}"
androidjar="${android.jar}"
apkfolder="${out.absolute.dir}"
nocrunch="${build.packaging.nocrunch}"
resourcefilename="${resource.package.file.name}"
resourcefilter="${aapt.resource.filter}"
projectLibrariesResName="project.libraries.res"
projectLibrariesPackageName="project.libraries.package"
previousBuildType="${build.last.target}"
buildType="${build.target}">
<res path="${out.res.absolute.dir}" />
<res path="${resource.absolute.dir}" />
</aapt>
<!-- osmchange -->
<echo>Packaging extra raw resources...</echo>
<zip destfile="${out.absolute.dir}/${resource.package.file.name}"
basedir="${raw.absolute.dir}"
update="true" />
<!-- osmchange -->
</target>
<!-- Extra target -->
<target name="-pre-build">
<delete dir="${raw.absolute.dir}" verbose="${verbose}" />
<mkdir dir="${raw.absolute.dir}/classes" />
<copy todir="${raw.absolute.dir}">
<fileset dir="${use.absolute.dir}">
<exclude name="**/*.java" />
</fileset>
</copy>
<if>
<condition>
<isset property="net.osmand" />
</condition>
<then>
<replaceregexp file="AndroidManifest.xml" match='"@drawable/icon"' replace='"@drawable/icon_free"' byline="true" />
<replaceregexp file="AndroidManifest.xml" match='package="net.osmand.plus"' replace='package="net.osmand"' byline="true" />
<replaceregexp file="AndroidManifest.xml" match='android:process="net.osmand.plus"' replace='android:process="net.osmand"' byline="true" />
<replaceregexp file="res/values/no_translate.xml" match='"app_name"&gt;(.*)&lt;' replace='"app_name"&gt;Osmand&lt;' byline="true" />
</then>
<else>
<replaceregexp file="AndroidManifest.xml" match='"@drawable/icon_free"' replace='"@drawable/icon"' byline="true" />
<replaceregexp file="AndroidManifest.xml" match='package="net.osmand"' replace='package="net.osmand.plus"' byline="true" />
<replaceregexp file="AndroidManifest.xml" match='android:process="net.osmand"' replace='android:process="net.osmand.plus"' byline="true" />
</else>
</if>
<if>
<condition>
<isset property="net.osmand.plus" />
</condition>
<then>
<replaceregexp file="res/values/no_translate.xml" match='"app_name"&gt;(.*)&lt;' replace='"app_name"&gt;Osmand+&lt;' byline="true" />
</then>
</if>
<if>
<condition>
<isset property="build.version" />
</condition>
<then>
<replaceregexp file="res/values/no_translate.xml" match='"app_version"&gt;(.*)&lt;' replace='"app_version"&gt;${build.version}&lt;' byline="true" />
</then>
</if>
<!-- Native section -->
<if>
<condition>
<isset property="nativeoff"/>
</condition>
<then>
<echo>Not using native, excluding from build</echo>
<move file="${native.libs.absolute.dir}" tofile="${native.libs.absolute.dir}.skipped"/>
</then>
<else>
<fail message="ndk.dir is missing. Make sure to generate local.properties or to inject it through an env var" unless="ndk.dir"/>
<echo>Building native code</echo>
<exec command="sh ${ndk.dir}/ndk-build -j8 V=1 OSMAND_ARM_ONLY=true" failonerror="true"/>
</else>
</if>
</target>
<!-- Compiles this project's .java files into .class files. -->
<target name="-compile" depends="-build-setup, -pre-build, -code-gen, -pre-compile">
<do-only-if-manifest-hasCode elseText="hasCode = false. Skipping...">
<!-- osmchange : Osmand plus support -->
<mkdir dir="${gen.absolute.dir}/net/osmand/plus"/>
<copy todir="${gen.absolute.dir}/net/osmand/plus">
<fileset dir="${gen.absolute.dir}/net/osmand">
<include name="R.java" />
</fileset>
</copy>
<replaceregexp file="${gen.absolute.dir}/net/osmand/plus/R.java" match='package net.osmand;' replace='package net.osmand.plus;' byline="true" />
<!-- osmchange : Osmand plus support -->
<!-- If android rules are used for a test project, its classpath should include
tested project's location -->
<condition property="extensible.classpath"
value="${tested.project.absolute.dir}/bin/classes"
else=".">
<isset property="tested.project.absolute.dir" />
</condition>
<condition property="extensible.libs.classpath"
value="${tested.project.absolute.dir}/${jar.libs.dir}"
else="${jar.libs.dir}">
<isset property="tested.project.absolute.dir" />
</condition>
<javac encoding="${java.encoding}"
source="${java.source}" target="${java.target}"
debug="true" extdirs="" includeantruntime="false"
destdir="${out.classes.absolute.dir}"
bootclasspathref="android.target.classpath"
verbose="${verbose}"
classpath="${extensible.classpath}"
classpathref="project.libraries.jars"
fork="${need.javac.fork}">
<src path="${source.absolute.dir}" />
<src path="${gen.absolute.dir}" />
<classpath>
<fileset dir="${extensible.libs.classpath}" includes="*.jar" />
</classpath>
<compilerarg line="${java.compilerargs}" />
<!-- osmchange -->
<src path="${use.absolute.dir}" />
<exclude name="**/LogUtil.java" />
<exclude name="**/OsmStorageWriter.java" />
<exclude name="**/net/osmand/data/index/" />
<exclude name="**/net/osmand/data/preparation/" />
<exclude name="**/net/osmand/osm/util/" />
<exclude name="**/net/osmand/swing/" />
<exclude name="**/rtree/" />
<!-- osmchange -->
</javac>
<!-- if the project is a library then we generate a jar file -->
<if condition="${project.is.library}">
<then>
<echo>Creating library output jar file...</echo>
<property name="out.library.jar.file" location="${out.absolute.dir}/classes.jar" />
<if>
<condition>
<length string="${android.package.excludes}" trim="true" when="greater" length="0" />
</condition>
<then>
<echo>Custom jar packaging exclusion: ${android.package.excludes}</echo>
</then>
</if>
<propertybyreplace name="manifest.package.path" input="${manifest.package}" replace="." with="/" />
<jar destfile="${out.library.jar.file}">
<fileset dir="${out.classes.absolute.dir}"
includes="**/*.class"
excludes="${manifest.package.path}/R.class ${manifest.package.path}/R$*.class ${manifest.package.path}/Manifest.class ${manifest.package.path}/Manifest$*.class ${manifest.package.path}/BuildConfig.class"/>
<fileset dir="${source.absolute.dir}" excludes="**/*.java ${android.package.excludes}" />
</jar>
</then>
</if>
<!-- if the project is instrumented, intrument the classes -->
<if condition="${build.is.instrumented}">
<then>
<echo>Instrumenting classes from ${out.absolute.dir}/classes...</echo>
<!-- It only instruments class files, not any external libs -->
<emma enabled="true">
<instr verbosity="${verbosity}"
mode="overwrite"
instrpath="${out.absolute.dir}/classes"
outdir="${out.absolute.dir}/classes">
<filter excludes="${manifest.package}.R,${manifest.package}.R$$*,${manifest.package}.BuildConfig" />
<filter value="${emma.filter}" />
</instr>
</emma>
</then>
</if>
</do-only-if-manifest-hasCode>
</target>
<!--taskdef classname="net.bluecow.googlecode.ant.GoogleCodeUploadTask"
classpath="ant-lib/ant-googlecode-0.0.2.jar" name="gcupload"/-->
<path id="lib.path">
<fileset dir="ant-lib" includes="*.jar" />
</path>
<target name="debug-nondk">
<property name="nativeoff" value="true"/>
<antcall target="debug"/>
</target>
<target name="-post-package" if="nativeoff">
<echo>Restoring ${native.libs.absolute.dir} to it's place...</echo>
<move file="${native.libs.absolute.dir}.skipped" tofile="${native.libs.absolute.dir}"/>
</target>
<!-- Import the actual build file.
To customize existing targets, there are two options:
- Customize only one target:
- copy/paste the target into this file, *before* the
<import> task.
- customize it to your needs.
- Customize the whole content of build.xml
- copy/paste the content of the rules files (minus the top node)
into this file, replacing the <import> task.
- customize to your needs.
***********************
****** IMPORTANT ******
***********************
In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
in order to avoid having your file be overridden by tools such as "android update project"
-->
<!-- version-tag: custom -->
<import file="${sdk.dir}/tools/ant/build.xml" />
<taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask" classpathref="lib.path"/>
<target name="cpd" description="Search for cut-and-pasted code">
<property name="cpd.report.xml" location="cpd.xml"/>
<cpd minimumTokenCount="100" format="xml" outputFile="${cpd.report.xml}"
ignoreLiterals="true" ignoreIdentifiers="true">
<fileset dir="${source.absolute.dir}" includes="**/*.java"/>
</cpd>
</target>
<!-- NOT used now for night builds could be deleted
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="lib.path" />
<target name="update">
<svn svnkit="true">
<info target="." />
</svn>
<echo>Current revision: ${svn.info.rev}</echo>
<svn svnkit="true">
<update dir="." revision="HEAD" />
<update dir="${use.absolute.dir}" revision="HEAD" />
<info target="." />
</svn>
<echo>Updated to revision: ${svn.info.rev}</echo>
<echo>Modyfing Version.java to include revision info: debug r${svn.info.rev}</echo>
<replaceregexp file="${use.absolute.dir}/net/osmand/Version.java" match='(APP_DESCRIPTION.*=.*\").*(\".*)' replace='\1debug r${svn.info.rev}\2' byline="true" />
</target>
<target name="nightbuild" depends="clean,update,debug">
<ftp action="del" server="download.osmand.net" userid="${ftp.user}" password="${ftp.password}">
<fileset>
<include name="night-builds/OsmAnd-debug.apk" />
</fileset>
</ftp>
<ftp server="download.osmand.net" remotedir="night-builds" userid="${ftp.user}" password="${ftp.password}" depends="yes">
<fileset dir="bin">
<include name="OsmAnd-debug.apk" />
</fileset>
</ftp>
</target> -->
</project>