日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NDK(三方库引入、Mk文件)

發(fā)布時(shí)間:2024/8/23 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NDK(三方库引入、Mk文件) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

NDK筆記-----第三方庫引入

一、字符操作: 1

二、NDK*(JNI)對(duì)象操作: 2

1C++調(diào)用java對(duì)象 3

三、Android.mk說明: 3

四、Application.mk說明 3

五、第三方庫使用 4

1、動(dòng)態(tài)庫 4

1.1、使用NDK編譯動(dòng)態(tài)庫并使用: 4

1.2、使用編譯好的動(dòng)態(tài)庫: 6

2、靜態(tài)庫 7

2.1NDK編譯靜態(tài)庫 7

2.1、使用已有的靜態(tài)庫: 7

?

注意:

C++:

Android項(xiàng)目:

Jni-c++源文件

方法:extern?"C"?{}包裹;

或 ?使用宏修飾。C不需要

頭文件?cmdjavah-全類名。?會(huì)在環(huán)境變量classpath中查找依賴的類

?

一、字符操作:

Java傳遞的jstring字符串無法直接在native使用,需要轉(zhuǎn)換。

使用GetStringUFTChars得到const?char?*?有時(shí)無法滿足操作。

?

#注意釋放資源

Malloc表示申請(qǐng)固定內(nèi)存。而new會(huì)直接調(diào)用構(gòu)造創(chuàng)建,不需要手動(dòng)申請(qǐng)內(nèi)存。

Malloc對(duì)應(yīng)free;??char*?X?=?new?char[10]?對(duì)應(yīng)?delete?X

?

C++獲取字符串指針操作

string?to?const?char*?========??.c_str()??.data();

const?char*、char*?to?string?=====?string?變量(char)

?

const

C++內(nèi)存分配:

?

對(duì)于非指針

const?TYPE?value;
TYPE?const?value;
這兩種寫法在本質(zhì)上是一樣的。

它的含義是:const修飾的類型為TYPE的變量value是不可變的(只讀)。

?

?

?

