使用CMake进行android native开发

原创 2016年05月31日 17:16:12


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 #填android ndk的路径

    $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    #$ANDROID_CMAKE是第一步下载的android-cmake的路径
  alias android-cmake='cmake -DCMAKE_TOOLCHAIN_FILE=$ANDTOOLCHAIN '
  source /etc/profile


这样以后,就可以通过执行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也想编译的话,参考下面脚本。

#!/bin/sh

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





用CMake 编译Android库

Android默认使用Android-NDk来编译native库,需要编写Androd.mk文件,和Application.mk文件。 但现在很多项目使用CMake来编译(CMakeLists.tx...
  • xinyu391
  • xinyu391
  • 2017年06月23日 11:19
  • 1525

使用CMake构建android原生库

在android下进行原生C/C++应用程序开发,通常使用ndk-build脚本编译源代码,但是对于一些第三方库,采用ndk-build编译却是不太方便。我之前有些项目采用了CMake构建系统,现在希...
  • keensword007
  • keensword007
  • 2010年09月25日 18:59
  • 8436

cmake android

对于多平台管理生成native库,cmake的使用是非常方便的,下面就构建的cmake工程怎么生成android可用的native库或者可执行程序做一下记录 因为是开源的东西,在linux使用会省去很...
  • jsa158
  • jsa158
  • 2016年08月16日 10:33
  • 1753

Android CMake

Gradle 调用外部构建脚本 CMakeLists.txt。 CMake 按照构建脚本中的命令将 C++ 源文件 native-lib.cpp 编译到共享的对象库中,并命名为 libnative-...
  • zuochunsheng
  • zuochunsheng
  • 2017年03月19日 15:59
  • 376

NDK开发 从入门到放弃(七:Android Studio 2.2 CMAKE 高效NDK开发)

前言之前,每次需要边写C++代码的时候,我的内心都是拒绝的。 1. 它没有代码提示!!!这意味着我们必须自己手动敲出所有的代码,对于一个新手来说,要一个字母都不错且大小写也要正确,甚至要记得住所有的...
  • xiaoyu_93
  • xiaoyu_93
  • 2016年11月09日 16:36
  • 13215

Android 使用OpenCv,利用cmake

Android Studio下使用OpenCv,利用cmake 一、概述:(关于学习研究的过程及cmake的优势可略过) 发一个图片编辑的项目,貌似必须用到OpenCv的函数,但是这个导入并使...
  • hn_lgc
  • hn_lgc
  • 2017年02月06日 03:58
  • 1859

android cmake 调试

Android jni 支持 Cmake,新建的jni工程会自动的生成一个默认的CmakeList.txt文件,是和build.gradle 在同一个目录,但是感觉不爽,就决定一到cpp 目录和源代码...
  • renfujiang
  • renfujiang
  • 2017年01月21日 23:10
  • 2007

NDK开发 从入门到放弃(七:Android Studio 2.2 CMAKE 高效NDK开发)

转载地址:http://blog.csdn.net/cuiyufeng2/article/details/64125594 前言 之前,每次需要边写C++代码的时候,我...
  • l_215851356
  • l_215851356
  • 2017年07月07日 14:39
  • 1118

android-cmake环境变量

1.配置profile export PATH=$PATH:/home/opt/Qt5.5.0/5.5/gcc_64/bin:/lbg/arm-tools/bin:/home/lbg/downl...
  • jacke121
  • jacke121
  • 2017年01月10日 17:38
  • 680

NDK开发 从入门到放弃(七:Android Studio 2.2 CMAKE 高效NDK开发)

更深入的了解如何开发NDK
  • cuiyufeng2
  • cuiyufeng2
  • 2017年03月20日 14:45
  • 4437
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用CMake进行android native开发
举报原因:
原因补充:

(最多只允许输入30个字)