下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第C語言JNI的動態(tài)注冊詳解目錄總結(jié)JNI的靜態(tài)注冊就是Javah生成頭文件,本章第一篇已經(jīng)講過,現(xiàn)在我們來講講第二種方式,JNI動態(tài)注冊。首先是module的build.gradle:
android{
compileSdkVersion30
buildToolsVersion"30.0.3"
defaultConfig{
applicationId"com.jhzl.a7_jni_2way"
minSdkVersion21
targetSdkVersion30
versionCode1
versionName"1.0"
testInstrumentationRunner"androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild{
cmake{
cppFlags""
buildTypes{
release{
minifyEnabledfalse
proguardFilesgetDefaultProguardFile('proguard-android-optimize.txt'),''
externalNativeBuild{
cmake{
path"CMakeLists.txt"
那我們的Activity的本地方法貼出來把:
publicclassMainActivityextendsAppCompatActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextViewaddTv=findViewById(R.id.add_tv);
TextViewsubTv=findViewById(R.id.sub_tv);
addTv.setText("加法計算:"+add(10,20));
subTv.setText("減法計算:"+sub(10,20));
static{
//加載靜態(tài)庫
System.loadLibrary("native-lib");
publicnativeintadd(inta,intb);
publicnativeintsub(inta,intb);
接著就是CMakeLists.txt
#指定cmke版本
cmake_minimum_required(VERSION3.4.1)
add_library(native-lib
SHARED
src/main/cpp/Hello.cpp)#添加.c源文件
include_directories(src/main/cpp/include)#添加頭文件的位置
target_link_libraries(native-lib
log)#選擇要使用的庫
最后,我們貼出今天的重頭戲Hello.h:
#ifndefPRACTICLE_HELLO_H
#definePRACTICLE_HELLO_H
extern"C"
#endif//PRACTICLE_HELLO_H
Hello.cpp:
#includejni.h
#include"Hello.h"
#includeandroid/log.h
#defineTAG"helloworld-jni"http://這個是自定義的LOG的標(biāo)識
#defineLOGD(...)__android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__)//定義LOGD類型
#defineLOGI(...)__android_log_print(ANDROID_LOG_INFO,TAG,__VA_ARGS__)//定義LOGI類型
#defineLOGW(...)__android_log_print(ANDROID_LOG_WARN,TAG,__VA_ARGS__)//定義LOGW類型
#defineLOGE(...)__android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__)//定義LOGE類型
#defineLOGF(...)__android_log_print(ANDROID_LOG_FATAL,TAG,__VA_ARGS__)//定義LOGF類型
#ifdef__cplusplus
extern"C"{
#endif
//對應(yīng)MainActivity的add
jintadd(JNIEnv*env,jobjectclazz,jinta,jintb){
returna+b;
//對應(yīng)MainActivity的sub
jintsub(JNIEnv*env,jobjectclazz,jinta,jintb){
returna-b;
//回調(diào)函數(shù)在這里面注冊函數(shù)
jintJNI_OnLoad(JavaVM*vm,void*reserved){
JNIEnv*env=NULL;
//env賦值
LOGD("GetEnv");
//獲取JniEnv
if(vm-GetEnv((void**)env,JNI_VERSION_1_6)!=JNI_OK){
LOGD("GetEnvFailed");
return-1;
//獲取一個class對象,對應(yīng)java類MainActivity
jclassmainActivity=env-FindClass("com/jhzl/a7_jni_2way/MainActivity");
*add:java方法名
*(II)I里面是兩個jint,返回jnit
*add,c函數(shù)指針,傳遞的參數(shù)應(yīng)該是env,jobject,包括簽名的(II)兩個jint,一個jnit返回值
JNINativeMethodmethods_MainActivity[]={
{"add","(II)I",(jint*)add},
{"sub","(II)I",(jint*)sub}
env-RegisterNatives(mainActivity,methods_MainActivity,sizeof(methods_MainActivity)/sizeof(methods_MainActivity[0]));
env
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目融資試題庫及答案
- 安全生產(chǎn)法知識競賽試題附答案
- 急診知識培訓(xùn)試題及答案
- 保安員考試模擬題庫及答案詳解(真題)
- 山西安全員考試模擬及答案
- 高頻個人優(yōu)勢面試題及答案
- 徐州地鐵考試試題及答案
- 消防設(shè)施操作員考試真題及參考答案
- 高頻稅務(wù)會計面試題及答案
- 六月份關(guān)節(jié)外科業(yè)務(wù)學(xué)習(xí)考試題附答案
- 老年病康復(fù)訓(xùn)練治療講課件
- 2024中考會考模擬地理(福建)(含答案或解析)
- CJ/T 164-2014節(jié)水型生活用水器具
- 購銷合同范本(塘渣)8篇
- 貨車充電協(xié)議書范本
- 屋面光伏設(shè)計合同協(xié)議
- 生鮮業(yè)務(wù)采購合同協(xié)議
- 夫妻門衛(wèi)合同協(xié)議
- 公司雙選工作方案
- GB/T 4340.2-2025金屬材料維氏硬度試驗第2部分:硬度計的檢驗與校準(zhǔn)
- 銷售合同評審管理制度
評論
0/150
提交評論