對(duì)于指針

  • const?char?*pContent;
    B.?char?*?const?pContent;
    C.?char?const?*pContent;
    D.?const?char*?const?pContent;
  • 如果const位于*的左側(cè),則const就是用來修飾指針?biāo)赶虻淖兞?#xff0c;即指針指向?yàn)槌A?#xff1b;
    如果const位于*的右側(cè),const就是修飾指針本身,即指針本身是常量。

    A:指向常量(ps:改變只報(bào)警告)

    B:指針為常量,不能改變指向。

    ?

    倒過來讀:

    Char*?? 指向字符【的指針】

    Char*?const? 常量(靜態(tài)指針)指向字符,即指向不可變

    Const?char*?? 指向字符常量【的指針】

    ?

    二、NDK*(JNI)對(duì)象操作:

    ?

    查看簽名:進(jìn)入到類文件所在目錄

    Javap?–s?類名

    ?

    1C++調(diào)用java對(duì)象

    ?

    ?

    ?

    三、Android.mk說明:

    LOCAL_PATH?:=?$(call?my-dir) 包含Android.mk?file文件的目錄??

    include?$(CLEAR_VARS) ??????????清除LOCAL_XXX變量????

    LOCAL_MODULE????:=?json ??文件名(不含后綴和lib)

    LOCAL_SRC_FILES?:=?lib/libjson.a 文件路徑?? ????

    include?$(PREBUILT_STATIC_LIBRARY) 預(yù)加載靜態(tài)庫????

    LOCAL_STATIC_LIBRARIES?:=?json 使用靜態(tài)庫

    LOCAL_LDLIBS????:=?-llog 使用庫(動(dòng)靜)

    include?$(BUILD_SHARED_LIBRARY) 共享庫(動(dòng)態(tài)庫)

    include?$(BUILD_STATIC_LIBRARY) 靜態(tài)庫

    ?

    注意:第三方庫的引入會(huì)在ndk目錄下查找,所以當(dāng)庫不存在時(shí)需要指明查找路徑。

    如果已經(jīng)定義好了庫模塊同時(shí)使用LOCAL_STATIC(SHARED)_LIBRIRES導(dǎo)入只 需要?:=模塊名

    四、Application.mk說明

    放入myapp/jin/application.mkmyapp/application.mk

    ?

    APP_PROJECT_PATH?:=? 應(yīng)用程序工程根目錄的絕對(duì)路徑j(luò)ni下可選

    APP_ABI?:=?armeabi-v7a支持ARMv7? armeabi支持ARMv5

    APP_CPPFLAGS?+=-fexceptions??開啟exception會(huì)根據(jù)applicationdebug節(jié)點(diǎn)

    NDK構(gòu)建系統(tǒng)提供由Android系統(tǒng)給出的最小C++運(yùn)行時(shí)庫

    指定:

    頭文件引入:

    APP_STL?:=?stlport_static????-->?static?STLport?library

    ???????APP_STL?:=?stlport_static????-->?靜態(tài)STLport庫

    ???????APP_STL?:=?stlport_shared????-->?shared?STLport?library

    ???????APP_STL?:=?stlport_shared????-->?動(dòng)態(tài)STLport庫

    ???????APP_STL?:=?system????????????-->?default?C++?runtime?library

    ???????APP_STL?:=?system????????????-->?默認(rèn)的C++運(yùn)行時(shí)庫

    gnustl_static ----- 標(biāo)準(zhǔn)STL?c++

    ?

    Jsoncpp+NDK目錄:

    ?

    五、第三方庫使用

    1、動(dòng)態(tài)庫

    ---------------------------------jsoncpp動(dòng)態(tài)庫-----------------------------------------

    ?

    1.1、使用NDK編譯動(dòng)態(tài)庫并使用:

    jsoncpp-src-0.6.0-rc2-amalgamation.tar?----?.h.app混合版

    ?

    Jsoncpp解壓---jni/文件名/解壓文件

    Android.mk:

    ?

    Test:測試

    Android.mk:

    ?

    Jin:

    Android.mk

    ?

    ?

    ?

    ?

    合并一個(gè)Android.mk

    ?

    ?

    1.2、使用編譯好的動(dòng)態(tài)庫:

    動(dòng)態(tài)庫放入jni/XX文件下

    ?

    ?

    ?

    2、靜態(tài)庫

    ------------------------------------------靜態(tài)庫----------------------------------------------

    ?

    2.1NDK編譯靜態(tài)庫

    注意:NDK編譯的靜態(tài)庫會(huì)存在與

    ?

    編譯好后直接使用

    ?

    2.1、使用已有的靜態(tài)庫:

    將需要的靜態(tài)庫放入jni

    ?

    ?

    ?

    六、資源釋放:

    1、字符串

    env->ReleaseStringUTFChars(jstr,?jcstr);

    Jstr-----jstring類型

    Jcstr----jstring的引用

    如:

    ?

    Jstrjstring類型,是來源。

    ?

    釋放類、方法和對(duì)象(jstring是對(duì)象,不是基本數(shù)據(jù)類型)

    ?

    ?

    ?

    演示JSONCPP使用:

    ?

    ?

    Value?root:?Jsoncpp對(duì)象,這里使用Reader會(huì)出錯(cuò)。

    ?

    資源被釋放又傳遞回java

    ?

    ?

    ?

    GDB調(diào)試

    ?

    Cygwin?------?cd?工程?-----ndk-gdb(未啟動(dòng)加上?--start

    ?file?工程obj下的so

    轉(zhuǎn)載于:https://www.cnblogs.com/xiaosw/p/3527458.html

    總結(jié)

    以上是生活随笔為你收集整理的NDK(三方库引入、Mk文件)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。