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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

android c++ gizp 调用 so,使用ndk-build编译 android调用的so库

發布時間:2025/3/8 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android c++ gizp 调用 so,使用ndk-build编译 android调用的so库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前沿

編譯so的方法有兩種方法第一種就是編寫原生的makefile文件利用gcc進行編譯,這里我講解的是另外一種。采用NDK提供的ndk-build編譯。

簡介

使用ndk編譯的時候需要介紹它的腳本文件,Android.mk和Application.mk,但是Application.mk是可選的,用來描述原生程序用到的一些特性,如原生程序支持的ARM指令集。

Android.mk是工程的編譯腳本,描述了編譯原生程序所需要的選擇項、頭文件、源文件以及依賴庫等。

實例

首先需要下載DNK,這個就不用多說了,我直接來說步驟吧。程序員一般都會對Hello,world感到親切,我們就從hello,word開始。利用eclipse新建一個項目我取了新建了一個andoridNDKTest這個項目,先看看項目目錄吧。

這里注意到上面的多了一個jni目錄,這個目錄就是java通過jni調用的代碼放的地方,里面放了三個文件,我們還是首先來講一下hello-jni.c這個文件,我們來看看代碼。

#include?

#include?

jstring

Java_com_example_ndktest_MainActivity_stringFromJNI(?JNIEnv*?env,

jobject?thiz?)

{

return?(*env)->NewStringUTF(env,?"Hello?world?");

}

代碼很簡單就是命名有點長,第一個Java不用管就是jni的規定,然后后面的就是包路徑和類名稱最后是函數名。這個函數的作用就是返回一個字符串。

然后就是利用ndk來編譯這個函數了,我們需要看看Android.mk和Applicaion.mk文件里面到底有些什么。

android.mk

LOCAL_PATH?:=?$(call?my-dir)

include?$(CLEAR_VARS)

LOCAL_MODULE????:=?hello

LOCAL_SRC_FILES?:=?hello-jni.c

include?$(BUILD_SHARED_LIBRARY)

LOCAL_PATH:=($call my-dir)定義了本地源碼路徑 call my-dir是編譯系統提供的,返回的就是mk的路徑。

include $(CLEAR_VARS) 指定讓編譯系統清楚掉一些已經定義過的宏,這些宏定義都是全局的,如LOCAL_MODULE、LOCAL_SRC_FILE,當一個GUN MAKE在編譯多個模塊時候,必須清楚并且重新設置他們。

LOCAL_ARM_MODE := arm指定原生程序用的指令集,這里上面我們沒有用到。

LOCAL_MODULE:= hello指定生成程序的文件名,如果生成共享的庫模塊會生成libhello.so.

LOCAL_SRC_FILE:=hello-jni.c指定c或者c++源文件。

inlude $(BUILD_EXECUTABLE)指定生成文件的類型,BUILD_EXECUTABLE表示可執行文件,BUILD_SHARED_LIBRARY表示生成動態庫,BUILD_STATIC_LIBRARY靜態庫。

然后是Applicaion.mk文件

APP_ABI?:=?all

這句代碼的意思是生成所有平臺的編譯結果。

其實到了這里你就可以直接進入jni文件夾里面輸入ndk-build開始編譯了,但是為了看到編譯過后的運行結果我這里在eclipse里面編譯,看圖說話。

然后編譯器就會自動的編譯文件,最后就是android這邊的調用了,我們來看看andorid的文件代碼

public?class?MainActivity?extends?Activity?{

//聲明c的接口

public?native?String?stringFromJNI();

static?{

System.loadLibrary("hello");

}

@Override

protected?void?onCreate(Bundle?savedInstanceState)?{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView?textView?=?(TextView)?findViewById(R.id.hello);

textView.setText(stringFromJNI());

}

}

然后讓我們注意的是這句代碼

public native String stringFromJNI();

其實它就是函數生命,但是采用的native因為是在so里面的。

static {

System.loadLibrary("hello");

}

這句函數就更簡單了,直接加載我們剛才編譯好的so庫。好了,如果沒什么問題就直接run在手機上看效果吧。

總結

以上是生活随笔為你收集整理的android c++ gizp 调用 so,使用ndk-build编译 android调用的so库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 啪啪福利社 | 深夜福利在线免费观看 | 狠狠操狠狠操狠狠操 | 色99在线 | 成人wwwww免费观看 | 免费福利在线视频 | 天天射综合 | 午夜精品福利电影 | 亚洲老女人av| 91免费网站入口 | 日本三级日本三级日本三级极 | 免费人妻一区二区三区 | 91 久久| 狠狠操网 | 大粗鳮巴久久久久久久久 | 欧美视频免费在线观看 | 欧美sm极限捆绑bd | 日韩人妻一区二区三区蜜桃视频 | 玖草在线视频 | 黄色片视频播放 | 久久人妻少妇嫩草av | 欧美做受高潮6 | 午夜久久剧场 | www.夜夜操| 亚洲字幕 | a级片在线免费观看 | 免费日韩毛片 | 美女色av | 日韩精品一区二区三区国语自制 | 激情文学亚洲色图 | 国产91在线观看丝袜 | 一区二区三区四区五区在线视频 | 911福利视频 | 欧美福利片在线观看 | 男人天堂色 | 日韩91在线 | 国产精品久久久久一区二区三区 | 日韩一区二区三区四区在线 | 亚洲欧美日韩精品色xxx | 日韩av综合 | 日韩精品在线视频观看 | 老司机免费精品视频 | 懂色aⅴ国产一区二区三区 亚洲欧美国产另类 | 国产污污| 在线免费观看污视频 | 香蕉久久国产av一区二区 | 欧美日韩亚洲系列 | 小宵虎南在线观看 | 国产精品夫妻 | 欧美日韩国产黄色 | 久久精品无码人妻 | www.xxx日韩 | 四虎黄色网址 | av涩涩| 蜜桃av噜噜一区二区三区网址 | 牛牛电影国产一区二区 | 九九免费视频 | 午夜精品一区二区三区在线视频 | 青娱乐99| 成人免费看av | 一卡二卡在线观看 | 欧美人与禽性xxxxx杂性 | 男人的天堂视频网站 | 亚洲国产成人综合 | 久久色在线 | 色.www| 亚洲熟女乱综合一区二区三区 | 日韩资源| 国产亚洲福利 | 国产一区二区三区 | 男女视频免费观看 | 日本特黄一级片 | 天天干干 | 日本高清xxxx | 国产成人激情视频 | 日韩黄色短片 | av免播放器 | 222aaa| 熟女人妻一区二区三区免费看 | 韩日视频在线观看 | 国产黄频在线观看 | 久久久久久久久蜜桃 | 国产卡一卡二 | 91成人在线观看国产 | 在线岛国 | 亚洲三级小视频 | 波多野结衣理论片 | 免费观看成人 | 在线观看国产黄色 | 国产一级淫片免费 | 国产免费黄色片 | 91丨国产丨捆绑调教 | 亚色视频 | 亚洲免费在线视频观看 | 国产婷婷色一区二区在线观看 | 懂色av一区二区三区四区 | 熟妇人妻av无码一区二区三区 | 国产精品91一区 | 亚洲欧美亚洲 |