我们直接看一个示例:
写一个 helloworld c++ 可执行程序:
main.c:
# include <iostream>
int main(int argc, char const *argv[])
{
for(int i = 0; i < 5; ++i)
std::cout << "Hello World" << std::endl;
return 0;
}
Android 平台通常使用 CMake 调用 NDK 工具链编译 C/C++ 代码,具体地:
写 CMakeLists.txt:
google 给了两种方式用于支持 CMake 调用 NDK 工具链编译 C/C++ 代码,
一种是 CMake的内置支持,需要 CMake 版本 >= 3.21,NDK 版本需要大于 r23,是未来的主流。
一种是通过工具链文件支持,是当前的主流。Android Gradle 插件使用的是 NDK 的工具链文件。
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(main)
add_executable(${PROJECT_NAME} main.cpp )
编译脚本 build.sh:
export ANDROID_NDK=你的ndk完整路径
rm -r build
mkdir build && cd build
# CMake的内置支持
# cmake -DCMAKE_SYSTEM_NAME=Android \
# -DCMAKE_SYSTEM_VERSION=29 \
# -DCMAKE_ANDROID_ARCH_ABI=x86_64 \
# -DANDROID_NDK=$ANDROID_NDK \
# -DCMAKE_ANDROID_STL_TYPE=c++_shared \
# ..
# 工具链文件支持
cmake \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=x86_64 \
-DANDROID_PLATFORM=android-29 \
-DANDROID_STL=c++_shared \
..
cmake --build .
在模拟器上执行我们的程序:
# 编译程序
chmod +x build.sh
./build.sh
# 打开模拟器,流程略
# 上传可执行文件
adb push build/test /data/local/tmp
# 上传 STL 动态库
adb push 你的ndk完整路径/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so /data/local/tmp
# 进入到模拟器 shell
adb shell
# 执行程序
cd /data/local/tmp
export LD_LIBRARY_PATH=/data/local/tmp && ./test
源码
你可在我的 github 仓库 https://github.com/yuandaimaahao/AndroidFrameworkTutorial/tree/main/1.%E5%9F%BA%E7%A1%80%E7%AF%87/src/AndroidRunCpp 中下载到示例代码。
参考资料
阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/20384,转载请注明出处。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/20384,转载请注明出处。
评论0