xref: /aosp_15_r20/external/robolectric/scripts/build-android.sh (revision e6ba16074e6af37d123cb567d575f496bf0a58ee)
1*e6ba1607SAndroid Build Coastguard Worker#!/bin/bash
2*e6ba1607SAndroid Build Coastguard Worker#
3*e6ba1607SAndroid Build Coastguard Worker# This script builds the AOSP Android jars, and installs them in your local
4*e6ba1607SAndroid Build Coastguard Worker# Maven repository. See: http://source.android.com/source/building.html for
5*e6ba1607SAndroid Build Coastguard Worker# more information on building AOSP.
6*e6ba1607SAndroid Build Coastguard Worker#
7*e6ba1607SAndroid Build Coastguard Worker# Usage:
8*e6ba1607SAndroid Build Coastguard Worker#   build-android.sh <android repo path> <android version> <robolectric version>
9*e6ba1607SAndroid Build Coastguard Worker#
10*e6ba1607SAndroid Build Coastguard Worker# For a tutorial check scripts/README.md
11*e6ba1607SAndroid Build Coastguard Worker
12*e6ba1607SAndroid Build Coastguard Workerset -ex
13*e6ba1607SAndroid Build Coastguard Worker
14*e6ba1607SAndroid Build Coastguard Workerfunction usage() {
15*e6ba1607SAndroid Build Coastguard Worker    echo "Usage: ${0} <android repo path> <android-version> <robolectric-sub-version> <output directory>"
16*e6ba1607SAndroid Build Coastguard Worker}
17*e6ba1607SAndroid Build Coastguard Worker
18*e6ba1607SAndroid Build Coastguard Workerif [[ $# -ne 4 ]]; then
19*e6ba1607SAndroid Build Coastguard Worker    usage
20*e6ba1607SAndroid Build Coastguard Worker    exit 1
21*e6ba1607SAndroid Build Coastguard Workerfi
22*e6ba1607SAndroid Build Coastguard Worker
23*e6ba1607SAndroid Build Coastguard WorkerbuildRoot=$1
24*e6ba1607SAndroid Build Coastguard Worker
25*e6ba1607SAndroid Build Coastguard Workerif [[ ! -d $buildRoot ]]; then
26*e6ba1607SAndroid Build Coastguard Worker    echo $buildRoot is not a directory
27*e6ba1607SAndroid Build Coastguard Worker    usage
28*e6ba1607SAndroid Build Coastguard Worker    exit 1
29*e6ba1607SAndroid Build Coastguard Workerfi
30*e6ba1607SAndroid Build Coastguard Worker
31*e6ba1607SAndroid Build Coastguard Workerif [[ -z "${SIGNING_PASSWORD}" ]]; then
32*e6ba1607SAndroid Build Coastguard Worker    echo "Please set the GPG passphrase as SIGNING_PASSWORD"
33*e6ba1607SAndroid Build Coastguard Worker    exit 1
34*e6ba1607SAndroid Build Coastguard Workerfi
35*e6ba1607SAndroid Build Coastguard Worker
36*e6ba1607SAndroid Build Coastguard WorkerbuildRoot=$(cd $buildRoot; pwd)
37*e6ba1607SAndroid Build Coastguard Worker
38*e6ba1607SAndroid Build Coastguard WorkerANDROID_VERSION=$2
39*e6ba1607SAndroid Build Coastguard WorkerROBOLECTRIC_SUB_VERSION=$3
40*e6ba1607SAndroid Build Coastguard Worker
41*e6ba1607SAndroid Build Coastguard WorkerSCRIPT_DIR=$(cd $(dirname "$0"); pwd)
42*e6ba1607SAndroid Build Coastguard Worker
43*e6ba1607SAndroid Build Coastguard WorkerANDROID_SOURCES_BASE=${buildRoot}
44*e6ba1607SAndroid Build Coastguard WorkerFRAMEWORKS_BASE_DIR=${ANDROID_SOURCES_BASE}/frameworks/base
45*e6ba1607SAndroid Build Coastguard WorkerFRAMEWORKS_RAW_RES_DIR=${FRAMEWORKS_BASE_DIR}/core/res/
46*e6ba1607SAndroid Build Coastguard WorkerROBOLECTRIC_VERSION=${ANDROID_VERSION}-robolectric-${ROBOLECTRIC_SUB_VERSION}
47*e6ba1607SAndroid Build Coastguard Worker
48*e6ba1607SAndroid Build Coastguard Worker# Intermediate artifacts
49*e6ba1607SAndroid Build Coastguard WorkerANDROID_RES=android-res-${ANDROID_VERSION}.apk
50*e6ba1607SAndroid Build Coastguard WorkerANDROID_EXT=android-ext-${ANDROID_VERSION}.jar
51*e6ba1607SAndroid Build Coastguard WorkerANDROID_CLASSES=android-classes-${ANDROID_VERSION}.jar
52*e6ba1607SAndroid Build Coastguard Worker
53*e6ba1607SAndroid Build Coastguard Worker# API specific paths
54*e6ba1607SAndroid Build Coastguard WorkerLIB_PHONE_NUMBERS_PKG="com/android/i18n/phonenumbers"
55*e6ba1607SAndroid Build Coastguard WorkerLIB_PHONE_NUMBERS_PATH="external/libphonenumber/java/src"
56*e6ba1607SAndroid Build Coastguard Worker
57*e6ba1607SAndroid Build Coastguard Worker# Final artifact names
58*e6ba1607SAndroid Build Coastguard WorkerANDROID_ALL=android-all-${ROBOLECTRIC_VERSION}.jar
59*e6ba1607SAndroid Build Coastguard WorkerANDROID_ALL_POM=android-all-${ROBOLECTRIC_VERSION}.pom
60*e6ba1607SAndroid Build Coastguard WorkerANDROID_ALL_SRC=android-all-${ROBOLECTRIC_VERSION}-sources.jar
61*e6ba1607SAndroid Build Coastguard WorkerANDROID_ALL_DOC=android-all-${ROBOLECTRIC_VERSION}-javadoc.jar
62*e6ba1607SAndroid Build Coastguard WorkerANDROID_BUNDLE=android-all-${ROBOLECTRIC_VERSION}-bundle.jar
63*e6ba1607SAndroid Build Coastguard Worker
64*e6ba1607SAndroid Build Coastguard WorkerTZDATA_ARCH="generic_x86"
65*e6ba1607SAndroid Build Coastguard Worker
66*e6ba1607SAndroid Build Coastguard Workerbuild_platform() {
67*e6ba1607SAndroid Build Coastguard Worker    NATIVE_ARTIFACTS=()
68*e6ba1607SAndroid Build Coastguard Worker
69*e6ba1607SAndroid Build Coastguard Worker    if [[ "${ANDROID_VERSION}" == "4.1.2_r1" ]]; then
70*e6ba1607SAndroid Build Coastguard Worker        ARTIFACTS=("core" "services" "framework" "android.policy" "ext")
71*e6ba1607SAndroid Build Coastguard Worker        SOURCES=(core/java graphics/java media/java location/java opengl/java policy/src sax/java services/java telephony/java wifi/java)
72*e6ba1607SAndroid Build Coastguard Worker    elif [[ "${ANDROID_VERSION}" == "4.2.2_r1.2" ]]; then
73*e6ba1607SAndroid Build Coastguard Worker        ARTIFACTS=("core" "services" "telephony-common" "framework" "android.policy" "ext")
74*e6ba1607SAndroid Build Coastguard Worker        SOURCES=(core/java graphics/java media/java location/java opengl/java policy/src sax/java services/java telephony/java wifi/java)
75*e6ba1607SAndroid Build Coastguard Worker    elif [[ "${ANDROID_VERSION}" == "4.3_r2" ]]; then
76*e6ba1607SAndroid Build Coastguard Worker        ARTIFACTS=("core" "services" "telephony-common" "framework" "android.policy" "ext")
77*e6ba1607SAndroid Build Coastguard Worker        SOURCES=(core/java graphics/java media/java location/java opengl/java policy/src sax/java services/java telephony/java wifi/java)
78*e6ba1607SAndroid Build Coastguard Worker    elif [[ "${ANDROID_VERSION}" == "4.4_r1" ]]; then
79*e6ba1607SAndroid Build Coastguard Worker        ARTIFACTS=("core" "services" "telephony-common" "framework" "framework2" "framework-base" "android.policy" "ext" "webviewchromium" "okhttp" "conscrypt")
80*e6ba1607SAndroid Build Coastguard Worker        SOURCES=(core/java graphics/java media/java location/java opengl/java policy/src sax/java services/java telephony/java wifi/java)
81*e6ba1607SAndroid Build Coastguard Worker    elif [[ "${ANDROID_VERSION}" == "5.0.2_r3" ]]; then
82*e6ba1607SAndroid Build Coastguard Worker        ARTIFACTS=("core-libart" "services" "telephony-common" "framework" "android.policy" "ext" "okhttp" "conscrypt")
83*e6ba1607SAndroid Build Coastguard Worker        SOURCES=(core/java graphics/java media/java location/java opengl/java policy/src sax/java services/java telephony/java wifi/java)
84*e6ba1607SAndroid Build Coastguard Worker        TZDATA_ARCH="generic"
85*e6ba1607SAndroid Build Coastguard Worker    elif [[ "${ANDROID_VERSION}" == "5.1.1_r9" ]]; then
86*e6ba1607SAndroid Build Coastguard Worker        ARTIFACTS=("core-libart" "services" "telephony-common" "framework" "android.policy" "ext" "okhttp" "conscrypt")
87*e6ba1607SAndroid Build Coastguard Worker        SOURCES=(core/java graphics/java media/java location/java opengl/java policy/src sax/java services/java telephony/java wifi/java)
88*e6ba1607SAndroid Build Coastguard Worker        TZDATA_ARCH="generic"
89*e6ba1607SAndroid Build Coastguard Worker    elif [[ "${ANDROID_VERSION}" == "6.0.1_r3" ]]; then
90*e6ba1607SAndroid Build Coastguard Worker        ARTIFACTS=("core-libart" "services" "services.accessibility" "telephony-common" "framework" "ext" "icu4j-icudata-jarjar" "okhttp" "conscrypt")
91*e6ba1607SAndroid Build Coastguard Worker        SOURCES=(core/java graphics/java media/java location/java opengl/java sax/java services/java telephony/java wifi/java)
92*e6ba1607SAndroid Build Coastguard Worker        LIB_PHONE_NUMBERS_PKG="com/google/i18n/phonenumbers"
93*e6ba1607SAndroid Build Coastguard Worker        LIB_PHONE_NUMBERS_PATH="external/libphonenumber/libphonenumber/src"
94*e6ba1607SAndroid Build Coastguard Worker        TZDATA_ARCH="generic"
95*e6ba1607SAndroid Build Coastguard Worker    elif [[ "${ANDROID_VERSION}" == "7.0.0_r1" ]]; then
96*e6ba1607SAndroid Build Coastguard Worker        ARTIFACTS=("core-libart" "services" "services.accessibility" "telephony-common" "framework" "ext" "okhttp" "conscrypt")
97*e6ba1607SAndroid Build Coastguard Worker        NATIVE_ARTIFACTS=("icu4j-icudata-host-jarjar" "icu4j-icutzdata-host-jarjar")
98*e6ba1607SAndroid Build Coastguard Worker        SOURCES=(core/java graphics/java media/java location/java opengl/java sax/java services/java telephony/java wifi/java)
99*e6ba1607SAndroid Build Coastguard Worker        LIB_PHONE_NUMBERS_PKG="com/google/i18n/phonenumbers"
100*e6ba1607SAndroid Build Coastguard Worker        LIB_PHONE_NUMBERS_PATH="external/libphonenumber/libphonenumber/src"
101*e6ba1607SAndroid Build Coastguard Worker    elif [[ "${ANDROID_VERSION}" == "7.1.0_r7" ]]; then
102*e6ba1607SAndroid Build Coastguard Worker        ARTIFACTS=("core-libart" "services" "services.accessibility" "telephony-common" "framework" "ext" "okhttp" "conscrypt")
103*e6ba1607SAndroid Build Coastguard Worker        NATIVE_ARTIFACTS=("icu4j-icudata-host-jarjar" "icu4j-icutzdata-host-jarjar")
104*e6ba1607SAndroid Build Coastguard Worker        SOURCES=(core/java graphics/java media/java location/java opengl/java sax/java services/java telephony/java wifi/java)
105*e6ba1607SAndroid Build Coastguard Worker        LIB_PHONE_NUMBERS_PKG="com/google/i18n/phonenumbers"
106*e6ba1607SAndroid Build Coastguard Worker        LIB_PHONE_NUMBERS_PATH="external/libphonenumber/libphonenumber/src"
107*e6ba1607SAndroid Build Coastguard Worker    elif [[ "${ANDROID_VERSION}" == "8.0.0_r4" ]]; then
108*e6ba1607SAndroid Build Coastguard Worker        ARTIFACTS=("robolectric_android-all")
109*e6ba1607SAndroid Build Coastguard Worker        NATIVE_ARTIFACTS=()
110*e6ba1607SAndroid Build Coastguard Worker        SOURCES=(core/java graphics/java media/java location/java opengl/java sax/java services/java telephony/java wifi/java)
111*e6ba1607SAndroid Build Coastguard Worker    else
112*e6ba1607SAndroid Build Coastguard Worker        echo "Robolectric: No match for version: ${ANDROID_VERSION}"
113*e6ba1607SAndroid Build Coastguard Worker        exit 1
114*e6ba1607SAndroid Build Coastguard Worker    fi
115*e6ba1607SAndroid Build Coastguard Worker
116*e6ba1607SAndroid Build Coastguard Worker    cd ${ANDROID_SOURCES_BASE}
117*e6ba1607SAndroid Build Coastguard Worker    if [ ! -d out/target/common/obj/JAVA_LIBRARIES ]; then
118*e6ba1607SAndroid Build Coastguard Worker      echo "Robolectric: You need to run 'sync-android.sh' first"
119*e6ba1607SAndroid Build Coastguard Worker      exit 1
120*e6ba1607SAndroid Build Coastguard Worker    fi
121*e6ba1607SAndroid Build Coastguard Worker}
122*e6ba1607SAndroid Build Coastguard Worker
123*e6ba1607SAndroid Build Coastguard Workerbuild_android_res() {
124*e6ba1607SAndroid Build Coastguard Worker    echo "Robolectric: Building android-res..."
125*e6ba1607SAndroid Build Coastguard Worker    cd ${FRAMEWORKS_BASE_DIR}/core/res; jar cf ${OUT}/${ANDROID_RES} .
126*e6ba1607SAndroid Build Coastguard Worker    src=${ANDROID_SOURCES_BASE}/out/target/common/obj/APPS/framework-res_intermediates/package-export.apk
127*e6ba1607SAndroid Build Coastguard Worker    cp $src ${OUT}/${ANDROID_RES}
128*e6ba1607SAndroid Build Coastguard Worker}
129*e6ba1607SAndroid Build Coastguard Worker
130*e6ba1607SAndroid Build Coastguard Workerbuild_android_ext() {
131*e6ba1607SAndroid Build Coastguard Worker    echo "Robolectric: Building android-ext..."
132*e6ba1607SAndroid Build Coastguard Worker    mkdir -p ${OUT}/ext-classes-modified/${LIB_PHONE_NUMBERS_PKG}
133*e6ba1607SAndroid Build Coastguard Worker    cd ${OUT}/ext-classes-modified; jar xf ${ANDROID_SOURCES_BASE}/out/target/common/obj/JAVA_LIBRARIES/ext_intermediates/classes.jar
134*e6ba1607SAndroid Build Coastguard Worker    cp -R ${ANDROID_SOURCES_BASE}/${LIB_PHONE_NUMBERS_PATH}/${LIB_PHONE_NUMBERS_PKG}/data ${OUT}/ext-classes-modified/${LIB_PHONE_NUMBERS_PKG}
135*e6ba1607SAndroid Build Coastguard Worker    cd ${OUT}/ext-classes-modified; jar cf ${OUT}/${ANDROID_EXT} .
136*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/ext-classes-modified
137*e6ba1607SAndroid Build Coastguard Worker}
138*e6ba1607SAndroid Build Coastguard Worker
139*e6ba1607SAndroid Build Coastguard Workerbuild_android_classes() {
140*e6ba1607SAndroid Build Coastguard Worker    echo "Robolectric: Building android-classes..."
141*e6ba1607SAndroid Build Coastguard Worker    mkdir ${OUT}/android-all-classes
142*e6ba1607SAndroid Build Coastguard Worker    for artifact in "${ARTIFACTS[@]}"; do
143*e6ba1607SAndroid Build Coastguard Worker        src=${ANDROID_SOURCES_BASE}/out/target/common/obj/JAVA_LIBRARIES/${artifact}_intermediates
144*e6ba1607SAndroid Build Coastguard Worker        cd ${OUT}/android-all-classes
145*e6ba1607SAndroid Build Coastguard Worker        if [[ -f ${src}/classes.jar ]]; then
146*e6ba1607SAndroid Build Coastguard Worker            jar xf ${src}/classes.jar
147*e6ba1607SAndroid Build Coastguard Worker        else
148*e6ba1607SAndroid Build Coastguard Worker            echo "Couldn't find ${artifact} at ${src}/classes.jar"
149*e6ba1607SAndroid Build Coastguard Worker            exit 1
150*e6ba1607SAndroid Build Coastguard Worker        fi
151*e6ba1607SAndroid Build Coastguard Worker    done
152*e6ba1607SAndroid Build Coastguard Worker
153*e6ba1607SAndroid Build Coastguard Worker    for artifact in "${NATIVE_ARTIFACTS[@]}"; do
154*e6ba1607SAndroid Build Coastguard Worker        jarPath=${ANDROID_SOURCES_BASE}/out/host/linux-x86/framework/${artifact}.jar
155*e6ba1607SAndroid Build Coastguard Worker        cd ${OUT}/android-all-classes
156*e6ba1607SAndroid Build Coastguard Worker        if [[ -f $jarPath ]]; then
157*e6ba1607SAndroid Build Coastguard Worker            jar xf $jarPath
158*e6ba1607SAndroid Build Coastguard Worker        else
159*e6ba1607SAndroid Build Coastguard Worker            echo "Couldn't find ${artifact} at $jarPath"
160*e6ba1607SAndroid Build Coastguard Worker            exit 1
161*e6ba1607SAndroid Build Coastguard Worker        fi
162*e6ba1607SAndroid Build Coastguard Worker    done
163*e6ba1607SAndroid Build Coastguard Worker    build_tzdata
164*e6ba1607SAndroid Build Coastguard Worker    build_prop
165*e6ba1607SAndroid Build Coastguard Worker    cd ${OUT}/android-all-classes; jar cf ${OUT}/${ANDROID_CLASSES} .
166*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all-classes
167*e6ba1607SAndroid Build Coastguard Worker}
168*e6ba1607SAndroid Build Coastguard Worker
169*e6ba1607SAndroid Build Coastguard Workerbuild_tzdata() {
170*e6ba1607SAndroid Build Coastguard Worker  echo "Robolectric: Building tzdata..."
171*e6ba1607SAndroid Build Coastguard Worker  mkdir -p ${OUT}/android-all-classes/usr/share/zoneinfo
172*e6ba1607SAndroid Build Coastguard Worker  cp ${ANDROID_SOURCES_BASE}/out/target/product/${TZDATA_ARCH}/system/usr/share/zoneinfo/tzdata ${OUT}/android-all-classes/usr/share/zoneinfo
173*e6ba1607SAndroid Build Coastguard Worker}
174*e6ba1607SAndroid Build Coastguard Worker
175*e6ba1607SAndroid Build Coastguard Workerbuild_prop() {
176*e6ba1607SAndroid Build Coastguard Worker  cp ${ANDROID_SOURCES_BASE}/out/target/product/generic_x86/system/build.prop ${OUT}/android-all-classes
177*e6ba1607SAndroid Build Coastguard Worker}
178*e6ba1607SAndroid Build Coastguard Worker
179*e6ba1607SAndroid Build Coastguard Workerbuild_android_all_jar() {
180*e6ba1607SAndroid Build Coastguard Worker    echo "Robolectric: Building android-all..."
181*e6ba1607SAndroid Build Coastguard Worker    mkdir ${OUT}/android-all
182*e6ba1607SAndroid Build Coastguard Worker    cd ${OUT}/android-all; unzip ${OUT}/${ANDROID_RES}
183*e6ba1607SAndroid Build Coastguard Worker    # temporarily add raw resources too
184*e6ba1607SAndroid Build Coastguard Worker    cd ${OUT}/android-all; rsync -a ${FRAMEWORKS_RAW_RES_DIR} raw-res
185*e6ba1607SAndroid Build Coastguard Worker    cd ${OUT}/android-all; jar xf ${OUT}/${ANDROID_EXT}
186*e6ba1607SAndroid Build Coastguard Worker    cd ${OUT}/android-all; jar xf ${OUT}/${ANDROID_CLASSES}
187*e6ba1607SAndroid Build Coastguard Worker
188*e6ba1607SAndroid Build Coastguard Worker    # Remove unused files
189*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/Android.mk
190*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/raw-res/Android.mk
191*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/AndroidManifest.xml
192*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/raw-resAndroidManifest.xml
193*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/META-INF
194*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/MODULE_LICENSE_APACHE2
195*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/raw-res/MODULE_LICENSE_APACHE2
196*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/MakeJavaSymbols.sed
197*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/raw-res/MakeJavaSymbols.sed
198*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/NOTICE
199*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/raw-res/NOTICE
200*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/lint.xml
201*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/raw-res/lint.xml
202*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/android-all/java/lang
203*e6ba1607SAndroid Build Coastguard Worker
204*e6ba1607SAndroid Build Coastguard Worker    # Build the new JAR file
205*e6ba1607SAndroid Build Coastguard Worker    cd ${OUT}/android-all; jar cf ${OUT}/${ANDROID_ALL} .
206*e6ba1607SAndroid Build Coastguard Worker    rm ${OUT}/${ANDROID_RES} ${OUT}/${ANDROID_EXT} ${OUT}/${ANDROID_CLASSES}
207*e6ba1607SAndroid Build Coastguard Worker}
208*e6ba1607SAndroid Build Coastguard Worker
209*e6ba1607SAndroid Build Coastguard Workercp_android_all_jar() {
210*e6ba1607SAndroid Build Coastguard Worker  # function to use for android versions that support building the android all
211*e6ba1607SAndroid Build Coastguard Worker  # jar directly
212*e6ba1607SAndroid Build Coastguard Worker  # This will just copy the android all jar to the final name
213*e6ba1607SAndroid Build Coastguard Worker  src=${ANDROID_SOURCES_BASE}/out/target/common/obj/JAVA_LIBRARIES/robolectric_android-all-stub_intermediates/classes-with-res.jar
214*e6ba1607SAndroid Build Coastguard Worker  cp $src ${OUT}/${ANDROID_ALL}
215*e6ba1607SAndroid Build Coastguard Worker}
216*e6ba1607SAndroid Build Coastguard Worker
217*e6ba1607SAndroid Build Coastguard Workerbuild_android_src_jar() {
218*e6ba1607SAndroid Build Coastguard Worker    echo "Robolectric: Building android-all-source..."
219*e6ba1607SAndroid Build Coastguard Worker    local src=${ANDROID_SOURCES_BASE}/frameworks/base
220*e6ba1607SAndroid Build Coastguard Worker    local tmp=${OUT}/sources
221*e6ba1607SAndroid Build Coastguard Worker    mkdir ${tmp}
222*e6ba1607SAndroid Build Coastguard Worker
223*e6ba1607SAndroid Build Coastguard Worker    for sourceSubDir in "${SOURCES[@]}"; do
224*e6ba1607SAndroid Build Coastguard Worker        rsync -a ${src}/${sourceSubDir}/ ${tmp}/
225*e6ba1607SAndroid Build Coastguard Worker    done
226*e6ba1607SAndroid Build Coastguard Worker    rsync -a ${ANDROID_SOURCES_BASE}/libcore/luni/src/main/java/ ${tmp}/ # this is new
227*e6ba1607SAndroid Build Coastguard Worker    cd ${tmp}; jar cf ${OUT}/${ANDROID_ALL_SRC} .
228*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${tmp}
229*e6ba1607SAndroid Build Coastguard Worker}
230*e6ba1607SAndroid Build Coastguard Worker
231*e6ba1607SAndroid Build Coastguard Workerbuild_android_doc_jar() {
232*e6ba1607SAndroid Build Coastguard Worker    # TODO: Actually build the docs
233*e6ba1607SAndroid Build Coastguard Worker    echo "Robolectric: Building android-all-javadoc..."
234*e6ba1607SAndroid Build Coastguard Worker    mkdir ${OUT}/javadoc
235*e6ba1607SAndroid Build Coastguard Worker    cd ${OUT}/javadoc; jar cf ${OUT}/${ANDROID_ALL_DOC} .
236*e6ba1607SAndroid Build Coastguard Worker    rm -rf ${OUT}/javadoc
237*e6ba1607SAndroid Build Coastguard Worker}
238*e6ba1607SAndroid Build Coastguard Worker
239*e6ba1607SAndroid Build Coastguard Workerbuild_signed_packages() {
240*e6ba1607SAndroid Build Coastguard Worker    echo "Robolectric: Building android-all.pom..."
241*e6ba1607SAndroid Build Coastguard Worker    sed s/VERSION/${ROBOLECTRIC_VERSION}/ ${SCRIPT_DIR}/pom_template.xml | sed s/ARTIFACT_ID/android-all/ > ${OUT}/${ANDROID_ALL_POM}
242*e6ba1607SAndroid Build Coastguard Worker
243*e6ba1607SAndroid Build Coastguard Worker    echo "Robolectric: Signing files with gpg..."
244*e6ba1607SAndroid Build Coastguard Worker    for ext in ".jar" "-javadoc.jar" "-sources.jar" ".pom"; do
245*e6ba1607SAndroid Build Coastguard Worker        ( cd ${OUT} && gpg -ab --passphrase ${SIGNING_PASSWORD} android-all-${ROBOLECTRIC_VERSION}$ext )
246*e6ba1607SAndroid Build Coastguard Worker    done
247*e6ba1607SAndroid Build Coastguard Worker
248*e6ba1607SAndroid Build Coastguard Worker    echo "Robolectric: Creating bundle for Sonatype upload..."
249*e6ba1607SAndroid Build Coastguard Worker    cd ${OUT}; jar cf ${ANDROID_BUNDLE} *.jar *.pom *.asc
250*e6ba1607SAndroid Build Coastguard Worker}
251*e6ba1607SAndroid Build Coastguard Worker
252*e6ba1607SAndroid Build Coastguard Workercp_android_all_jar() {
253*e6ba1607SAndroid Build Coastguard Worker  # function to use for android versions that support building the android all
254*e6ba1607SAndroid Build Coastguard Worker  # jar directly
255*e6ba1607SAndroid Build Coastguard Worker  # This will just copy the android all jar to the final name
256*e6ba1607SAndroid Build Coastguard Worker  src=${ANDROID_SOURCES_BASE}/out/target/common/obj/JAVA_LIBRARIES/robolectric_android-all-stub_intermediates/classes-with-res.jar
257*e6ba1607SAndroid Build Coastguard Worker  cp $src ${OUT}/${ANDROID_ALL}
258*e6ba1607SAndroid Build Coastguard Worker}
259*e6ba1607SAndroid Build Coastguard Worker
260*e6ba1607SAndroid Build Coastguard Workermavenize() {
261*e6ba1607SAndroid Build Coastguard Worker    local FILE_NAME_BASE=android-all-${ROBOLECTRIC_VERSION}
262*e6ba1607SAndroid Build Coastguard Worker    mvn install:install-file \
263*e6ba1607SAndroid Build Coastguard Worker      -Dfile=${OUT}/${FILE_NAME_BASE}.jar \
264*e6ba1607SAndroid Build Coastguard Worker      -DgroupId=org.robolectric \
265*e6ba1607SAndroid Build Coastguard Worker      -DartifactId=android-all \
266*e6ba1607SAndroid Build Coastguard Worker      -Dversion=${ROBOLECTRIC_VERSION} \
267*e6ba1607SAndroid Build Coastguard Worker      -Dpackaging=jar
268*e6ba1607SAndroid Build Coastguard Worker
269*e6ba1607SAndroid Build Coastguard Worker    mvn install:install-file \
270*e6ba1607SAndroid Build Coastguard Worker      -Dfile=${OUT}/${FILE_NAME_BASE}-sources.jar \
271*e6ba1607SAndroid Build Coastguard Worker      -DgroupId=org.robolectric \
272*e6ba1607SAndroid Build Coastguard Worker      -DartifactId=android-all \
273*e6ba1607SAndroid Build Coastguard Worker      -Dversion=${ROBOLECTRIC_VERSION} \
274*e6ba1607SAndroid Build Coastguard Worker      -Dpackaging=jar \
275*e6ba1607SAndroid Build Coastguard Worker      -Dclassifier=sources
276*e6ba1607SAndroid Build Coastguard Worker
277*e6ba1607SAndroid Build Coastguard Worker    mvn install:install-file \
278*e6ba1607SAndroid Build Coastguard Worker      -Dfile=${OUT}/${FILE_NAME_BASE}-javadoc.jar \
279*e6ba1607SAndroid Build Coastguard Worker      -DgroupId=org.robolectric \
280*e6ba1607SAndroid Build Coastguard Worker      -DartifactId=android-all \
281*e6ba1607SAndroid Build Coastguard Worker      -Dversion=${ROBOLECTRIC_VERSION} \
282*e6ba1607SAndroid Build Coastguard Worker      -Dpackaging=jar \
283*e6ba1607SAndroid Build Coastguard Worker      -Dclassifier=javadoc
284*e6ba1607SAndroid Build Coastguard Worker}
285*e6ba1607SAndroid Build Coastguard Worker
286*e6ba1607SAndroid Build Coastguard Workerif [[ ! -d "${4}" ]]; then
287*e6ba1607SAndroid Build Coastguard Worker  echo "$4 is not a directory"
288*e6ba1607SAndroid Build Coastguard Worker  exit 1
289*e6ba1607SAndroid Build Coastguard Workerfi
290*e6ba1607SAndroid Build Coastguard Worker
291*e6ba1607SAndroid Build Coastguard WorkerOUT=${4}/${ANDROID_VERSION}
292*e6ba1607SAndroid Build Coastguard Workermkdir -p ${OUT}
293*e6ba1607SAndroid Build Coastguard Worker
294*e6ba1607SAndroid Build Coastguard Workerbuild_platform
295*e6ba1607SAndroid Build Coastguard Workerif [[ "${ANDROID_VERSION}" == "8.0.0_r4" ]]; then
296*e6ba1607SAndroid Build Coastguard Worker  cp_android_all_jar
297*e6ba1607SAndroid Build Coastguard Workerelse
298*e6ba1607SAndroid Build Coastguard Worker  build_android_res
299*e6ba1607SAndroid Build Coastguard Worker  build_android_ext
300*e6ba1607SAndroid Build Coastguard Worker  build_android_classes
301*e6ba1607SAndroid Build Coastguard Worker  build_android_all_jar
302*e6ba1607SAndroid Build Coastguard Workerfi
303*e6ba1607SAndroid Build Coastguard Worker
304*e6ba1607SAndroid Build Coastguard Workerbuild_android_src_jar
305*e6ba1607SAndroid Build Coastguard Workerbuild_android_doc_jar
306*e6ba1607SAndroid Build Coastguard Workerbuild_signed_packages
307*e6ba1607SAndroid Build Coastguard Workermavenize
308*e6ba1607SAndroid Build Coastguard Worker
309*e6ba1607SAndroid Build Coastguard Workerecho "DONE!!"
310*e6ba1607SAndroid Build Coastguard Workerecho "Your artifacts are located here: ${OUT}"
311