mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
353 lines
16 KiB
XML
353 lines
16 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!--
|
|
** Copyright (c) 2012 Todoroo Inc
|
|
**
|
|
** See the file "LICENSE" for the full license governing this code.
|
|
-->
|
|
<project name="astrid" default="help">
|
|
|
|
<!-- The local.properties file is created and updated by the 'android' tool.
|
|
It contains the path to the SDK. It should *NOT* be checked into
|
|
Version Control Systems. -->
|
|
<loadproperties srcFile="local.properties" />
|
|
|
|
<!-- The ant.properties file can be created by you. It is only edited by the
|
|
'android' tool to add properties to it.
|
|
This is the place to change some Ant specific build properties.
|
|
Here are some properties you may want to change/update:
|
|
|
|
source.dir
|
|
The name of the source directory. Default is 'src'.
|
|
out.dir
|
|
The name of the output directory. Default is 'bin'.
|
|
|
|
For other overridable properties, look at the beginning of the rules
|
|
files in the SDK, at tools/ant/build.xml
|
|
|
|
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 into Version Control Systems.
|
|
|
|
-->
|
|
<property file="ant.properties" />
|
|
|
|
<!-- The project.properties file is created and updated by the 'android'
|
|
tool, as well as ADT.
|
|
|
|
This contains project specific properties such as project target, and library
|
|
dependencies. Lower level build properties are stored in ant.properties
|
|
(or in .classpath for Eclipse projects).
|
|
|
|
This file is an integral part of the build system for your
|
|
application and should be checked into Version Control Systems. -->
|
|
<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'"
|
|
unless="sdk.dir"
|
|
/>
|
|
|
|
<taskdef resource="net/sf/antcontrib/antlib.xml">
|
|
<classpath>
|
|
<pathelement location="antlib/ant-contrib-1.0b3.jar"/>
|
|
</classpath>
|
|
</taskdef>
|
|
|
|
<!-- extension targets. Uncomment the ones where you want to do custom work
|
|
in between standard targets -->
|
|
|
|
<target name="-set-mode-check" depends="">
|
|
<fail if="build.is.mode.set"
|
|
message="Cannot run two different modes at the same time. If you are running more than one debug/release/instrument type targets, call them from different Ant calls." />
|
|
</target>
|
|
|
|
<target name="-pre-build" depends="get-version, copy-sources, updatekeys, updatekeys-release, update-market-strategy">
|
|
<mkdir dir="gen" />
|
|
<property name="proguard.jar" location="antlib/proguard.jar" />
|
|
<taskdef name="proguard" classname="proguard.ant.ProGuardTask" classpath="${proguard.jar}" />
|
|
</target>
|
|
|
|
<target name="copy-sources">
|
|
<delete dir="${source.dir}" />
|
|
<mkdir dir="${source.dir}" />
|
|
<for list="${astrid.sources}" param="dir">
|
|
<sequential>
|
|
<copy todir="${source.dir}">
|
|
<fileset dir="@{dir}" />
|
|
</copy>
|
|
</sequential>
|
|
</for>
|
|
</target>
|
|
|
|
<target name="get-version">
|
|
<loadfile property="manifest" srcFile="AndroidManifest.xml" />
|
|
<propertyregex property="manifest.version.code"
|
|
input="${manifest}"
|
|
regexp="android:versionCode="(.*)""
|
|
select="\1" />
|
|
<propertyregex property="manifest.version.name"
|
|
input="${manifest}"
|
|
regexp="android:versionName="([^" ]*)"
|
|
select="\1" />
|
|
<echo message="Astrid: version ${manifest.version.code}, named ${manifest.version.name}" />
|
|
</target>
|
|
|
|
<target name="warnings">
|
|
<echo>====== context classes without setContext =====</echo>
|
|
<exec executable="sh">
|
|
<arg value="-c" />
|
|
<arg value="cd ${source.dir}; grep -L '\(setContext\|DependencyInjectionService\)' `grep -l -R '^\(public\).*class .* \(Activity\|Service\|BroadcastReceiver\)' .` | grep -v '.*\(CriteriaExposer\|DetailExposer\|Plugin\).java$' | grep -v rmilk" />
|
|
</exec>
|
|
<echo />
|
|
<echo>====== entry points without initializing Astrid DI =====</echo>
|
|
<exec executable="sh">
|
|
<arg value="-c" />
|
|
<arg value="cd ${source.dir}; grep -L '\(AstridDependencyInjector\)' $(grep -l '@Autowired' `grep -l -R '^\(public\).*class .* \(Activity\|Service\|BroadcastReceiver\)' .`) | grep -v rmilk" />
|
|
</exec>
|
|
</target>
|
|
|
|
<!-- update api keys -->
|
|
<target name="updatekeys" description="update api key values">
|
|
<property file="${apikey.keyfile}" />
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/actfm/sync/ActFmInvoker.java"
|
|
match="URL = .*"
|
|
replace="URL = "${apikey.actfm.url}";" />
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/actfm/sync/ActFmInvoker.java"
|
|
match="APP_ID = .*"
|
|
replace="APP_ID = "${apikey.actfm.id}";" />
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/actfm/sync/ActFmInvoker.java"
|
|
match="APP_SECRET = .*"
|
|
replace="APP_SECRET = "${apikey.actfm.secret}";" />
|
|
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/taskrabbit/TaskRabbitActivity.java"
|
|
match="TASK_RABBIT_CLIENT_ID = .*"
|
|
replace="TASK_RABBIT_CLIENT_ID = "${apikey.taskrabbit.clientid}";" />
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/taskrabbit/TaskRabbitActivity.java"
|
|
match="TASK_RABBIT_CLIENT_APPLICATION_ID = .*"
|
|
replace="TASK_RABBIT_CLIENT_APPLICATION_ID = "${apikey.taskrabbit.appid}";" />
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/taskrabbit/TaskRabbitActivity.java"
|
|
match="TASK_RABBIT_URL = .*"
|
|
replace="TASK_RABBIT_URL = "${apikey.taskrabbit.url}";" />
|
|
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/taskrabbit/TaskRabbitMapActivity.java"
|
|
match="MAPS_API_KEY = .*"
|
|
replace="MAPS_API_KEY = "${apikey.maps}";" />
|
|
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/gtasks/api/GtasksInvoker.java"
|
|
match="API_KEY = .*"
|
|
replace="API_KEY = "${apikey.gtasks}";" />
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/utility/Constants.java"
|
|
match="AWS_SECRET_KEY_ID = .*"
|
|
replace="AWS_SECRET_KEY_ID = "${apikey.amazon.secret}";" />
|
|
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/service/abtesting/ABTestInvoker.java"
|
|
match="API_KEY = .*"
|
|
replace="API_KEY = "${apikey.analytics.id}";" />
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/service/abtesting/ABTestInvoker.java"
|
|
match="API_SECRET = .*"
|
|
replace="API_SECRET = "${apikey.analytics.secret}";" />
|
|
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/billing/BillingConstants.java"
|
|
match="PUB_KEY_REPLACE_CHAR = .*"
|
|
replace="PUB_KEY_REPLACE_CHAR = '${apikey.googleplay.replacechar}';" />
|
|
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/billing/BillingConstants.java"
|
|
match="PUB_KEY_OBFUSCATED = .*"
|
|
replace="PUB_KEY_OBFUSCATED = "${apikey.googleplay.pubkey}";" />
|
|
</target>
|
|
|
|
<target name="updatekeys-pre" if="pre.astrid" description="use pre.astrid.com">
|
|
<property file="${apikey.keyfile}" />
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/actfm/sync/ActFmInvoker.java"
|
|
match="URL = .*"
|
|
replace="URL = "//pre.astrid.com/api/";" />
|
|
</target>
|
|
|
|
<!-- update api keys that require release signing -->
|
|
<target name="updatekeys-release" if="build.is.mode.release" depends="updatekeys-pre"
|
|
description="update release-only api key values">
|
|
<property file="${apikey.keyfile}" />
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/actfm/ActFmLoginActivity.java"
|
|
match="APP_ID = .*"
|
|
replace="APP_ID = "${apikey.facebook.id}";" />
|
|
</target>
|
|
|
|
<target name="-release-prompt-for-password" description="override to set signature">
|
|
<property file="${signjar.passfile}" /> <echo message="${signjar.passfile}" />
|
|
<property name="key.alias" value="${signjar.keyalias}" />
|
|
<property name="key.store" value="${signjar.keystore}" />
|
|
<property name="key.alias.password" value="${signjar.password}" />
|
|
<property name="key.store.password" value="${signjar.password}" />
|
|
<property name="key.alias" value="${signjar.keyalias}" />
|
|
<property name="has.keystore" value="true" />
|
|
</target>
|
|
|
|
<target name="update-market-strategy" if="custom.market.strategy">
|
|
<echo message="Changing market strategy to ${custom.market.strategy}" />
|
|
<replace token="market://" value="disabled://"
|
|
dir="${source.dir}" />
|
|
<replaceregexp file="${source.dir}/com/todoroo/astrid/utility/Constants.java"
|
|
match="AndroidMarketStrategy"
|
|
replace="${custom.market.strategy}" />
|
|
</target>
|
|
|
|
<target name="obfuscate" depends="-set-debug-files, -set-debug-mode, nodeps, -build-setup,
|
|
-set-release-mode, -release-obfuscation-check, -obfuscate" />
|
|
|
|
<target name="dex" depends="obfuscate, -dex" />
|
|
|
|
<!-- build custom release package with updated version name -->
|
|
<target name="release-custom" depends="clean">
|
|
<fail message="need to set custom.version.name">
|
|
<condition>
|
|
<not>
|
|
<isset property="custom.version.name" />
|
|
</not>
|
|
</condition>
|
|
</fail>
|
|
<copy file="AndroidManifest.xml" tofile="AndroidManifest_old.xml" />
|
|
<replaceregexp file="AndroidManifest.xml"
|
|
match="(android:versionName="[^" ]*)[^"]*"
|
|
replace="\1${custom.version.name}" />
|
|
<antcall target="release" />
|
|
|
|
<move file="AndroidManifest_old.xml" tofile="AndroidManifest.xml" />
|
|
</target>
|
|
|
|
<!-- build custom unsigned package with updated version name -->
|
|
<target name="unsigned-custom" depends="clean">
|
|
<fail message="need to set custom.version.name">
|
|
<condition>
|
|
<not>
|
|
<isset property="custom.version.name" />
|
|
</not>
|
|
</condition>
|
|
</fail>
|
|
<copy file="AndroidManifest.xml" tofile="AndroidManifest_old.xml" />
|
|
<replaceregexp file="AndroidManifest.xml"
|
|
match="(android:versionName="[^" ]*)[^"]*"
|
|
replace="\1${custom.version.name}" />
|
|
<antcall target="release-unsigned" />
|
|
|
|
<move file="AndroidManifest_old.xml" tofile="AndroidManifest.xml" />
|
|
</target>
|
|
|
|
<target name="crittercism-permissions"
|
|
description="Apply extra crittercism permissions">
|
|
<if>
|
|
<condition>
|
|
<resourcecontains resource="AndroidManifest.xml" substring="READ_LOGS"/>
|
|
</condition>
|
|
<then>
|
|
<echo message="Nothing to do." />
|
|
</then>
|
|
<else>
|
|
<replace file="AndroidManifest.xml" token="android.permission.VIBRATE">
|
|
<replacevalue><![CDATA[android.permission.VIBRATE"/>
|
|
<uses-permission android:name="android.permission.READ_LOGS"/>
|
|
<uses-permission android:name="android.permission.GET_TASKS]]></replacevalue>
|
|
</replace>
|
|
</else>
|
|
</if>
|
|
</target>
|
|
|
|
<target name="release-jenkins">
|
|
<property environment="env" />
|
|
<copy file="AndroidManifest.xml" tofile="AndroidManifest_old.xml" />
|
|
<propertyregex property="env.git_hash"
|
|
input="${env.GIT_COMMIT}"
|
|
regexp="(.{7})"
|
|
select="\1"
|
|
casesensitive="false" />
|
|
<replaceregexp file="AndroidManifest.xml"
|
|
match="(android:versionName="[^" ]*)[^"]*"
|
|
replace="\1-b${env.BUILD_NUMBER}-${env.git_hash}" />
|
|
<antcall target="release" />
|
|
|
|
<move file="AndroidManifest_old.xml" tofile="AndroidManifest.xml" />
|
|
</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 -->
|
|
|
|
<target name="debug" depends="-set-debug-files, -do-debug"
|
|
description="Builds the application and signs it with a debug key.">
|
|
<record-build-info />
|
|
<delete file="${out.packaged.file}" />
|
|
</target>
|
|
|
|
<target name="release"
|
|
depends="-set-release-mode, -release-obfuscation-check, -package, -release-prompt-for-password, -release-nosign"
|
|
if="has.keystore"
|
|
description="Builds the application. The generated apk file must be signed before
|
|
it is published.">
|
|
|
|
<property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-release-unaligned.apk" />
|
|
|
|
<!-- Signs the APK -->
|
|
<echo>Signing final apk...</echo>
|
|
<signjar
|
|
jar="${out.packaged.file}"
|
|
signedjar="${out.unaligned.file}"
|
|
keystore="${key.store}"
|
|
storepass="${key.store.password}"
|
|
alias="${key.alias}"
|
|
keypass="${key.alias.password}"
|
|
verbose="${verbose}" />
|
|
|
|
<!-- Zip aligns the APK -->
|
|
<mkdir dir="../release" />
|
|
<property name="out.final.file" location="${out.absolute.dir}/${ant.project.name}-release.apk" />
|
|
<property name="out.release.file"
|
|
location="../release/${ant.project.name}-${manifest.version.code}-${manifest.version.name}-release.apk" />
|
|
<zipalign-helper in.package="${out.unaligned.file}"
|
|
out.package="${out.final.file}" />
|
|
<copy file="${out.final.file}" tofile="${out.release.file}" />
|
|
<echo>Final Release Package: ${out.release.file}</echo>
|
|
<record-build-info />
|
|
</target>
|
|
|
|
<target name="release-unsigned"
|
|
depends="-set-release-mode, -release-obfuscation-check, -package, -release-prompt-for-password, -release-nosign"
|
|
if="has.keystore"
|
|
description="Builds the application. The generated apk file must be signed before
|
|
it is published.">
|
|
|
|
<property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-release-unsigned.apk" />
|
|
|
|
<!-- Zip aligns the APK -->
|
|
<mkdir dir="../release" />
|
|
<property name="out.final.file" location="${out.absolute.dir}/${ant.project.name}-aligned-unsigned.apk" />
|
|
<property name="out.release.file"
|
|
location="../release/${ant.project.name}-${manifest.version.code}-${manifest.version.name}-unsigned.apk" />
|
|
<zipalign-helper in.package="${out.unaligned.file}"
|
|
out.package="${out.final.file}" />
|
|
<copy file="${out.final.file}" tofile="${out.release.file}" />
|
|
<echo>Final Release Package: ${out.release.file}</echo>
|
|
<record-build-info />
|
|
</target>
|
|
|
|
<import file="${sdk.dir}/tools/ant/build.xml" />
|
|
|
|
</project>
|