| #!/bin/bash |
| |
| # Copyright 2019 The Amber Authors. |
| # |
| # 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 |
| # |
| # https://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. |
| |
| set -x |
| |
| if [[ $1 == "" ]]; then |
| echo "Usage: $0 [build directory]" |
| exit 1 |
| fi |
| |
| BUILD_DIR=$(readlink -f $1) |
| if [[ $(ls $BUILD_DIR 2> /dev/null) == "" ]]; then |
| mkdir -p $BUILD_DIR |
| fi |
| |
| if [[ $ANDROID_SDK_HOME == "" ]]; then |
| echo "Error: ANDROID_SDK_HOME missing, please set env variable e.g.," |
| echo " $ export ANDROID_SDK_HOME=path/to/Android/SDK" |
| exit 1 |
| fi |
| |
| if [[ $ANDROID_NDK_HOME == "" ]]; then |
| echo "Error: ANDROID_NDK_HOME missing, please set env variable e.g.," |
| echo " $ export ANDROID_NDK_HOME=path/to/Android/NDK" |
| exit 1 |
| fi |
| |
| if [[ $(command -v javac) == "" ]]; then |
| echo "Error: Install Java. Recommended version is Java 8." |
| exit 1 |
| fi |
| |
| if [[ $KEY_STORE_PATH == "" ]]; then |
| echo "Error: KEY_STORE_PATH missing, please set env variable." |
| exit 1 |
| fi |
| |
| ANDROID_SOURCE_DIR=$(dirname $(readlink -f $0))/../android_sample |
| |
| APK_NAME=AmberSample.apk |
| ANDROID_PLATFORM=android-28 |
| ANDROID_BUILD_TOOL_VERSION=28.0.0 |
| ABI=arm64-v8a |
| BUILD_TYPE=Release |
| |
| AAPT=$ANDROID_SDK_HOME/build-tools/$ANDROID_BUILD_TOOL_VERSION/aapt |
| AAPT_ADD="$AAPT add" |
| AAPT_PACK="$AAPT package -f -I |
| $ANDROID_SDK_HOME/platforms/$ANDROID_PLATFORM/android.jar" |
| |
| DX="$ANDROID_SDK_HOME/build-tools/$ANDROID_BUILD_TOOL_VERSION/dx --dex" |
| |
| JAVAC="javac -classpath |
| $ANDROID_SDK_HOME/platforms/$ANDROID_PLATFORM/android.jar |
| -sourcepath $BUILD_DIR/gen -d $BUILD_DIR" |
| |
| mkdir -p $BUILD_DIR/gen $BUILD_DIR/output/lib/$ABI $BUILD_DIR/$BUILD_TYPE |
| |
| pushd $BUILD_DIR/$BUILD_TYPE |
| cmake \ |
| -DANDROID_ABI=$ABI \ |
| -DANDROID_PLATFORM=$ANDROID_PLATFORM \ |
| -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=$BUILD_DIR/output/lib/$ABI \ |
| -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ |
| -DANDROID_NDK=$ANDROID_NDK_HOME \ |
| -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \ |
| -DCMAKE_MAKE_PROGRAM=$(which ninja) \ |
| -GNinja \ |
| -DANDROID_TOOLCHAIN=clang \ |
| -DANDROID_STL=c++_static \ |
| $ANDROID_SOURCE_DIR |
| ninja |
| popd |
| |
| ANDROID_VULKAN=$ANDROID_NDK_HOME/sources/third_party/vulkan |
| for f in $(find $ANDROID_VULKAN/src/build-android/jniLibs/$ABI/ -name '*.so') |
| do |
| LINK=$BUILD_DIR/output/lib/$ABI/$(basename $f) |
| if [[ $(ls $LINK 2> /dev/null) == "" ]]; then |
| ln -s $f $LINK |
| fi |
| done |
| |
| $AAPT_PACK --non-constant-id -m \ |
| -M $ANDROID_SOURCE_DIR/AndroidManifest.xml \ |
| -S $ANDROID_SOURCE_DIR/res \ |
| -J $BUILD_DIR/gen/ \ |
| --generate-dependencies |
| |
| $AAPT_PACK -m \ |
| -M $ANDROID_SOURCE_DIR/AndroidManifest.xml \ |
| -A $ANDROID_SOURCE_DIR/assets \ |
| -S $ANDROID_SOURCE_DIR/res \ |
| -J "$BUILD_DIR/gen" \ |
| -F "$BUILD_DIR/$APK_NAME" \ |
| --shared-lib $BUILD_DIR/output |
| |
| $JAVAC $BUILD_DIR/gen/com/google/amber/*.java |
| $DX --output="$BUILD_DIR/classes.dex" $BUILD_DIR |
| |
| cd $BUILD_DIR |
| $AAPT_ADD $APK_NAME classes.dex |
| |
| $ANDROID_SDK_HOME/build-tools/$ANDROID_BUILD_TOOL_VERSION/apksigner sign \ |
| --min-sdk-version 28 --ks $KEY_STORE_PATH $APK_NAME |
| |
| echo "Successfully built $BUILD_DIR/$APK_NAME" |