Android NDK中提供了ndk-build脚本,以及若干mk文件,以简化ndk的开发,这对于开发一些小型应用来说足够了.如果对于一些大型工程特别是开源工程,人家是要cmake来组织的该怎么编译呢,总不能自己去重新写.mk文件吧。下面介绍对于这种项目的android库编译方法。
1、下载android-cmake
https://code.google.com/p/android-cmake/
2、使用NDK创建单独的工具链
- export NDK=~/android/android-ndk-r6
-
- $NDK/build/tools/make-standalone-toolchain.sh –platform=android-12 –install-dir=/opt/android-toolchain-12
3、编辑/etc/profile,在最后添加
- export ANDTOOLCHAIN=$ANDROID_CMAKE/toolchain/android.toolchain.cmake
- alias android-cmake='cmake -DCMAKE_TOOLCHAIN_FILE=$ANDTOOLCHAIN '
这样以后,就可以通过执行android-cmake命令编译出适合Android平台的.a和.so文件了。
- cd $MY_CMAKE_PROJECT
- mkdir build
- cd build
- android-cmake ..
位于libs/armeabi-v7.
静态库可通过下面指令查看文件架构。
objdump -a libxxx.a
动态库通过下面指令查看。
file libxxx.so
另附一个脚本,对于不使用android-cmake也想编译的话,参考下面脚本。
-
-
- export PATH="/media/f12/opt/ndklocal/bin:${PATH}"
- PREF="arm-linux-androideabi-"
-
- export CC="${PREF}gcc"
- export CXX="${PREF}g++"
- export LD="${PREF}ld "
- export CPP="${PREF}cpp"
- export AS="${PREF}as"
- export OBJCOPY="${PREF}objcopy"
- export OBJDUMP="${PREF}objdump"
- export STRIP="${PREF}strip"
- export RANLIB="${PREF}ranlib"
- export CCLD="${PREF}gcc"
- export AR="${PREF}ar"
-
- OUT_DIR="`pwd`/android-build"
-
- cmake \
- -DCMAKE_SYSTEM_NAME="Generic" \
- -DCMAKE_CXX_FLAGS="${C_FLAGS}" \
- -DJTHREAD_INCLUDE_DIRS="../jthread/android-build/include/jthread" \
- -DJTHREAD_LIBRARIES="../jthread/android-build/lib" \
- -DCMAKE_PREFIX_PATH="../jthread/android-build" \
- -DCMAKE_INSTALL_PREFIX="${OUT_DIR}" .
-
- make && \
- make install
-
- cd ${OUT_DIR}/lib && \
- ${AR} -x libjrtplib.a && \
- ${CXX} ${C_FLAGS} -shared -Wl,-soname,libjrtplib.so -o libjrtplib.so *.obj && \
- rm *.obj