NDK撩妹三部曲(一)—站住同学,我这有个C++的so库,底层运算效率飞起,想不想要?

NDK撩妹三部曲(二)——论“Android 实战如何使用 C++(Qt) so 库这个神秘武器?”之带妹实战篇

从何说起?

  前段时间,公司有个前端妹子找到我说:“Q哥,我想把我们项目的部分公共业务逻辑提取出来…”,话还没说完就被我打断了。“嗯,挺好的,抽个公共类吧”,我故作镇定的说道。“不是的,我想要…让你帮我用C++写一套,以后就能不区分平台的使用了嘛,你就帮帮我啪”,艹,打错了,是”吧“。咳咳,终于,妹子还是露出了本性。呵,女人!
  算了,本着助人为乐的态度(主要还不是看长相),Q哥我决定帮助妹子实现这个伟大的愿望。

欠揍,不,前奏

刚开始学 C++ 的时,和其他语言一样,我们都是用着一样的if else 打天下,switch case 玩的贼6,猛然间仿佛有一种错觉,C++ 也没啥嘛,我这么快就掌握了。可是。随着项目压力和时间无情的鞭挞,在项目实战中被各种啪啪打脸后,才发现脚踏实地,地上全是坑的道理呀!

C++ 是一种标准,它的源代码可跨平台,基于不同的平台进行编译。。我们在所有操作系统中都可以看到C++ 的影子,因此我们常常有一种需求是做一个 C++ 库拿来到处用,多省事。

撩妹之路起始篇

好了,废话不多说,我这里使用 QT Creator 新建项目,当然使用宇宙第一 VS 也可以,由于之后的系列的内容,包括 Android NDK 的构建都是基于 QT 的,因此选用了 QT Creator。

首先,假设你已经配置好了所有的环境,当然也包括后面要用的 Android SDK 和 NDK 环境。

新建 C++ 项目,支持的平台选择 Android设备 模板,基于 Cmake构建(QTcreator 默认是 Qmake,但是为了跨平台,用 Cmake 更易于我们的前端小妹理解和后面的学习),最后因为我们要给前端小妹一个 so 库,因此选择需要选择 Android arm64-v8a 套件(不要选择 MSVC 哦),这个可以随便选择,根据自己 QTcreator默认识别的来。
新建C++ library
基于Cmake构建
选择 MSVC 套件
项目结构
最后,我们的项目结构如上图所示。

撩妹之路实战篇

有了上面的项目框架,接下来就看真功夫了。

首先新建三个文件 testglobal.h,sotest.h 和 sotest.cpp 。

//testglobal.h

#ifndef TEST_GLOBAL_H
#define TEST_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(TEST_LIBRARY)
#  define TESTSHARED_EXPORT Q_DECL_EXPORT
#else
#  define TESTSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // TEST_GLOBAL_H

//test.h

#ifndef TEST_H
#define TEST_H

#include"testglobal.h"
extern "C"
{
    void TESTSHARED_EXPORT test(int a,int b);
}
#endif // TEST_H
//test.cpp

#include"test.h"
#include<iostream>
using namespace std;
void TESTSHARED_EXPORT test(int a,int b)
{
    std::cout << "a+b:" << a+b << std::endl;
}
//重点:cmake.txt

cmake_minimum_required (VERSION 2.6)
project(soTest)

set(QT_DIR "D:/WorkSoftware/Qt5.12.0_for_android/5.12.0/android_arm64_v8a")
set(ANDROID_ABI arm64-v8a)
set(ANDROID_NDK D:/Java/android-ndk-r20)

set(CMAKE_TOOLCHAIN_FILE ${ANDROID_NDK}/build/cmake/android.toolchain.cmake)
set(CMAKE_MAKE_PROGRAME ${ANDROID_NDK}/prebuilt/windows-x86_64/bin/make.exe)
set(ANDROID_TOOLCHAIN clang)
set(ANDROID_PLATFORM android-21)
set(ANDROID_STL c++_shared)
set(ANDROID_SYSROOT ${ANDROID_NDK}/sysroot)
set(ANDROID_ABI_NAME  "android_arm64_v8a")
include_directories(${ANDROID_SYSROOT}/usr/include/aarch64-linux-android)

set(Qt5_DIR "${QT_DIR}/lib/cmake/Qt5")
set(Qt5Core_DIR "${QT_DIR}/lib/cmake/Qt5Core")

find_package(Qt5 COMPONENTS Core REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(HEADERS
    testglobal.h test.h
)
set(SOURCES
    test.cpp
)
add_library(${PROJECT_NAME}  SHARED ${HEADERS} ${SOURCES})
target_link_libraries(soTest Qt5::Core)

在这里插入图片描述

右键“构建”,完成后即可在 build 目录找到生成的 libsoTest.so
若执行 Cmake 时出错,比如提示:
在这里插入图片描述

则参考下面这篇文章的小结:“2.QTCreator 工具编译”解决。

QT 跨平台开发(二)之现有项目在linux和windows下利用NDK 和 Cmake 编译为android so库

撩妹之路装逼篇

一顿操作后,终于可以拿给前端小妹试用(装逼)了,这是小妹给我的调用截图:
在这里插入图片描述
在这里插入图片描述
诶呦,我去,有人能告诉我妹子这是啥意思吗?


csdn地址:http://blog.csdn.net/u012534831
github地址:https://github.com/qht1003077897
源码地址:https://download.csdn.net/download/u012534831/12459034

如有帮助,请多多点赞支持哦。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
首先,您需要将您的 C 代码编写好,并确保它可以在 Android 平台上编译通过。 然后,您需要在 Android Studio 中配置 NDK。在 Android Studio 中,选择 File -> Project Structure,然后选择 SDK Location。在这个页面中,您可以看到 NDK 的路径,如果您还没有安装 NDK,可以点击 Download,然后选择需要下载的版本。 接下来,您需要创建一个 JNI 文件夹,并将您的 C 代码放在其中。然后,在您的项目的 build.gradle 文件中添加以下行: ```gradle android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "-std=c++11" // 如果需要的话 arguments "-DANDROID_PLATFORM=android-21", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_shared" } } } ... externalNativeBuild { cmake { path "CMakeLists.txt" } } } ``` 在这个文件中,您需要指定您的 CMakeLists.txt 文件的路径,并设置一些 CMake 变量来指定您的 NDK 版本、工具链和 STL 。 最后,在您的 CMakeLists.txt 文件中,您需要指定您的 C 代码的位置,并将其编译为共享。例如: ```cmake cmake_minimum_required(VERSION 3.4.1) add_library(mylibrary SHARED src/main/jni/mylibrary.c) target_link_libraries(mylibrary android log) ``` 这个示例假设您的 C 代码位于 src/main/jni/mylibrary.c 文件中,并且它将被编译为名为 mylibrary 的共享。 您可以使用 Android Studio 的 Build -> Make Project 命令来编译您的项目和 C 代码。如果一切顺利,您将在您的项目的 build/intermediates/cmake 目录中找到您的共享
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

q2nAmor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值