中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

行業(yè)網(wǎng)站方案營銷型企業(yè)網(wǎng)站

行業(yè)網(wǎng)站方案,營銷型企業(yè)網(wǎng)站,做一網(wǎng)站要學(xué)些什么,北京大廠網(wǎng)站建設(shè)環(huán)境搭建 Android NDK開發(fā)實(shí)戰(zhàn)之環(huán)境搭建篇(so庫,Gemini ai)-CSDN博客 初始配置 前面已經(jīng)運(yùn)行了一個(gè)簡單的初始程序,現(xiàn)在我們來往初始程序添加類和函數(shù),并成功運(yùn)行的實(shí)驗(yàn)。 一級配置 第一層配置主要是cmake文件環(huán)境和一些編譯選項(xiàng)。 build配置 可參…

環(huán)境搭建

Android NDK開發(fā)實(shí)戰(zhàn)之環(huán)境搭建篇(so庫,Gemini ai)-CSDN博客

初始配置

前面已經(jīng)運(yùn)行了一個(gè)簡單的初始程序,現(xiàn)在我們來往初始程序添加類和函數(shù),并成功運(yùn)行的實(shí)驗(yàn)。

一級配置

第一層配置主要是cmake文件環(huán)境和一些編譯選項(xiàng)。

build配置 可參考:?

#build配置externalNativeBuild {cmake {path file('src/main/cpp/CMakeLists.txt')version '3.22.1'//cpp 編譯選項(xiàng)cppFlags '-fexceptions -std=c++11'//設(shè)置c++stl為動(dòng)態(tài)庫 默認(rèn)是靜態(tài)庫  arguments '-DANDROID_STL=c++_shared'}}

?

二級cmake配置

主要配置生成的動(dòng)態(tài)庫名稱,具體看注釋

為了測試 我們創(chuàng)建一個(gè)hello類


#include "iostream"
class hello {
public:std::string getVersion();
};

#include "hello.h"
std::string hello::getVersion(){return "v1.0 hello word";
}
#include <jni.h>
#include <string>#include "hello.h"
extern "C" JNIEXPORT jstring JNICALL
//stringFromJNI是c++function名稱
Java_com_example_first_1ndk_1cpp_MainActivity_stringFromJNI(JNIEnv* env,jobject /* this */) {std::string helo = "Hello from  first native C++ ";hello h;helo += h.getVersion();return env->NewStringUTF(helo.data());
}

?更改cmake,把cpp文件加入

