响应式网站建设精英北京市建筑工程设计有限责任公司
响应式网站建设精英,北京市建筑工程设计有限责任公司,什么网站能买建设摩托车,网页设计培训的课程类型Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库 文章目录 Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库一、前言二、编译环境三、示例C/CPP程序1、总体工程结构2、示例代码3、CMakeLists.txt#xff08;重要#xff09;4、…Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库 文章目录 Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库一、前言二、编译环境三、示例C/CPP程序1、总体工程结构2、示例代码3、CMakeLists.txt重要4、build脚本重要5、运行测试 四、总结 一、前言
之前在Android Studio中编写NDK C/C相关代码通过Gradle和CMake编译成动态库然后再利用JNI的方式进行调用。现在需要编译Android C/C可执行程序通过运行程序做一些小实验而这些小实验都是纯C/C编写不包含任何Java代码那么是否可以利用现成的环境进行开发呢之前我是一直在虚拟机上安装NDK利用其带有的交叉编译工具链进行编译但NDK的低版本和高版本变化比较大比如高版本取消了gcc改为使用clang因此导致在虚拟机上安装ndk进行编译的方式随着ndk版本的变化有了很多兼容问题所以学会cmake独立编译方式在现阶段具有一劳永逸的效果。
二、编译环境
通过Android Studio内置的SDK Manager下载NDK和CMake可参考下载NDK和构建工具
三、示例C/CPP程序
1、总体工程结构
由于单独运行camke命令来处理因此工程结构比较灵活可以将相关的代码都放到一个目录下紧凑且方便查找。
2、示例代码
addTest.c我这里以加载静态库或动态库的方式做示例实际场景中链接静态库或动态库更多最好是使用静态库拷贝动态库到Android设备上以及设置路径也挺麻烦的
//
// Created by Administrator on 2023/12/5.
//
#include stdio.h
#include addnum.hint main()
{int res addtwo(1, 2);printf(add test res:%d\n, res);return 0;
}3、CMakeLists.txt重要
引入动态库、静态库以及生成可执行文件、静态库、动态库等方法都是很有用的
# CMake最低版本号要求
cmake_minimum_required(VERSION 3.6)# 项目信息
project (addTest)#引入静态库
add_library(addnum STATIC IMPORTED)
set_target_properties(addnum PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libaddnum.a)
#引入动态库
#add_library(addnum SHARED IMPORTED)
#set_target_properties(addnum PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libaddnum.so)# 设置目标文件的名字
set(TARGET_NAME addTest)# 生成可执行文件
add_executable(${TARGET_NAME} addTest.c)
#生成静态库
#add_library(${TARGET_NAME} STATIC addTest.c)
#生成动态库
#add_executable(${TARGET_NAME} SHARED addTest.c)# 链接库
target_link_libraries(${TARGET_NAME} addnum)4、build脚本重要
在执行cmake命令生成Android可执行文件时需要带上长长的参数为了简化此步骤这里编写一个脚本build.bat
REM set abiarmeabi-v7a
set abiarm64-v8a
set ANDROID_SDK_HOMEC:/Users/Administrator/AppData/Local/Android/Sdkif not exist %abi% md %abi%
cd %abi%%ANDROID_SDK_HOME%/cmake/3.10.2.4988404/bin/cmake ^-DANDROID_ABI%abi% ^-DANDROID_NDK%ANDROID_SDK_HOME%/ndk-bundle ^-DCMAKE_BUILD_TYPEDebug ^
REM -DCMAKE_BUILD_TYPERelease^-DCMAKE_TOOLCHAIN_FILE%ANDROID_SDK_HOME%/ndk-bundle/build/cmake/android.toolchain.cmake ^-DANDROID_NATIVE_API_LEVEL9 ^-DANDROID_TOOLCHAINclang -DCMAKE_GENERATORNinja ^-DCMAKE_MAKE_PROGRAM%ANDROID_SDK_HOME%/cmake/3.10.2.4988404/bin/ninja ^..%ANDROID_SDK_HOME%/cmake/3.10.2.4988404/bin/ninjacd ..脚本中的3.10.2.4988404指的是CMake的版本需要根据实际下载的CMake版本进行修改。 由于使用的是Windows系统这里给出的是bat脚本Linux/Mac的shell脚本可根据bat脚本进行相应的修改。
5、运行测试
使用Android手机通过USB数据线连接电脑或者使用模拟器。将生成的可执行文件通过adb命令push到设备上的/data/local/tmp下即可该路径具备运行程序的权限
$ adb push addTest /data/local/tmp
$ adb shell
$ chmod 777 /data/local/tmp/addTest
$ /data/local/tmp/addTest
add test res:3四、总结
之前一直使用ndk-build结合Android.mk在虚拟机上编译适用于Android的so目前发现很多兼容问题使用cmake方式后完美解决了这里做下总结。此外之前我们也总结过包含so和Java接口的jar包都是采用cmake的方式目前看来cmake方式要比Android.mk的方式要简单一些除了命令比较长之外.新的方式的掌握还是要靠官方文档以及自行尝试一些关键点突破了之后就没有那么难了。
参考文档
Android CMakehttps://developer.android.com/ndk/guides/cmake?hlzh_cn脱离AS在windows下使用CMake交叉编译for Androidhttps://blog.csdn.net/LLJJYY001/article/details/77866049
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89910.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!