色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > NDK環(huán)境配置

NDK環(huán)境配置 時(shí)間:2018-09-25      來源:未知

Android 原生開發(fā)包NDK(Native Delopment kits)將用于Android平臺上的C++開發(fā)。Android NDK是Android軟件開發(fā)包(SDK)的相關(guān)工具集,用來擴(kuò)展Android SDK的功能,從而是開發(fā)人員能夠使用機(jī)器代碼生成的編程語言(如C、C++和匯編語言)實(shí)現(xiàn)一些對代碼行要求較高的模塊并將這些模塊嵌入到Android應(yīng)用程序中。

眾所周知,Android程序運(yùn)行在Dalvik虛擬機(jī)中,NDK允許用戶使用類似C / C++之類的原生代碼語言執(zhí)行部分程序。

Android NDK不是一個(gè)單獨(dú)的工具:它是一個(gè)包含API、交叉編譯器、鏈接程序、調(diào)試器、構(gòu)建工具、文檔和實(shí)例應(yīng)用程序的綜合工具集。

1、以下是Android NDK的一些主要組件:

ARM x86和MIPS交叉編譯器

構(gòu)建系統(tǒng)

java原生接口頭文件

C庫

Math庫

POSIX線程

小的C++庫

Zlib壓縮庫

Android 日志庫

Android 像素緩沖區(qū)庫

Android原生應(yīng)用APIs

OPENGL ES 3D圖形庫

OPENSL ES 原生音頻庫

OpenMAX AL 小支持

2、Android NDK的結(jié)構(gòu)

ndk-build :該shell腳本是Android NDK 構(gòu)建系統(tǒng)的起始點(diǎn),

ndk-gdb:該shell腳本允許用GNU調(diào)試器調(diào)試原生組件。(第五章)

ndk-stack:該shell腳本可以幫助分析原生組件崩潰時(shí)的堆棧追蹤號(第五章)

build:該目錄包含Android NDK構(gòu)建系統(tǒng)的所有模塊,本章將詳細(xì)介紹Android ndk構(gòu)建系統(tǒng)

platforms:該目錄包含了支持不同Android目標(biāo)版本的頭文件的庫文件

Androidndk構(gòu)建系統(tǒng)會根據(jù)具體的Android八本自動引用這些文檔。

samples:該目錄包含了一些實(shí)例應(yīng)用程序,這些程序可以體現(xiàn)Android NDK的特性,對應(yīng)學(xué)習(xí)android ndk的特性會很有幫助

source:

該目錄包含目前Android NDK 支持不同目標(biāo)機(jī)體系機(jī)構(gòu)的交叉編譯器,Android 目前支持ARM X86 MIPS等體系結(jié)構(gòu)

Android NDK 的構(gòu)建系統(tǒng)根據(jù)選定的體系結(jié)構(gòu)使用不同的交叉編譯器。

3、為何要用到NDK?

概括來說主要分為以下幾種情況:

1. 代碼的保護(hù),由于apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。

2. 在NDK中調(diào)用第三方C/C++庫,因?yàn)榇蟛糠值拈_源庫都是用C/C++代碼編寫的。

3. 便于移植,用C/C++寫的庫可以方便在其他的嵌入式平臺上再次使用。

JNI是Java Native Interface的縮寫,它提供了若干的API實(shí)現(xiàn)了Java和其他語言的通信(主要是C&C++)。從Java1.1開始,JNI標(biāo)準(zhǔn)成為java平臺的一部分,它允許Java代碼和其他語言寫的代碼進(jìn)行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設(shè)計(jì)的,但是它并不妨礙你使用其他編程語言,只要調(diào)用約定受支持就可以了。使用java與本地已編譯的代碼交互,通常會喪失平臺可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的。例如,使用一些舊的庫,與硬件、操作系統(tǒng)進(jìn)行交互,或者為了提高程序的性能。JNI標(biāo)準(zhǔn)至少要保證本地代碼能工作在任何Java 虛擬機(jī)環(huán)境下。

