Bash程序  |  104行  |  2.12 KB

#!/bin/sh

# The purpose of this script is the following:
#
# 1/ Build the libraries under prebuilts/jni/
#
# 2/ Build the project under jni/
#
# 3/ Check that the prebuilt shared library was copied to
#    $NDK_OUT/<abi>/objs.
#
# 4/ Check that the prebuilt static library was not copied to
#    the same directory.
#

PROGDIR=$(dirname "$0")

OUT=$PROGDIR/obj/local
PREBUILTS_DIR=$PROGDIR/prebuilts
PREBUILTS_DIR=$(cd "$PREBUILTS_DIR" && pwd)

if [ -n "$APP_ABI" ]; then
  ABIS="$APP_ABI"
else
  ABIS=
  for OPT; do
    case $OPT in
      APP_ABI=*)
        ABIS=${OPT##APP_ABI=}
        APP_ABI=$ABIS
        ;;
    esac
  done

  if [ -z "$ABIS" ]; then
    ABIS="armeabi armeabi-v7a x86 mips armeabi-v7a-hard"
  fi
fi

# Step 0: Remove obj/ and libs/ to ensure everything is clean
rm -rf obj/ libs/
rm -rf $PREBUILTS_DIR/obj/ $PREBUILTS_DIR/libs/

# Step 1: Build prebuilt libraries.
if [ -z "$APP_ABI" ]; then
  $NDK/ndk-build -C "$PREBUILTS_DIR"
  RET=$?
else
  $NDK/ndk-build -C "$PREBUILTS_DIR" APP_ABI="$APP_ABI"
  RET=$?
fi

if [ $RET != 0 ]; then
  echo "ERROR: Can't build prebuilt libraries!"
  exit 1
fi

# Step 2: Build the project
if [ -z "$APP_ABI" ]; then
  PREBUILTS_DIR=$PREBUILTS_DIR $NDK/ndk-build -C "$PROGDIR"
  RET=$?
else
  PREBUILTS_DIR=$PREBUILTS_DIR $NDK/ndk-build -C "$PROGDIR" APP_ABI="$APP_ABI"
  RET=$?
fi

if [ $RET != 0 ]; then
  echo "ERROR: Can't build project!"
  exit 1
fi

# Step 3: Check that the prebuilt shared library was copied to the
#         right location.
#

FAILURES=0
for ABI in $ABIS; do
  printf "Checking for $ABI shared library: "
  SHARED_LIB=$(ls $OUT/*$ABI/libfoo.so 2>/dev/null)
  if [ $? != 0 ]; then
    printf "KO! missing file: $SHARED_LIB\n"
    FAILURES=$(( $FAILURES + 1 ))
  else
    printf "ok\n"
  fi

  printf "Checking for $ABI static library: "
  STATIC_LIB=$(ls $OUT/*$ABI/libbar.a 2>/dev/null)
  if [ $? = 0 ]; then
    printf "KO! file should not exist: $STATIC_LIB\n"
    FAILURES=$(( $FAILURES + 1 ))
  else
    printf "ok\n"
  fi
done

if [ "$FAILURES" = 0 ]; then
  echo "Everything's ok. Congratulations!"
  exit 0
else
  echo "Found $FAILURES failures! Please fix ndk-build!"
  exit 1
fi