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

如有幫助,請多多點贊支持哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章