JNI是java程序設(shè)計(jì)語言功能的強(qiáng)特征,它允許java類的某些方法原生實(shí)現(xiàn),同時(shí)讓他們能夠像普通的java方法一樣被調(diào)用和使用。這些原生方法也可以使用java對象,使用方法與java代碼使用java對象的方法相同。原生方法可以創(chuàng)建新的java對象或者使用java應(yīng)用程序創(chuàng)建的對象,這些java應(yīng)用程序可以檢查,修改和調(diào)用這些對象的方法執(zhí)行任務(wù)。

JNI的副作用:

一旦使用JNI,JAVA程序就喪失了JAVA平臺的兩個(gè)優(yōu)點(diǎn):

1、程序不再跨平臺。要想跨平臺,必須在不同的系統(tǒng)環(huán)境下重新編譯本地語言部分。

2、程序不再是絕對安全的,本地代碼的不當(dāng)使用可能導(dǎo)致整個(gè)程序崩潰。一個(gè)通用規(guī)則是,你應(yīng)該讓本地方法集中在少數(shù)幾個(gè)類當(dāng)中。這樣就降低了JAVA和C之間的耦合性。

什么場合下應(yīng)該使用JNI:

當(dāng)你開始著手準(zhǔn)備一個(gè)使用JNI的項(xiàng)目時(shí),請確認(rèn)是否還有替代方案。像上一節(jié)所提到的,應(yīng)用程序使用JNI會帶來一些副作用。下面給出幾個(gè)方案,可以避免使用JNI的時(shí)候,達(dá)到與本地代碼進(jìn)行交互的效果:

1、JAVA程序和本地程序使用TCP/IP或者IPC進(jìn)行交互。

2、當(dāng)用JAVA程序連接本地?cái)?shù)據(jù)庫時(shí),使用JDBC提供的API。

3、JAVA程序可以使用分布式對象技術(shù),如JAVA IDL API。

這些方案的共同點(diǎn)是,JAVA和C處于不同的線程,或者不同的機(jī)器上。這樣,當(dāng)本地程序崩潰時(shí),不會影響到JAVA程序。

下面這些場合中,同一進(jìn)程內(nèi)JNI的使用無法避免:

1、程序當(dāng)中用到了JAVA API不提供的特殊系統(tǒng)環(huán)境才會有的特征。而跨進(jìn)程操作又不現(xiàn)實(shí)。

2、你可能想訪問一些己有的本地庫,但又不想付出跨進(jìn)程調(diào)用時(shí)的代價(jià),如效率,內(nèi)存,數(shù)據(jù)傳遞方面。

3、JAVA程序當(dāng)中的一部分代碼對效率要求非常高,如算法計(jì)算,圖形渲染等。

總之,只有當(dāng)你必須在同一進(jìn)程中調(diào)用本地代碼時(shí),再使用JNI。

JNI的演化:

JDK1.0包含了一個(gè)本地方法接口,它允許JAVA程序調(diào)用C/C++寫的程序,許多第三方的程序和JAVA類庫。如:java.lang,java.io,java.net等都依賴于本地方法來訪問底層系統(tǒng)環(huán)境的特征。

不幸的是,JDK1.0中的本地方法有兩個(gè)主要問題:

1、本地方法像訪問C中的結(jié)構(gòu)(structures)一樣訪問對象中的字段。盡管如此,JVM規(guī)范并沒有定義對象怎么樣在內(nèi)存中實(shí)現(xiàn)。如果一個(gè)給定的JVM實(shí)現(xiàn)在布局對象時(shí),和本地方法假設(shè)的不一樣,那你就不得不重新編寫本地方法庫。

2、因?yàn)楸镜胤椒ǹ梢员3謱VM中對象的直接指針,所以,JDK1.0中的本地方法采用了一種保守的GC策略。

JNI的誕生就是為了解決這兩個(gè)問題,它可以被所有平臺下的JVM支持:

(1)每一個(gè)JVM實(shí)現(xiàn)方案可以支持大量的本地代碼。

