blob: 2acd4cbbabe3c0c01bb53e586057d22d2058cd35 [file] [log] [blame]
#!/bin/bash
#
# Copyright (C) 2014 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Please change NDK_BUILD to point to the appropriate ndk-build in NDK. It's recommended to
# use the NDK with maximum backward compatibility, such as the NDK bundle in Android SDK.
NDK_BUILD="$HOME/Android/android-ndk-r16b/ndk-build"
function generateCopyRightComment() {
local year="$1"
local isAndroidManifest="$2"
local lineComment='#'
local copyrightStart=""
local copyrightEnd=""
local commentStart=""
local commentEnd=""
if [[ -n "$isAndroidManifest" ]]; then
lineComment=""
copyrightStart=$'<!--\n'
copyrightEnd=$'\n-->'
commentStart='<!--'
commentEnd='-->'
fi
copyrightInMk=$(
cat <<COPYRIGHT_COMMENT
${copyrightStart}${lineComment} Copyright (C) ${year} The Android Open Source Project
${lineComment}
${lineComment} Licensed under the Apache License, Version 2.0 (the "License");
${lineComment} you may not use this file except in compliance with the License.
${lineComment} You may obtain a copy of the License at
${lineComment}
${lineComment} http://www.apache.org/licenses/LICENSE-2.0
${lineComment}
${lineComment} Unless required by applicable law or agreed to in writing, software
${lineComment} distributed under the License is distributed on an "AS IS" BASIS,
${lineComment} WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
${lineComment} See the License for the specific language governing permissions and
${lineComment} limitations under the License.${copyrightEnd}
${commentStart}${lineComment} Automatically generated file from build_libs.sh.${commentEnd}
${commentStart}${lineComment} DO NOT MODIFY THIS FILE.${commentEnd}
COPYRIGHT_COMMENT
)
echo "${copyrightInMk}"
}
function generateLibsAndroidMk {
local targetFile=$1
local copyrightInMk=$(generateCopyRightComment "2015")
(
cat <<LIBS_ANDROID_MK
${copyrightInMk}
include \$(call all-subdir-makefiles)
LIBS_ANDROID_MK
) >"${targetFile}"
}
function generateAndroidManifest {
local targetFile="$1"
local arch="$2"
local splitNamePart="$3"
(
cat <<ANDROIDMANIFEST
<?xml version="1.0" encoding="utf-8"?>
<!-- Automatically generated file from build_libs.sh. -->
<!-- DO NOT MODIFY THIS FILE. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.cts.splitapp"
split="lib${splitNamePart}_${arch}">
<application android:hasCode="false" />
</manifest>
ANDROIDMANIFEST
) >"${targetFile}"
}
function generateModuleForContentPartialMk {
local arch="$1"
local packagePartialName="$2"
local rawDir="$3"
local aaptRevisionFlags="$4"
localPackage=$(
cat <<MODULE_CONTENT_FOR_PARTIAL_MK
include \$(CLEAR_VARS)
LOCAL_PACKAGE_NAME := CtsSplitApp${packagePartialName}_${arch}
LOCAL_SDK_VERSION := current
LOCAL_JAVA_RESOURCE_DIRS := ${rawDir}
# tag this module as a cts test artifact
LOCAL_COMPATIBILITY_SUITE := cts general-tests
LOCAL_CERTIFICATE := cts/hostsidetests/appsecurity/certs/cts-testkey1
LOCAL_AAPT_FLAGS := --version-code 100 --replace-version${aaptRevisionFlags}
include \$(BUILD_CTS_SUPPORT_PACKAGE)
MODULE_CONTENT_FOR_PARTIAL_MK
)
echo "${localPackage}"
}
function generateAndroidMk() {
local targetFile="$1"
local arch="$2"
local copyrightInMk=$(generateCopyRightComment "2014")
local baseSplitMkModule=$(generateModuleForContentPartialMk "${arch}" "" "raw" "")
local revisionSplitMkModule=$(generateModuleForContentPartialMk "${arch}" "_revision12" \
"raw_revision" " --revision-code 12")
(
cat <<LIBS_ARCH_ANDROID_MK
#
${copyrightInMk}
LOCAL_PATH := \$(call my-dir)
${baseSplitMkModule}
${revisionSplitMkModule}
LIBS_ARCH_ANDROID_MK
) >"${targetFile}"
}
# Go build everything
rm -rf libs
cd jni/
$NDK_BUILD clean
$NDK_BUILD
cd ../
for arch in $(ls libs/); do
(
mkdir -p tmp/$arch/raw/lib/$arch/
mv libs/$arch/* tmp/$arch/raw/lib/$arch/
# The library file name in the new revision apk should have the same file name with base apk.
mkdir -p tmp/$arch/raw_revision/lib/$arch/
mv tmp/$arch/raw/lib/$arch/libsplitappjni_revision.so \
tmp/$arch/raw_revision/lib/$arch/libsplitappjni.so
archWithoutDash="${arch//[^a-zA-Z0-9_]/_}"
generateAndroidManifest "tmp/$arch/AndroidManifest.xml" "${archWithoutDash}" ""
generateAndroidMk "tmp/$arch/Android.mk" "$arch"
)
done
generateLibsAndroidMk "tmp/Android.mk"
rm -rf libs
rm -rf obj
mv tmp libs