1*b7c941bbSAndroid Build Coastguard Worker#!/bin/bash 2*b7c941bbSAndroid Build Coastguard Worker# 3*b7c941bbSAndroid Build Coastguard Worker# Copyright (C) 2014 The Android Open Source Project 4*b7c941bbSAndroid Build Coastguard Worker# 5*b7c941bbSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*b7c941bbSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*b7c941bbSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*b7c941bbSAndroid Build Coastguard Worker# 9*b7c941bbSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*b7c941bbSAndroid Build Coastguard Worker# 11*b7c941bbSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*b7c941bbSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*b7c941bbSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*b7c941bbSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*b7c941bbSAndroid Build Coastguard Worker# limitations under the License. 16*b7c941bbSAndroid Build Coastguard Worker# 17*b7c941bbSAndroid Build Coastguard Worker 18*b7c941bbSAndroid Build Coastguard Worker# Please change NDK_BUILD to point to the appropriate ndk-build in NDK. It's recommended to 19*b7c941bbSAndroid Build Coastguard Worker# use the NDK with maximum backward compatibility, such as the NDK bundle in Android SDK. 20*b7c941bbSAndroid Build Coastguard WorkerNDK_BUILD="$HOME/Android/android-ndk-r16b/ndk-build" 21*b7c941bbSAndroid Build Coastguard Worker 22*b7c941bbSAndroid Build Coastguard Workerfunction generateCopyRightComment() { 23*b7c941bbSAndroid Build Coastguard Worker local year="$1" 24*b7c941bbSAndroid Build Coastguard Worker local isAndroidManifest="$2" 25*b7c941bbSAndroid Build Coastguard Worker local lineComment='#' 26*b7c941bbSAndroid Build Coastguard Worker local copyrightStart="" 27*b7c941bbSAndroid Build Coastguard Worker local copyrightEnd="" 28*b7c941bbSAndroid Build Coastguard Worker local commentStart="" 29*b7c941bbSAndroid Build Coastguard Worker local commentEnd="" 30*b7c941bbSAndroid Build Coastguard Worker if [[ -n "$isAndroidManifest" ]]; then 31*b7c941bbSAndroid Build Coastguard Worker lineComment="" 32*b7c941bbSAndroid Build Coastguard Worker copyrightStart=$'<!--\n' 33*b7c941bbSAndroid Build Coastguard Worker copyrightEnd=$'\n-->' 34*b7c941bbSAndroid Build Coastguard Worker commentStart='<!--' 35*b7c941bbSAndroid Build Coastguard Worker commentEnd='-->' 36*b7c941bbSAndroid Build Coastguard Worker fi 37*b7c941bbSAndroid Build Coastguard Worker 38*b7c941bbSAndroid Build Coastguard Worker copyrightInMk=$( 39*b7c941bbSAndroid Build Coastguard Worker cat <<COPYRIGHT_COMMENT 40*b7c941bbSAndroid Build Coastguard Worker${copyrightStart}${lineComment} Copyright (C) ${year} The Android Open Source Project 41*b7c941bbSAndroid Build Coastguard Worker${lineComment} 42*b7c941bbSAndroid Build Coastguard Worker${lineComment} Licensed under the Apache License, Version 2.0 (the "License"); 43*b7c941bbSAndroid Build Coastguard Worker${lineComment} you may not use this file except in compliance with the License. 44*b7c941bbSAndroid Build Coastguard Worker${lineComment} You may obtain a copy of the License at 45*b7c941bbSAndroid Build Coastguard Worker${lineComment} 46*b7c941bbSAndroid Build Coastguard Worker${lineComment} http://www.apache.org/licenses/LICENSE-2.0 47*b7c941bbSAndroid Build Coastguard Worker${lineComment} 48*b7c941bbSAndroid Build Coastguard Worker${lineComment} Unless required by applicable law or agreed to in writing, software 49*b7c941bbSAndroid Build Coastguard Worker${lineComment} distributed under the License is distributed on an "AS IS" BASIS, 50*b7c941bbSAndroid Build Coastguard Worker${lineComment} WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 51*b7c941bbSAndroid Build Coastguard Worker${lineComment} See the License for the specific language governing permissions and 52*b7c941bbSAndroid Build Coastguard Worker${lineComment} limitations under the License.${copyrightEnd} 53*b7c941bbSAndroid Build Coastguard Worker 54*b7c941bbSAndroid Build Coastguard Worker${commentStart}${lineComment} Automatically generated file from build_libs.sh.${commentEnd} 55*b7c941bbSAndroid Build Coastguard Worker${commentStart}${lineComment} DO NOT MODIFY THIS FILE.${commentEnd} 56*b7c941bbSAndroid Build Coastguard Worker 57*b7c941bbSAndroid Build Coastguard WorkerCOPYRIGHT_COMMENT 58*b7c941bbSAndroid Build Coastguard Worker ) 59*b7c941bbSAndroid Build Coastguard Worker echo "${copyrightInMk}" 60*b7c941bbSAndroid Build Coastguard Worker} 61*b7c941bbSAndroid Build Coastguard Worker 62*b7c941bbSAndroid Build Coastguard Workerfunction generateLibsAndroidMk { 63*b7c941bbSAndroid Build Coastguard Worker local targetFile=$1 64*b7c941bbSAndroid Build Coastguard Worker local copyrightInMk=$(generateCopyRightComment "2015") 65*b7c941bbSAndroid Build Coastguard Worker ( 66*b7c941bbSAndroid Build Coastguard Worker cat <<LIBS_ANDROID_MK 67*b7c941bbSAndroid Build Coastguard Worker${copyrightInMk} 68*b7c941bbSAndroid Build Coastguard Workerinclude \$(call all-subdir-makefiles) 69*b7c941bbSAndroid Build Coastguard WorkerLIBS_ANDROID_MK 70*b7c941bbSAndroid Build Coastguard Worker ) >"${targetFile}" 71*b7c941bbSAndroid Build Coastguard Worker 72*b7c941bbSAndroid Build Coastguard Worker} 73*b7c941bbSAndroid Build Coastguard Worker 74*b7c941bbSAndroid Build Coastguard Workerfunction generateAndroidManifest { 75*b7c941bbSAndroid Build Coastguard Worker local targetFile="$1" 76*b7c941bbSAndroid Build Coastguard Worker local arch="$2" 77*b7c941bbSAndroid Build Coastguard Worker local splitNamePart="$3" 78*b7c941bbSAndroid Build Coastguard Worker ( 79*b7c941bbSAndroid Build Coastguard Worker cat <<ANDROIDMANIFEST 80*b7c941bbSAndroid Build Coastguard Worker<?xml version="1.0" encoding="utf-8"?> 81*b7c941bbSAndroid Build Coastguard Worker<!-- Automatically generated file from build_libs.sh. --> 82*b7c941bbSAndroid Build Coastguard Worker<!-- DO NOT MODIFY THIS FILE. --> 83*b7c941bbSAndroid Build Coastguard Worker<manifest xmlns:android="http://schemas.android.com/apk/res/android" 84*b7c941bbSAndroid Build Coastguard Worker package="com.android.cts.splitapp" 85*b7c941bbSAndroid Build Coastguard Worker split="lib${splitNamePart}_${arch}"> 86*b7c941bbSAndroid Build Coastguard Worker <application android:hasCode="false" /> 87*b7c941bbSAndroid Build Coastguard Worker</manifest> 88*b7c941bbSAndroid Build Coastguard WorkerANDROIDMANIFEST 89*b7c941bbSAndroid Build Coastguard Worker ) >"${targetFile}" 90*b7c941bbSAndroid Build Coastguard Worker 91*b7c941bbSAndroid Build Coastguard Worker} 92*b7c941bbSAndroid Build Coastguard Worker 93*b7c941bbSAndroid Build Coastguard Workerfunction generateModuleForContentPartialMk { 94*b7c941bbSAndroid Build Coastguard Worker local arch="$1" 95*b7c941bbSAndroid Build Coastguard Worker local packagePartialName="$2" 96*b7c941bbSAndroid Build Coastguard Worker local rawDir="$3" 97*b7c941bbSAndroid Build Coastguard Worker local aaptRevisionFlags="$4" 98*b7c941bbSAndroid Build Coastguard Worker 99*b7c941bbSAndroid Build Coastguard Worker localPackage=$( 100*b7c941bbSAndroid Build Coastguard Worker cat <<MODULE_CONTENT_FOR_PARTIAL_MK 101*b7c941bbSAndroid Build Coastguard Worker 102*b7c941bbSAndroid Build Coastguard Workerinclude \$(CLEAR_VARS) 103*b7c941bbSAndroid Build Coastguard Worker 104*b7c941bbSAndroid Build Coastguard WorkerLOCAL_PACKAGE_NAME := CtsSplitApp${packagePartialName}_${arch} 105*b7c941bbSAndroid Build Coastguard WorkerLOCAL_SDK_VERSION := current 106*b7c941bbSAndroid Build Coastguard Worker 107*b7c941bbSAndroid Build Coastguard WorkerLOCAL_JAVA_RESOURCE_DIRS := ${rawDir} 108*b7c941bbSAndroid Build Coastguard Worker 109*b7c941bbSAndroid Build Coastguard Worker# tag this module as a cts test artifact 110*b7c941bbSAndroid Build Coastguard WorkerLOCAL_COMPATIBILITY_SUITE := cts general-tests 111*b7c941bbSAndroid Build Coastguard Worker 112*b7c941bbSAndroid Build Coastguard WorkerLOCAL_CERTIFICATE := cts/hostsidetests/appsecurity/certs/cts-testkey1 113*b7c941bbSAndroid Build Coastguard WorkerLOCAL_AAPT_FLAGS := --version-code 100 --replace-version${aaptRevisionFlags} 114*b7c941bbSAndroid Build Coastguard Worker 115*b7c941bbSAndroid Build Coastguard Workerinclude \$(BUILD_CTS_SUPPORT_PACKAGE) 116*b7c941bbSAndroid Build Coastguard WorkerMODULE_CONTENT_FOR_PARTIAL_MK 117*b7c941bbSAndroid Build Coastguard Worker ) 118*b7c941bbSAndroid Build Coastguard Worker echo "${localPackage}" 119*b7c941bbSAndroid Build Coastguard Worker} 120*b7c941bbSAndroid Build Coastguard Worker 121*b7c941bbSAndroid Build Coastguard Workerfunction generateAndroidMk() { 122*b7c941bbSAndroid Build Coastguard Worker local targetFile="$1" 123*b7c941bbSAndroid Build Coastguard Worker local arch="$2" 124*b7c941bbSAndroid Build Coastguard Worker local copyrightInMk=$(generateCopyRightComment "2014") 125*b7c941bbSAndroid Build Coastguard Worker local baseSplitMkModule=$(generateModuleForContentPartialMk "${arch}" "" "raw" "") 126*b7c941bbSAndroid Build Coastguard Worker local revisionSplitMkModule=$(generateModuleForContentPartialMk "${arch}" "_revision12" \ 127*b7c941bbSAndroid Build Coastguard Worker "raw_revision" " --revision-code 12") 128*b7c941bbSAndroid Build Coastguard Worker 129*b7c941bbSAndroid Build Coastguard Worker ( 130*b7c941bbSAndroid Build Coastguard Worker cat <<LIBS_ARCH_ANDROID_MK 131*b7c941bbSAndroid Build Coastguard Worker# 132*b7c941bbSAndroid Build Coastguard Worker${copyrightInMk} 133*b7c941bbSAndroid Build Coastguard WorkerLOCAL_PATH := \$(call my-dir) 134*b7c941bbSAndroid Build Coastguard Worker${baseSplitMkModule} 135*b7c941bbSAndroid Build Coastguard Worker${revisionSplitMkModule} 136*b7c941bbSAndroid Build Coastguard WorkerLIBS_ARCH_ANDROID_MK 137*b7c941bbSAndroid Build Coastguard Worker ) >"${targetFile}" 138*b7c941bbSAndroid Build Coastguard Worker} 139*b7c941bbSAndroid Build Coastguard Worker 140*b7c941bbSAndroid Build Coastguard Worker# Go build everything 141*b7c941bbSAndroid Build Coastguard Workerrm -rf libs 142*b7c941bbSAndroid Build Coastguard Workercd jni/ 143*b7c941bbSAndroid Build Coastguard Worker$NDK_BUILD clean 144*b7c941bbSAndroid Build Coastguard Worker$NDK_BUILD 145*b7c941bbSAndroid Build Coastguard Workercd ../ 146*b7c941bbSAndroid Build Coastguard Worker 147*b7c941bbSAndroid Build Coastguard Workerfor arch in $(ls libs/); do 148*b7c941bbSAndroid Build Coastguard Worker ( 149*b7c941bbSAndroid Build Coastguard Worker mkdir -p tmp/$arch/raw/lib/$arch/ 150*b7c941bbSAndroid Build Coastguard Worker mv libs/$arch/* tmp/$arch/raw/lib/$arch/ 151*b7c941bbSAndroid Build Coastguard Worker 152*b7c941bbSAndroid Build Coastguard Worker # The library file name in the new revision apk should have the same file name with base apk. 153*b7c941bbSAndroid Build Coastguard Worker mkdir -p tmp/$arch/raw_revision/lib/$arch/ 154*b7c941bbSAndroid Build Coastguard Worker mv tmp/$arch/raw/lib/$arch/libsplitappjni_revision.so \ 155*b7c941bbSAndroid Build Coastguard Worker tmp/$arch/raw_revision/lib/$arch/libsplitappjni.so 156*b7c941bbSAndroid Build Coastguard Worker 157*b7c941bbSAndroid Build Coastguard Worker archWithoutDash="${arch//[^a-zA-Z0-9_]/_}" 158*b7c941bbSAndroid Build Coastguard Worker generateAndroidManifest "tmp/$arch/AndroidManifest.xml" "${archWithoutDash}" "" 159*b7c941bbSAndroid Build Coastguard Worker 160*b7c941bbSAndroid Build Coastguard Worker generateAndroidMk "tmp/$arch/Android.mk" "$arch" 161*b7c941bbSAndroid Build Coastguard Worker ) 162*b7c941bbSAndroid Build Coastguard Workerdone 163*b7c941bbSAndroid Build Coastguard Worker 164*b7c941bbSAndroid Build Coastguard WorkergenerateLibsAndroidMk "tmp/Android.mk" 165*b7c941bbSAndroid Build Coastguard Worker 166*b7c941bbSAndroid Build Coastguard Workerrm -rf libs 167*b7c941bbSAndroid Build Coastguard Workerrm -rf obj 168*b7c941bbSAndroid Build Coastguard Worker 169*b7c941bbSAndroid Build Coastguard Workermv tmp libs 170