NDK16_Android.mk和CMakeLists.txt

  • 环境:Linux(C++编译生成的库要在手机Linux环境中使用)

NDK提供了编译c/cpp文件的工具,和一些可用的外部库,如log
静、动态库实现存在于相应路径,例如:
C:\Users\PF0ZYBAJ\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm\usr\lib

CMakeLists.txt

安卓现在的版本,默认的NDK支持配置文件
find_library( # Sets the name of the path variable.
log-lib

          # Specifies the name of the NDK library that
          # you want CMake to locate.
          log )

表示在预设的目录中寻找log库,把路径赋值给log-lib,然后使用 ${log-lib}
target_link_libraries( # Specifies the target library.
native-lib

                   # Links the target library to the log library
                   # included in the NDK.
                   ${log-lib} )

Android加载第三方库

  • 1、 直接编译出so (相当于打一个jar包)
    编译一次就行了
    缺点:不方便调试

  • 2、 把所有源文件放到as里面
    方便调试与修改
    缺点:编译时间长;cmakelist.txt、android.mk 写一大堆,而且还不知道怎么写(完全读懂它的configuration以及生成的makefile)

三 配置NDK环境变量

(将C++文件编译成能够在手机上运行的so库)
下载
配置环境变量

四 相关shell命令

–sysroot=XX
使用xx作为这一次编译的头文件与库文件的查找目录,查找下面的 usr/include usr/lib目录
-isysroot XX
头文件查找目录,覆盖–sysroot ,查找 XX/usr/include
-isystem XX
指定头文件查找路径(直接查找根目录)
-IXX
头文件查找目录
优先级:
-I -> -isystem -> sysroot

-LXX
指定库文件查找目录
-lxx.so
指定需要链接的库名

查找 目录1/usr/lib 的库文件
目录2 /usr/include 的头文件
还去查找 目录3 下的头文件
还去查找 目录4 下的头文件
gcc --sysroot=目录1 -isysroot 目录2 -isystem 目录3 -I目录4 main.c

gcc -L目录1 -l库名

javac -classpath xxx

例子: 链接ndk的日志库
gcc -LC:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm\usr\lib
-llog -lGLESv2

gcc --sysroot=C:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm
-llog -lGLESv2

$CC --sysroot=ND/platforms/android-21/arch-arm -isystem NDK\sysroot\usr\include
-isystem NDK\sysroot\usr\include\arm-linux-androideabi

export AAA="–sysroot=/root/android-ndk-r17b/platforms/android-21/arch-arm -isystem /root/android-ndk-r17b/sysroot/usr/include -isystem /root/android-ndk-r17b/sysroot/usr/include/arm-linux-androideabi

你可能感兴趣的:(NDK)