publishPlugin.sh 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. plugin_name=$1
  2. TARGET_DIR=$2/${plugin_name}
  3. PLUGIN_ROOT=$3
  4. ANDROID_PROJ_DIR=${PLUGIN_ROOT}/${plugin_name}/proj.android
  5. echo target dir is ${TARGET_DIR}
  6. echo android project dir is ${ANDROID_PROJ_DIR}
  7. #create directory for plugin
  8. mkdir -p ${TARGET_DIR}
  9. ###############################
  10. # functions used
  11. ###############################
  12. getLibraryFileName()
  13. {
  14. #get the library file name created by ndk build
  15. #fine line with LOCAL_MODULE_FILENAME
  16. DEFINED_FILENAME_LINE=`cat ./jni/Android.mk | grep LOCAL_MODULE_FILENAME`
  17. if [ -n "${DEFINED_FILENAME_LINE}" ]; then
  18. LIB_FILENAME=${DEFINED_FILENAME_LINE#*\=}
  19. else
  20. DEFINED_MODULE_LINE=`cat ./jni/Android.mk | grep LOCAL_MODULE `
  21. LIB_FILENAME=${DEFINED_MODULE_LINE#*\=}
  22. LIB_FILENAME=lib${LIB_FILENAME}
  23. fi
  24. LIB_FILENAME=`echo ${LIB_FILENAME} | sed 's/ //g'`
  25. LIB_FILENAME=${LIB_FILENAME}.a
  26. echo ${LIB_FILENAME}
  27. }
  28. getPathForAnt()
  29. {
  30. START_WITH_CYGWIN=`echo $1 | grep '^/cygdrive/'`
  31. if [ -z "${START_WITH_CYGWIN}" ]; then
  32. echo "$1"
  33. else
  34. RET=${START_WITH_CYGWIN#/cygdrive/}
  35. RET=${RET/\//:/}
  36. echo "${RET}"
  37. fi
  38. }
  39. echo
  40. echo "Publish plugin for android"
  41. pushd ${ANDROID_PROJ_DIR}
  42. #check local.properties file
  43. LOACL_FILE_NAME=local.properties
  44. if [ -f ${LOACL_FILE_NAME} ]; then
  45. DEFINED_SDK_DIR=`grep sdk.dir= ./${LOACL_FILE_NAME}`
  46. if [ -z "${DEFINED_SDK_DIR}" ]; then
  47. ANT_SDK_DIR="$(getPathForAnt ${INPUT_SDK_PATH})"
  48. echo "sdk.dir=${ANT_SDK_DIR}" >> ${LOACL_FILE_NAME}
  49. fi
  50. DEFINED_PLUGIN_DIR=`grep plugin.dir= ./${LOACL_FILE_NAME}`
  51. if [ -z "${DEFINED_PLUGIN_DIR}" ]; then
  52. ANT_PLUGIN_ROOT_DIR="$(getPathForAnt ${PLUGIN_ROOT})"
  53. echo "plugin.dir=${ANT_PLUGIN_ROOT_DIR}" >> ${LOACL_FILE_NAME}
  54. fi
  55. else
  56. ANT_SDK_DIR="$(getPathForAnt ${INPUT_SDK_PATH})"
  57. echo "sdk.dir=${ANT_SDK_DIR}" > ${LOACL_FILE_NAME}
  58. ANT_PLUGIN_ROOT_DIR="$(getPathForAnt ${PLUGIN_ROOT})"
  59. echo "plugin.dir=${ANT_PLUGIN_ROOT_DIR}" >> ${LOACL_FILE_NAME}
  60. fi
  61. #invoke ant build of plugin
  62. ${ANT_PATH}/ant -q clean
  63. ${ANT_PATH}/ant -q plugin-publish
  64. #copy .jar files to target directory
  65. mkdir -p ${TARGET_DIR}/android
  66. cp -rf ${ANDROID_PROJ_DIR}/bin/*.jar ${TARGET_DIR}/android
  67. if [ -d ${ANDROID_PROJ_DIR}/sdk ]; then
  68. cp -rf ${ANDROID_PROJ_DIR}/sdk/*.jar ${TARGET_DIR}/android
  69. fi
  70. #copy android depend on project to publish directory
  71. if [ -d "${ANDROID_PROJ_DIR}/DependProject" ]; then
  72. cp -rf "${ANDROID_PROJ_DIR}/DependProject" "${TARGET_DIR}/android"
  73. fi
  74. #copy ForManifest.xml file to publish directory
  75. if [ -f "${ANDROID_PROJ_DIR}/ForManifest.xml" ]; then
  76. cp -rf "${ANDROID_PROJ_DIR}/ForManifest.xml" "${TARGET_DIR}/android"
  77. fi
  78. #copy ForRes directory to publish directory
  79. if [ -d "${ANDROID_PROJ_DIR}/ForRes" ]; then
  80. cp -rf "${ANDROID_PROJ_DIR}/ForRes" "${TARGET_DIR}/android"
  81. fi
  82. #copy ForAssets directory to publish directory
  83. if [ -d "${ANDROID_PROJ_DIR}/ForAssets" ]; then
  84. cp -rf "${ANDROID_PROJ_DIR}/ForAssets" "${TARGET_DIR}/android"
  85. fi
  86. #copy CLibs directory to publish directory
  87. if [ -d "${ANDROID_PROJ_DIR}/CLibs" ]; then
  88. cp -rf "${ANDROID_PROJ_DIR}/CLibs" "${TARGET_DIR}/android"
  89. fi
  90. #Build C++ code
  91. BUILD_NATIVE_SCRIPT=${ANDROID_PROJ_DIR}/build_native.sh
  92. if [ -f $BUILD_NATIVE_SCRIPT ]; then
  93. echo "Build C++ code"
  94. #create include directory
  95. mkdir -p ${TARGET_DIR}/include
  96. cp -rf ${PLUGIN_ROOT}/${plugin_name}/include/* ${TARGET_DIR}/include
  97. #copy android include files
  98. ADNROID_SOURCE_DIR=${PLUGIN_ROOT}/${plugin_name}/platform/android
  99. if [ -d ${ADNROID_SOURCE_DIR} ]; then
  100. HAVE_HEADER_FILE=`find ${ADNROID_SOURCE_DIR} -name "*.h"`
  101. if [ -n "${HAVE_HEADER_FILE}" ]; then
  102. cp -rf ${ADNROID_SOURCE_DIR}/*.h "${TARGET_DIR}/android"
  103. fi
  104. fi
  105. #invoke ndk build for plugin project
  106. ./build_native.sh
  107. LIB_FILE="$(getLibraryFileName)"
  108. for File in ${ANDROID_PROJ_DIR}/obj/local/*
  109. do
  110. if [ -d $File ]; then
  111. if [ -f "${File}"/${LIB_FILE} ]; then
  112. ABI_NAME=`basename "${File}"`
  113. mkdir -p "${TARGET_DIR}/android/lib/${ABI_NAME}"
  114. cp -rf "${File}/${LIB_FILE}" "${TARGET_DIR}/android/lib/${ABI_NAME}"
  115. fi
  116. fi
  117. done
  118. #generate mk file for prebuild
  119. ${PLUGIN_ROOT}/tools/toolsForPublish/genPrebuildMK.sh ${ANDROID_PROJ_DIR}/jni/Android.mk ${TARGET_DIR}/android/Android.mk
  120. fi
  121. popd