多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android NDK:②第一個NDK程序(創(chuàng)建步驟&一些問題)

Android NDK:②第一個NDK程序(創(chuàng)建步驟&一些問題)

來源:程序員人生   發(fā)布時間:2015-05-21 08:12:44 閱讀次數(shù):2808次

Android NDK:②第1個NDK程序(創(chuàng)建步驟&1些問題)

本節(jié)內(nèi)容是:演示搭建第1個NDK程序

  • Android NDK第1個NDK程序創(chuàng)建步驟1些問題
    • 創(chuàng)建1個Android Project
    • Java代碼中聲明native方法
    • 創(chuàng)建Jni文件夾編寫ccpp代碼
    • 為項目添加NDK支持
    • 新建配置1個Builder
    • 調用了native方法的地方加載庫
    • 好了把程序跑起來
    • 總結
    • 遇到的問題

1.創(chuàng)建1個Android Project

直接創(chuàng)建1個新的Android Application Project便可~

這里寫圖片描述

2.Java代碼中聲明native方法:

package com.jay.example.firstndk; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private Button btnShow; // 聲明native方法 public native String javaFromJNI(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnShow = (Button) findViewById(R.id.btnShow); btnShow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, javaFromJNI(), Toast.LENGTH_SHORT).show(); } }); } }

3.創(chuàng)建Jni文件夾,編寫c/cpp代碼

這里要注意的地方有兩個:

①返回值類型

jni.h文件中中事前定義的數(shù)據(jù)類型,我們可以在ndk/platforms/android-xx/arch-arm/user/include目錄下找到,~xx代表版本號
打開jni.h我們會看到很多數(shù)據(jù)類型,我們這里的是string:

這里寫圖片描述

②方法名:依照下述規(guī)則:

返回值類型 Java_包名_類名_native方法名(JNIEnv* env, jobject obj)

而里頭的參數(shù)是固定的,在jni.h文件我們也能夠查到,他是1個叫做JNINativeInterface的結構體,結構體中定義了很多數(shù)據(jù)類型,我們找到那個返回字符串的:

這里寫圖片描述

好的,那末接下來我們把我們的c代碼寫完,我們在jni目錄下創(chuàng)建1個叫first.c的文件:

#include<stdio.h> #include<jni.h> jstring Java_com_jay_example_firstndk_MainActivity_javaFromJNI(JNIEnv* env, jobject obj) { return (*env)->NewStringUTF(env, "First Blood~"); }

4.為項目添加NDK支持

工程右鍵->Android Tools ->Add Native Support輸入so庫名稱:

這里寫圖片描述

自己給so庫命名:

這里寫圖片描述

這個時候會看到,jni目錄下除我們自己編寫的c文件外,還多了兩個東東,xx.cpp和Android.mk文件,那個cpp可以直接刪掉,接著打開Android.mk件,修改下東西:

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := FirstNDK LOCAL_SRC_FILES := first.c include $(BUILD_SHARED_LIBRARY)

ps:其實這步可以直接在3就進行,會直接生成1個.cpp與Android.mk的文件的~

5.新建&配置1個Builder

右鍵Project->Properties->Builders->New,新建1個Builder,在彈出的對話框上面點擊Program,OK!如圖所示

這里寫圖片描述

雙擊打開,進行配置:

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

點擊肯定,OK,好了,接下來就能夠自定編譯代碼了~比如我們修改代碼后保存,他都會重新編譯下.so

這里寫圖片描述

6.調用了native方法的地方加載庫:

這里寫圖片描述

7.好了,把程序跑起來~

這里寫圖片描述

8.總結:

好了,第1個NDK程序就這樣完成了,中途磕磕碰碰遇到很多問題,總算是順利地跑起來了,下面歸納下大概步驟:

  • 創(chuàng)建1個普通NDK工程
  • 聲明native方法
  • 創(chuàng)建Jni文件夾,可以自己寫個.c或.cpp文件,或直接第4步直接生成1個.cpp與Android.mk文件
  • 為項目添加NDK支持
  • 新建&配置1個Builder
  • 調用了native方法的地方加載庫(System.loadLibrary(xxx))
  • 運行程序~~

好了,大概進程就如上面所述~可能還有其他快捷的創(chuàng)建方法吧,后續(xù)遇到的話在給大家介紹哈~最后附上弄這個程序時遇到的1些問題和解決方法!

9.遇到的問題

1.運行后程序直接死掉- -,后來查log發(fā)現(xiàn)是c那里方法名寫錯了,直接報方法找不到!
解決方法:嚴格依照下述規(guī)定寫
返回值類型 Java_包名_類名_native方法名(JNIEnv* env, jobject obj)

2.出現(xiàn)這樣的提示:
Android NDK: WARNING: APP_PLATFORM android⑴7 is larger than android:minSdkVersion 14 in ./AndroidManifest.xml
解決方法:
android-ndk-r8e/build/core/add-application.mk第128行把__ndk_warning改成__ndk_info;然后重新build1次項目便可消除毛病。
或,直接寫成這樣…我們公司是這樣做的…感覺這樣雖然不報錯,但是不好…

這里寫圖片描述

3.用c來寫的出現(xiàn):Method ‘NewStringUTF’ could not be resolved
就是找不到方法,真奇葩…
解決方法:

這里寫圖片描述

比如我的路徑是:
E:NDKandroid-ndk-r10dplatformsandroid⑴7arch-armusrinclude

4.如果你用的是.cpp的話,出現(xiàn)3的問題
解決方法:為供Java調用的c++函數(shù)前加入extern “C” 修飾
另外輸出字符串的語句也是不1樣的:
(*env)->Method(env, XXX)改成env->Method(XXX)便可.

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产伊人影院 | 成人影院一区二区三区 | 欧美乱妇高清无乱码亚洲欧美 | 国产高清精品久久久久久久 | 91精品久久久久亚洲国产 | 欧美午夜三级我不卡在线观看 | 一级aa免费视频毛片 | 伊人色影院 | xx在线视频| 亚洲天堂久久新 | 亚洲免费福利视频 | 91色图| 国产精品亚洲欧美大片在线看 | 亚洲视频在线一区二区三区 | 亚洲综合精品一区二区三区中文 | 三级黄在线观看 | 中国性xxxxxbbbbb | 一级做a爰片性色毛片小说 一级做a爰片性色毛片新版的 | 黑人群姣中国妞在线观看 | 伊人久综合 | 成年人在线视频网站 | 波多野结衣久久一区二区 | 逼逼爱爱| 国产大学生露脸激情 | 久久精品国产免费 | 亚洲女人天堂网 | 欧美巨大xxxx做受孕妇视频 | 中文字幕yellow在线资源 | 亚洲欧洲春色校园另类小说 | 春色视频网站 | 国产亚洲精品资源一区 | 狍和美女一级aa毛片 | 国产成人高清亚洲一区91 | 亚洲综合图 | 成人影院一区二区三区 | 亚洲在线网址 | 国产片在线观看 | 亚洲国产精品二区久久 | avtt亚洲一区中文字幕 | 亚洲三级a | 婷婷色一二三区波多野衣 |