须知
Android Jni 开发是 Android 晋级和自身成长及深入都要学习的知识点。 在 Android 中使用编译工具新建 c++ 项目, 比猫画虎应该都可以或多或少去开发点 c++/c 代码, 并简单的使用 Jni 去调用。 编译好后, 在 build 中, 可以找到对应编译好的 so 文件。 那么抛开开发工具外, 它是怎么编译的呢, 这个搞懂后或者使用后会对其开发有更大的帮助和认识。
cmakelist
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| cmake_minimum_required(VERSION 3.15.2)
project(untitled2)
set(CMAKE_CXX_STANDARD 14)
message("--------------------------------------------- ${ANDROID_ABI} => ${PROJECT_BINARY_DIR}/libs/${ANDROID_ABI}")
include_directories(./)
set(SOURCES ./library.cpp)
set(CMAKE_ANDROID_ARCH_ABI ${ANDROID_ABI}) set(CMAKE_ANDROID_NDK ${ANDROID_NDK}) set(CMAKE_SYSTEM_NAME Android) set(CMAKE_SYSTEM_VERSION ${ANDROID_API_LEVEL}) add_library(${PROJECT_NAME} SHARED ${SOURCES}) set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/libs/${ANDROID_ABI})
|
打包脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #!/bin/bash
rm -rf build
mkdir build cd build
ANDROID_NDK="/Users/xiaoxige/Library/Android/sdk/ndk/25.1.8937393" ANDROID_API_LEVEL=21
ARCHS=('armeabi-v7a' 'arm64-v8a' 'x86' 'x86_64')
function compile(){ for i in ${ARCHS[@]}; do rm -rf CMakeFiles cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABI="$i" \ -DANDROID_NDK=$ANDROID_NDK \ -DANDROID_API_LEVEL=$ANDROID_API_LEVEL \ .. make done }
compile
|