#cmake最低版本
cmake_minimum_required(VERSION 3.22.1)#最終項(xiàng)目名稱 通過${CMAKE_PROJECT_NAME}獲得
project("first_ndk_cpp")add_library(#生成的動(dòng)態(tài)庫名稱${CMAKE_PROJECT_NAME}#生成庫類型:SHARED動(dòng)態(tài) 默認(rèn)靜態(tài)SHARED#相關(guān)cpp文件 假設(shè)有全局變量,交叉使用需要注意編譯順序。native-lib.cpphello.cpp)target_link_libraries(#最終生成目標(biāo)庫名稱${CMAKE_PROJECT_NAME}# 鏈接其他目標(biāo)庫androidlog)

MainActivity

MainActivity 通常被認(rèn)為是 Android 應(yīng)用程序的主要入口點(diǎn)。

public class MainActivity extends AppCompatActivity {// 靜態(tài)初始化塊, 程序啟動(dòng)時(shí)調(diào)用static {//加載名為 first_ndk_cpp 的動(dòng)態(tài)庫System.loadLibrary("first_ndk_cpp");}private ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//視圖綁定binding = ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());// Example of a call to a native methodTextView tv = binding.sampleText;tv.setText(stringFromJNI()); //java調(diào)用}/**這聲明了一個(gè)名為 stringFromJNI 的本地方法。該實(shí)現(xiàn)位于 first_ndk_cpp 庫中。*/public native String stringFromJNI();
}

運(yùn)行

最后運(yùn)行輸出

?小結(jié)

熟悉基本配置,知道增加類代碼如何重新編譯成動(dòng)態(tài)庫使用。

動(dòng)態(tài)庫實(shí)戰(zhàn)

場景:編譯兩份版本動(dòng)態(tài)庫 分別輸出v1和v2,然后切換運(yùn)行。

設(shè)置動(dòng)態(tài)庫導(dǎo)出路勁

前面操作,我們成功編譯出動(dòng)態(tài)庫。但是路勁很隱蔽,其次規(guī)范處理。

實(shí)現(xiàn)方法

CMakeLists.txt 設(shè)置導(dǎo)出so路勁:

CMAKE_ARCHIVE_OUTPUT_DIRECTORY :默認(rèn)存放靜態(tài)庫的?件夾位置; CMAKE_LIBRARY_OUTPUT_DIRECTORY :默認(rèn)存放動(dòng)態(tài)庫的?件夾位置;

# 第一種做法:單獨(dú)設(shè)置動(dòng)態(tài)庫的默認(rèn)輸出路徑
# 將動(dòng)態(tài)庫輸出到 `main/jniLibs/${ANDROID_ABI}` 目錄
# ${ANDROID_ABI} 是 Gradle 配置的 ABI 策略(如 armeabi-v7a, arm64-v8a 等)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY${CMAKE_CURRENT_SOURCE_DIR}/../libs/jniLibs/${ANDROID_ABI})# 第二種做法:設(shè)置動(dòng)態(tài)庫和靜態(tài)庫的默認(rèn)輸出路徑
# 將動(dòng)態(tài)庫和靜態(tài)庫輸出到 `main/jniLibs/${ANDROID_ABI}` 目錄
# 注意:LIBRARY_OUTPUT_PATH 是舊版 CMake 的變量,
#推薦使用 CMAKE_LIBRARY_OUTPUT_DIRECTORY 和 CMAKE_ARCHIVE_OUTPUT_DIRECTORY
set(LIBRARY_OUTPUT_PATH${CMAKE_CURRENT_SOURCE_DIR}/../libs/jniLibs/${ANDROID_ABI})

?

?根據(jù)這個(gè)方法步驟編譯兩個(gè)版本

主要區(qū)別:

std::string hello::getVersion(){return "v2.0 hello word";
}

?

嘗試版本切換

//定義項(xiàng)目的源代碼和資源文件的目錄結(jié)構(gòu)sourceSets {main {//指定 JNI 庫文件(.so 文件)的存放目錄jniLibs.srcDirs = ['src/main/libs/jniLibs']}}

?小結(jié)

學(xué)習(xí)如何指定動(dòng)態(tài)庫導(dǎo)出路勁,并根據(jù)動(dòng)態(tài)庫切換,實(shí)現(xiàn)多種版本調(diào)用。

特定cpu架構(gòu)實(shí)戰(zhàn)

上述討論了如何導(dǎo)出不同的動(dòng)態(tài)庫,現(xiàn)在如果只想根據(jù)x86架構(gòu)導(dǎo)出單個(gè)so庫如何實(shí)現(xiàn)?

先看看為什么需要指定cpu

?成指定cpu平臺(tái)對應(yīng)的so庫?件

應(yīng)??進(jìn)制接?(ABI),包含的內(nèi)容:

1、可執(zhí)??進(jìn)制?件的格式以及?持的內(nèi)容類型,?進(jìn)制?件如:程序、共享庫...

2、可使?的CPU指令集

3、運(yùn)?時(shí)內(nèi)存存儲(chǔ)和加載的字節(jié)順序

4、應(yīng)?和系統(tǒng)之間傳遞數(shù)據(jù)的規(guī)范,以及系統(tǒng)調(diào)?函數(shù)時(shí),如何使?堆棧、寄存器

5、如何重整C++名稱

abi與 指令集

Android 支持多種 CPU 架構(gòu),每種架構(gòu)對應(yīng)不同的 ABI。以下是常見的 CPU 架構(gòu)及其對應(yīng)的 ABI:

CPU 架構(gòu)ABI說明
ARMv5armeabi32 位 ARM 架構(gòu),已過時(shí),Android NDK r17 已不再支持。
ARMv7armeabi-v7a32 位 ARM 架構(gòu),支持硬件浮點(diǎn)運(yùn)算和 NEON 指令集。
ARMv8arm64-v8a64 位 ARM 架構(gòu),支持 AArch64 指令集。
MIPSmips32 位 MIPS 架構(gòu),已過時(shí),Android NDK r17 已不再支持。
MIPS64mips6464 位 MIPS 架構(gòu),已過時(shí),Android NDK r17 已不再支持。
x86x8632 位 Intel x86 架構(gòu),主要用于模擬器和部分低端設(shè)備。
x86_64x86_6464 位 Intel x86 架構(gòu),主要用于模擬器和高性能設(shè)備。

ABI 兼容性是指應(yīng)用程序在不同 CPU 架構(gòu)上的運(yùn)行能力。以下是各 ABI 的兼容性說明:

ABI兼容性說明
armeabi兼容 ARMv5 和 ARMv7,但不兼容 ARMv8(64 位)。
armeabi-v7a兼容 ARMv7,但不兼容 ARMv5 和 ARMv8(64 位)。
arm64-v8a兼容 ARMv8(64 位),但不兼容 ARMv5 和 ARMv7(32 位)。
mips僅兼容 MIPS 架構(gòu),已過時(shí)。
mips64僅兼容 MIPS64 架構(gòu),已過時(shí)。
x86兼容 x86 架構(gòu),同時(shí)兼容?armeabi?和?armeabi-v7a(通過二進(jìn)制翻譯運(yùn)行)。
x86_64兼容 x86_64 架構(gòu),同時(shí)兼容?arm64-v8a(通過二進(jìn)制翻譯運(yùn)行)。

x86 和 x86_64 的特殊性

x86:主要用于模擬器和部分低端設(shè)備。通過二進(jìn)制翻譯,可以運(yùn)行?armeabi?和?armeabi-v7a?的代碼,但性能較低。

x86_64:主要用于模擬器和高性能設(shè)備。通過二進(jìn)制翻譯,可以運(yùn)行?arm64-v8a?的代碼。

ABI 配置

在 Android 項(xiàng)目中,可以通過 Gradle 配置支持的 ABI。

android {defaultConfig {ndk {abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'}}
}

小結(jié)

ARM 架構(gòu)armeabi-v7a?和?arm64-v8a?是當(dāng)前主流的架構(gòu)。

x86 架構(gòu):主要用于模擬器,通過二進(jìn)制翻譯可以運(yùn)行 ARM 架構(gòu)的代碼。

ABI 配置:通過 Gradle 的?abiFilters?指定支持的 ABI。

問題

當(dāng)遇到不能run,編譯沒錯(cuò)誤信息,則進(jìn)行sync now即可解決

??

學(xué)習(xí)資料分享

0voice · GitHub

http://www.risenshineclean.com/news/45671.html

相關(guān)文章:

  • 男生為女生做網(wǎng)站新媒體運(yùn)營
  • 日本做曖小視頻在線觀看網(wǎng)站百度app下載安裝 官方
  • 遵義市做網(wǎng)站的電話58和百度哪個(gè)推廣效果好
  • dw做網(wǎng)站背景圖片設(shè)置關(guān)鍵詞批量調(diào)詞 軟件
  • 做微信公眾號的網(wǎng)站有哪些內(nèi)容外貿(mào)平臺(tái)排名
  • 重慶景點(diǎn)排名seo優(yōu)化標(biāo)題 關(guān)鍵詞
  • 常州網(wǎng)站建設(shè)案例長沙優(yōu)化官網(wǎng)服務(wù)
  • 做外貿(mào)網(wǎng)站需要什么條件app拉新推廣怎么做
  • 黃村專業(yè)網(wǎng)站建設(shè)公司百度廣告代理商
  • 天津津坤科技發(fā)展有限公司鄭州seo優(yōu)化外包顧問阿亮
  • 西安手機(jī)網(wǎng)站建設(shè)app投放渠道有哪些
  • wordpress 大內(nèi)存網(wǎng)站建設(shè)優(yōu)化推廣系統(tǒng)
  • 政府網(wǎng)站建設(shè)問題nba中國官方網(wǎng)站
  • 自己制作頭像的網(wǎng)站 設(shè)計(jì) 動(dòng)漫蘇州seo關(guān)鍵詞優(yōu)化方法
  • 網(wǎng)絡(luò)葉子 網(wǎng)站推廣騰訊企業(yè)qq官網(wǎng)
  • asp動(dòng)態(tài)網(wǎng)站開發(fā)課后答案寧波seo推薦推廣渠道
  • wordpress本地網(wǎng)站百度網(wǎng)盤app
  • 5188大數(shù)據(jù)官網(wǎng)seo推廣是做什么
  • 寓意好的公司名字重慶seo排名電話
  • 非物質(zhì)文化遺產(chǎn)網(wǎng)站怎么做seo推廣是什么工作
  • 域名 空間 建網(wǎng)站黃桃圖片友情鏈接
  • 網(wǎng)站備案被惡意注銷優(yōu)化網(wǎng)站找哪家
  • 網(wǎng)站404怎么解決seo服務(wù)哪家好
  • 伊春百姓網(wǎng)免費(fèi)發(fā)布信息網(wǎng)鄭州seo哪家好
  • 揚(yáng)州西區(qū)網(wǎng)站建設(shè)企業(yè)網(wǎng)站推廣的方法有哪些
  • 做網(wǎng)站定金是多少錢百度開車關(guān)鍵詞
  • 綿陽網(wǎng)站建設(shè)餐飲營銷策劃與運(yùn)營
  • wordpress文章id修改鄭州seo顧問外包
  • 搜網(wǎng)站網(wǎng)滄州網(wǎng)站優(yōu)化
  • 外貿(mào)網(wǎng)站推廣技巧網(wǎng)絡(luò)軟文發(fā)布