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

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > NDK淺嘗(1)

NDK淺嘗(1)

來源:程序員人生   發布時間:2016-03-29 09:16:36 閱讀次數:2538次

First JNI Project

這篇博客主要針對Android NDK開發做入門級論述,所觸及到的主要有以下幾點:

  • Android NDK開發簡介
  • JNI簡介
  • 工具介紹
  • 構建HelloJNI項目

1.Android NDK開發簡介
Android NDK 是在SDK前面又加上了“原生”2字,即Native Development Kit,因此又被Google稱為“NDK”。盡人皆知,Android程序運行在Dalvik虛擬機中,NDK允許用戶使用類似C / C++之類的原生代碼語言履行部份程序。NDK包括了:

  1. 從C / C++生成原生代碼庫所需要的工具和build files
  2. 將1致的原生庫嵌入可以在Android裝備上部署的利用程序包文件
  3. 將1致的原生庫嵌入可以在Android裝備上部署的利用程序包文件(application packages files ,即.apk文件)中。
  4. 支持所有未來Android平臺的1些列原生系統頭文件和庫

2.JNI簡介
JNI是Java Native Interface的縮寫,它提供了若干的API實現了Java和其他語言的通訊(主要是C&C++)。從Java1.1開始,JNI標準成為java平臺的1部份,它允許Java代碼和其他語言寫的代碼進行交互。JNI1開始是為了本地已編譯語言,特別是C和C++而設計的,但是它其實不妨礙你使用其他編程語言,只要調用約定受支持就能夠了。使用java與本地已編譯的代碼交互,通常會喪失平臺可移植性。但是,有些情況下這樣做是可以接受的,乃至是必須的。例如,使用1些舊的庫,與硬件、操作系統進行交互,或為了提高程序的性能。JNI標準最少要保證本地代碼能工作在任何Java 虛擬機環境下。更多相干細節參見百度百科


3.工具介紹

  1. NDK
  2. SDK
  3. Android Studio 1.4
    稍后將會用專頁同享各項軟件的下載鏈接及安裝。

4.構建HelloJNI項目

等不到我開發環境構建的兄弟們可以先根據其他博客自己搭建環境,相對而言環境相干的教程是比較多的,本篇博客的主要目的在于引導大家在最新環境上入手JNI開發:
第1步: 新建Android項目
新建的Android項目路徑以下圖所示:
這里寫圖片描述
第2步:
添加JNI文件莢
右鍵->new->Folder->JNI Folder,添加后文件目錄如圖所示:
這里寫圖片描述
第3步:
在jni文件夾上右鍵new ->file,命名為Android.mk,同上再新建1個hello-jni.cpp文件。Android.mk文件內容以下:

#1個Android.mk 文件首先必須定義好LOCAL_PATH變量。它用于在開發樹中查找源文件。在這個例子中,宏函數’my-dir’, 由編譯系統提供,用于返回當前路徑(即包括Android.mk file文件的目錄) #CLEAR_VARS由編譯系統提供,指定讓GNU MAKEFILE為你清除許多LOCAL_XXX變量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...), #除LOCAL_PATH 。這是必要的,由于所有的編譯控制文件都在同1個GNU MAKE履行環境中,所有的變量都是全局的。 #編譯的目標對象,LOCAL_MODULE變量必須定義,以標識你在Android.mk文件中描寫的每一個模塊。名稱必須是唯1的,而且不包括任何空格。 #編譯系統會自動產生適合的前綴和后綴,換句話說,1個被命名為hello-jni的同享庫模塊,將會生成libhello-jni.so文件。 #如果你把庫命名為‘libhello-jni’,編譯系統將不會添加任何的lib前綴,也會生成 libhello-jni.so,這是為了支持來源于Android平臺的源代碼的Android.mk文件,如果你確切需要這么做的話。 #LOCAL_SRC_FILES變量必須包括將要編譯打包進模塊中的C或C++源代碼文件。注意,你不用在這里列出頭文件和包括文件,由于編譯系統將會自動為你找出依賴型的文件;僅僅列出直接傳遞給編譯器的源代碼文件就好。 #默許的C++源碼文件的擴大名是’.cpp’. 指定1個不同的擴大名也是可能的,只要定義LOCAL_DEFAULT_CPP_EXTENSION變量,不要忘記開始的小圓點(也就是’.cxx’,而不是’cxx’) #BUILD_SHARED_LIBRARY表示編譯生成同享庫,是編譯系統提供的變量,指向1個GNU Makefile腳本,負責搜集自從上次調用include $(CLEAR_VARS)以來,定義在LOCAL_XXX變量中的所有信息,并且決定編譯甚么,如何正確地去做。還有 BUILD_STATIC_LIBRARY變量表示生成靜態庫:lib$(LOCAL_MODULE).a, BUILD_EXECUTABLE 表示生成可履行文件。 # LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.cpp include $(BUILD_SHARED_LIBRARY)

hello-jni.cpp文件內容以下所示:

#include #include //extern "C" 標記該函數為C,由于JNI linker不能遵照從C++的命名規則,如果不加這1句,JNI linker會把它當作c++函數,在真機或摹擬器運行時報Unsatisfied Linker的毛病 extern "C" JNIEXPORT jstring JNICALL Java_com_tt_hellojni_MainActivity_NDKTestFromJNI( JNIEnv* env, jobject thiz ) { return env->NewStringUTF( "Hello from JNI !"); }

完成后,項目目錄以下:
這里寫圖片描述
接著打開MainActivity.java文件,修改其內容以下:

import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText(NDKTestFromJNI()); setContentView(tv); } public native String NDKTestFromJNI();// native聲明,表示這個方法來自Native層。實現進程已在native層實現了 static { System.loadLibrary("hello-jni");// 加載庫,前面的lib和后綴名不用寫 } }

第4步: 打開terminal,順次按圖中輸入命令操作
這里寫圖片描述
此時,我們就能夠看到生成的.so文件了哈,以下圖所示:
這里寫圖片描述
第5步: 履行項目,運行在真機上,界面上會顯示

Hello from JNI !



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 老黄网站在线观看免费 | 日本高清无吗免费播放 | 日韩免费高清一级毛片在线 | 精品一区二区三区 不卡高清 | 一级做a爰片久久毛片人呢 一级做a爰片久久毛片图片 | 亚洲欧美综合色区小说 | 日韩精品国产一区 | 一本到视频在线 | 中文在线日本免费永久18近 | 视频一区二区中文字幕 | 久久亚洲精品成人综合 | 欧美男男作爱gayxxx | 日韩免费观看一级毛片看看 | 亚洲欧美另类在线视频 | 在线高清国产 | tubexxxx做受88欧美 | 久久午夜一区二区 | 午夜免费视频网站 | 成人国产精品一级毛片视频 | 国产在线拍揄自揄视精品不卡 | 国产欧美在线观看视频 | 国产成人久久久精品毛片 | 国产亚洲精品欧美一区 | 国产精品 第1页 | 国产亚洲图片 | 欧美疯狂性受xxxxx另类 | 欧美一级做一级爱a做片性 欧美一级做一级做片性十三 | 亚洲福利| 91亚洲精品一区二区自 | 欧美精品久久久久久久免费观看 | 国内精品免费视频精选在线观看 | 日本黄大乳片免费观看 | 韩国三级在线观看我不卡 | 成人精品一区久久久久 | 最近中文字幕更新免费 | 茄子成视频片在线观看 | 亚洲欧洲春色校园另类小说 | 亚洲日产2021三区在线 | 国产欧美在线不卡 | 国产免费高清mv视频在线观看 | 在线观看视频中文字幕 |