(2)開發(fā)工具作者不必處理不同的本地方法接口。

(3)本地代碼可以運(yùn)行在不同的JVM上面。

JDK1.1中第一次支持JNI,但是,JDK1.1仍在使用老風(fēng)格的本地代碼來實(shí)現(xiàn)JAVA的API。這種情況在JDK1.2下被徹底改變成符合標(biāo)準(zhǔn)的寫法。

JNI的設(shè)計(jì)目的:

標(biāo)準(zhǔn)的java類庫可能不支持你的程序所需的特性。或許你已經(jīng)有了一個(gè)用其他語言寫成的庫或程序,而你希望在java程序中使用它。

你可能需要用底層語言實(shí)現(xiàn)一個(gè)小型的時(shí)間敏感代碼,比如匯編,然后在你的java程序中調(diào)用這些功能。

1、AndroidC++開發(fā)環(huán)境主要有以下幾部分構(gòu)成:

Android軟件開發(fā)包(SDK)

Android原生開發(fā)包(NDK)

Ecplise上的Android開發(fā)工具 ADT插件

java開發(fā)包

GNU Make構(gòu)建系統(tǒng)

ecplise IDE

2、

(1)首先我們安裝java環(huán)境

(2)安裝ecplise開發(fā)環(huán)境

(3)給ecplise添加ADT插件

(4)安裝SDK,NDK與ecplise進(jìn)行關(guān)聯(lián)

(5)GNU make構(gòu)建系統(tǒng)

3、配置開發(fā)環(huán)境

在ecplise中配置SDK,NDK

為了先給大家展示一下什么樣的項(xiàng)目為一個(gè)ndk項(xiàng)目,我們選擇在samples目錄下包含了Android NDK安裝程序自帶的示例應(yīng)用程序。現(xiàn)在可以使用其中的示例應(yīng)用程序。

導(dǎo)入方式:File-->import-->Android-->Existing Android code into workspace導(dǎo)入NDK路徑下的samples-->helloJni項(xiàng)目

成功如下所示:

導(dǎo)入之后,只將項(xiàng)目作為Android java 項(xiàng)目導(dǎo)入,為了讓構(gòu)建流包含原生組件,需要手動添加原生支持,添加方式:

項(xiàng)目上右鍵--->Android ToolS--->add native support-->后點(diǎn)擊確定

添加成功:之后打開模擬器運(yùn)行

運(yùn)行方式:

在項(xiàng)目上右鍵-->run as--->Android application

上一篇:使用KGDB在QEMU上調(diào)試內(nèi)核

下一篇:NDK項(xiàng)目開發(fā)實(shí)例

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號-5京公海網(wǎng)安備11010802025203號

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 亚洲欧美精品一区二区| 欧美高清性猛交| 亚洲永久免费观看| 青青久久av北条麻妃海外网| 九九热这里只有精品6| 在线电影中文日韩| 日韩精品免费视频| 亚洲国产精彩中文乱码av在线播放 | 欧美大尺度激情区在线播放 | 91精品国产成人| 欧美日韩国产在线| 欧美成人在线免费视频| 日韩在线观看免费高清| 中文字幕亚洲国产| 原创国产精品91| 中文字幕成人精品久久不卡| 亚洲精选一区二区| 日韩精品福利在线| 亚洲精品国产拍免费91在线| 亚洲电影天堂av| 日韩精品福利在线| 亚洲午夜久久久影院| 国产亚洲免费的视频看| 在线日韩中文字幕| 久久精品国产欧美亚洲人人爽| 日韩在线观看免费高清完整版| 亚洲视频在线观看视频| 亚洲色图13p| 在线观看久久av| 精品久久久999| 欧美精品一区二区免费| 欧美性xxxx在线播放| 久久久亚洲欧洲日产国码aⅴ| 97精品视频在线播放| 国产成+人+综合+亚洲欧美丁香花| 国产福利成人在线| 成人网欧美在线视频| 亚洲免费av网址| 日韩性生活视频| 欧美国产乱视频| 日本91av在线播放|