1. android studio怎麼自動配置ndk環境
第一步:下載Android NDK。
第二步:為project設置ndk路徑,在local.properties中,添加ndk.dir=<path-to-ndk>。
第三步:修改build.gradle文件。
第四步:創建jni文件。
第五步:創建測試類文件。
第六步:創建.h文件。創建.cpp文件。
第七步:進行測試
2. 「Android NDK 」是什麼,在什麼情況下使用
Android 應用是在dalvik虛擬機中運行的。NDK可以讓你使用本地代碼語言來開發應用,比如說C/C++,這種方法對某些類型的應用的是有好處的,可以充分利用本地代碼和在某些情況下加速代碼的執行。
對於絕大多數的應用來說,使用NDK並不是一個明智的選擇,作為一個開發者,我們需要衡量它所帶來的好處和缺點。使用本地代碼並不一定可以使性能得到優化,但是通常使得應用代碼變得復雜。一般來說,我們將應用中關鍵部分的代碼用C/C++寫,而不能由於我們習慣於用C/C++開發而把所有的代碼都用C/C++來實現。
有下面這些特點的應用可以考慮使用NDK:
1 獨立的,不和其他應用有關系的
2 頻繁佔用CPU但是申請的內存空間不是很大的操作,像信號的處理,物體的模擬等等
簡單的用C/C++重寫我們的代碼是不會帶來很大的性能提升的。
在考慮是否採用本地代碼開發的時候,要結合應用的實際需求並且看看Android 的framework層是否提供了我們需要的API,但是用NDK可以充分利用本地已經有的代碼。
Android framework提供下面兩種方法來使用本地代碼:
1 在Android framework的框架下面開發應用,使用JNI的方法來使用NDK本地方法提供的API。這樣的好處就是我們可以很好的利用的Android的framework提供的框架,但是需要編寫本地具體實現的代碼。這樣的APK可以在Android 1.5及其之後的版本上面運行。
2 寫一個本地的Activity,在本地代碼中實現生命回調函數,AndroidSDk提供了
類,這個類可以方便的讓你在你的本地代碼中實現回調函數(OnCreate,OnPause),從而當這些事件發生的時候處理。
3. 如何在Ubuntu下搭建Android NDK開發環境
在Ubuntu 系統下搭建Android NDK 開發環境分以下步驟:
到官網下載NDK版本。
解壓到 ~/bin 目錄下。
配置NDK環境變數,打開 ~/.bashrc文件: $sudovim~/.bashrc 在文件最後一行添加一行如下指令:exportPATH=$PATH:~/bin/android-ndk-r7b
保存關閉bashrc 文件,並運行ndk-build-v 查看NDK版本信息。
如果出現NDK版本信息,就表示NDK安裝成功了。
4. Android開發之Android開發環境搭建涉及的工具和開發包都有哪些
一、開發環境資料下載
1、JDK:下載JDK,JDK提供java編譯環境,新版本的JDK自動包含了JRE,所以不用單獨下載JRE了,JRE提供Java運行環境。
2、Eclipse:下載Eclipse,Eclipse是Java的IDE開發工具。
3、Android SDK:下載Android SDK,Android SDK提供Android應用開發環境和工具。
4、ADT:下載ADT,ADT是Eclipse的一個Android開發工具插件,Android的SDK需要配合ADT使用。
5、Android NDK:下載Android NDK,Android NDK提供Android本地C/C++開發環境和工具。實際上,Andriod環境安裝並不需要一一下載上面介紹的那些個工具包。Google是個好同學,它為我們打包了一個開發工具集合——ADT-BUNDLE集成包,裡麵包含了Eclipse、Android SDK、Android ADT,下載ADT-BUNDLE。
5. 如何使用android的ndk建立native的開發環境
從網上看了一篇使用andriod的toolchain在cygwin上來建立android的開發環境,但是在vista上編譯始終失敗,在xp上能夠成功。但是編譯的時間比較長,而且對於新手來說也比較麻煩,難道就沒有簡單的方法嗎?google已經把andriod的ndk已經放出來了,所以我就想著打它的主意了,把它配置一下,就能來開發c的程序了。旁邊小伙肯定笑了,「搞啥?,有病啊,ndk就是一個開發native code的環境。」大哥,我當然知道了,雖然使用ndk來開發native code相對容易,但是它的.mk文件我看的是雲里霧里,我本來想調用自己寫的另外一個so庫,都不知道在.mk文件里如何寫,我現在也懶的去看ndk裡面的mk文件,等哪天(哪天?天曉得是哪一天)有空了好好研究一下。好了,閑話少說,開練吧。首先安裝cygwin,這個網上的教程多的是,就不說了,接著下載android ndk,這個在andriod的官網上就有了,然後下載一個從android模擬器里取system lib的工具busybox,然後調用命令
$adb push busybox /dev/sample/busybox
$adb shell chmod 777 /dev/sample/busybox
$adb shell ./dev/sample/busybox tar -cf /dev/sample/libs.tar /system/lib
$adb pull /dev/sample/libs.tar libs.tar
這樣就將模擬器下的 /system/lib 目錄的所有庫(so)文件打包並下載下來了,解壓libs.tar就得到了我們所需要的所有庫文件。
接著將所有的文件 到 $(NDK)/build/prebuilt/windows/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1,好了,這個時候基本的配置工作就結束了,怎麼樣簡單多了吧。
接著編寫一個簡單的c文件 tutorial01.c
#include <stdio.h>
int getinformation()
{
return 0;
}
然後編寫一個Makefile文件
CC = /cygdrive/f/software/android/android-ndk-1.5_r1/build/prebuilt/windows/arm-eabi-4.2.1/bin/arm-eabi-gcc
CFLAGS = -g -O2 -fPIC -DANDROID -I ./ -I ../ -I F:/software/android/android-ndk-1.5_r1/build/platforms/android-1.5/arch-arm/usr/include
SDFLAGS = -nostdlib -Wl,-T,armelf.xsc -Wl,-soname,$@ -Wl,-shared,-Bsymbolic -lc
CRT_OBJS= -lz -lm
all: libtutorial01.so
libtutorial01.so: tutorial01.o
$(CC) $(SDFLAGS) -o $@ tutorial01.o $(CRT_OBJS)
tutorial01.o: tutorial01.c
然後make,這個時候會報錯 can't find "armelf.xsc", 在ndk的目錄里搜索一下,搜到之後 到$(NDK)/build/prebuilt/windows/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1,然後make,成功。這樣一個簡單的so文件就生成了,這個時候如果想在android的虛擬機上運行,我們還需要給它包裝一下。再編寫一個文件test01.c,在這里是使用dl動態載入so文件,靜態載入始終有問題,搞不清楚android是如何搜索目錄,而且現在只能用絕對路徑,這個問題還得仔細研究研究。
#include <string.h>
#include <jni.h>
jint
Java_com_example_testffmpeg_testffmpeg_getinformation( JNIEnv* env,
jobject thiz )
{
void* filehandle = dlopen("/data/data/com.example.test/lib/libtutorial.so", RTLD_LAZY );
int ll = -1;
if(filehandle)
{
int( * getinformation ) ();
getinformation = dlsym(filehandle, "getinformation");
if( getinformation )
{
ll = getinformation();
}
else
{
ll = -3;
}
dlclose(filehandle);
filehandle=0;
}
else
{
ll = -2;
}
return ll;
}
同樣再來一個Makefile文件
CC = /cygdrive/f/software/android/android-ndk-1.5_r1/build/prebuilt/windows/arm-eabi-4.2.1/bin/arm-eabi-gcc
CFLAGS = -g -O2 -fPIC -DANDROID -I ./ -I ../ -I F:/software/android/android-ndk-1.5_r1/build/platforms/android-1.5/arch-arm/usr/include
SDFLAGS = -nostdlib -Wl,-T,armelf.xsc -Wl,-shared,-Bsymbolic -Wl,-soname,$@ -lc -L ../tutorial
CRT_OBJS= -lz -lm -ldl
all: libtest01.so
libtest01.so: test01.o
$(CC) $(SDFLAGS) -o $@ test01.o $(CRT_OBJS)
ok, make一下成功。好了,接下來使用andriod的sdk寫一個簡單的activity, testapp來測試其運行情況,以下是test01.java的代碼。
package com.example.test;
import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
public class test01 extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/* Create a TextView and set its content.
* the text is retrieved by calling a native
* function.
*/
TextView tv = new TextView(this);
// tv.setText( stringFromJNI() );
Integer ll = getinformation();
String lls = ll.toString();
tv.setText(lls);
setContentView(tv);
}
/* A native method that is implemented by the
* 'hello-jni' native library, which is packaged
* with this application.
*/
public native int getinformation();
/* this is used to load the 'hello-jni' library on application
* startup. The library has already been unpacked into
* /data/data/com.example.HelloJni/lib/libhello-jni.so at
* installation time by the package manager.
*/
static {System.loadLibrary("test");
}
}
在eclipse中運行,在模擬器上顯示0,就表示成功了。
6. 如何在Ubuntu下搭建Android NDK開發環境
NDK下載
首先需要下載NDK編譯工具,目前官方最新的NDK版本是r11c,為了保證穩定性,我下的是r11b。
配置環境變數
將下載下來的文件進行解壓,我這里解壓到~/android/android-ndk-r11b。
然後在~/.profile文件中加入如下內容,將NDK目錄加入到PATH中:
#set ndk environment
export NDK_HOME=~/android/android-ndk-r11b
export PATH=$PATH:$NDK_HOME
最後執行「source ~/.profile」使之生效。
配置好環境變數之後,需要驗證一下是否搭建成功,在命令行下輸入ndk-build,有如下提示則表示搭建成功了。
7. 如何從零開始創建Android NDK應用
本文主內容:
1、 Android NDK 安裝
2、 安裝Cygwin與使用NDK編譯
3、 在Eclipse中集成C/C++開發環境CDT
4、 安裝Sequoyah插件
5、 JNI編譯環境配置
本文建立在已經完成Android開發環境搭建的基礎上。其基礎環境至少需要包含以下內容:
1、 JDK
2、 Eclipse
3、 Android SDK and ADT
可以參考我之前的「Android開發環境搭建」。
一、Android NDK 安裝與配置
下載Android NDK。下載地址:http://developer.android.com/tools/sdk/ndk/index.html
下載後解壓縮到你的工作目錄,例如:D:\Java\android-ndk-r8,結果如下圖:
注意:samples下麵包含幾個實例開發演示項目,第一次接觸NDK開發,建議先從示例開始。
docs內是技術文檔,英語能力強的可以研究研究。
二、安裝Cygwin與使用NDK編譯
由於NDK開發大都涉及到C/C++在GCC環境下編譯、運行,所以在Windows環境下,需要用Cygwin模擬Linux編譯環境。
下載:
Cygwin的下載地址:http://www.cygwin.com/
點擊右上角的「setup.exe」即可下載。
安裝:
第一步:運行setup.exe程序,直接點擊Next進入下一步。
第二步:選擇安裝方式。第一次可以採用Direct Connection在線下載安裝,如有現成的離線包,可以選擇離線安裝(Install from Local Directory)。
第三步:選擇安裝目錄。比如D:\Java\Cygwin,注意此目錄是指Cygwin最終的安裝目錄,不是下載文件螞皮數暫存目錄。
第四步:設置本地包暫存路徑。暫存目錄默認是放到setup.exe的同級目錄下,建議放到指定的文件夾,如D:\Cygwin_install_file。安裝完成後把這個文件夾打包備份,以後再配置時不用重新下載。
第五步:設置網路連接方式。這個目前河蟹沒爬過來,選第一個即可。
第六步:選悶首擇下載站點地址。據說國內163站點的速度不錯,我也是用的這個。
第七步:等待載入安裝項載入,選擇安裝項。點擊Devel-Default,使之變成Devel-Install,展開後可以看到其下的子項被選中了(網上多數教程都說選中某12個包,找起來太坑爹了,直接全下載了吧,全選多了150M左右)。此界面其他設置都不用動。
第八步:等待下載完成。下載完成時間決定於你選擇的安裝包數量及網路連接速度,安裝我安裝的版本,約983M,下載完成後會自動握亂安裝到上文設置的安裝目錄,安裝也要時間的,總時間較長,去吃個飯沒啥問題。
提醒:第四步的備份建議,盡量去做。如果有備份,第二步中選擇離線安裝。
驗證:
運行安裝目錄下的「Cygwin.bat」,第一次運行時,它會自動創建用戶信息,用戶信息存放在「.\Cygwin\home」中。
在運行「Cygwin.bat」打開的命令行窗口輸入:「cygcheck -c cygwin」命令,會列印出當前Cygwin的版本和運行狀態,如果status是ok的話,則cygwin運行正常。
分別輸入:「make –v」和,「gcc –v」命令如果檢測成功,會有make和gcc相關版本信息列印出來。
設置NDK路徑:
在windows的系統環境變數中添加NDK的路徑。使用「/cygdrive/d/Java/android-ndk-r8」這種Linux風格路徑,如果使用Windows下的「D:\Java\android-ndk-r8」,Cygwin在編譯時會發出警告。
運行Cygwin命令行,可以直接使用此環境變數,當然也可以手動的cd到該目錄:
使用NDK編譯程序:
現在我們用安裝好的NDK來編譯一個NDK提供的sample程序hello-jni(我的目錄位於:D:\Java\android-ndk-r8\samples\hello-jni)。
第一步:運行Cygwin,配置環境變數後可輸入「cd $ndk/samples/hello-jni/」,未配置則輸入命令「cd /cygdrive/d/java/android-ndk-r8/samples/hello-jni」,進入到「hello-jni」工程目錄。
第二步:編譯。輸入命令「$ndk/ndk-build」命令即可編譯。ndk-build是調用ndk的編譯程序。
關於下面的錯誤,我沒遇到,但是前人有總結,記錄如下:
錯誤:Android NDK: Host 'awk' tool is outdated。
解決方法:打開目錄「D:\Java\android-ndk-r8\prebuilt\windows\bin\」,刪除awk.exe(為保險起見請先備份)。
第三步:到」…/hello-jni/libs/armeabi「目錄下看有沒有生成的.so文件,如果有,你的ndk就運行正常啦!
導入NDK的hello-jni示例到Eclipse中:
第一步:在Eclipse中新建一個Android工程HelloJni。在Create Android Project時勾選「Create project from existing source」,Location中填「D:\Java\android-ndk-r8\samples\hello-jni」 (注意:在選擇API level時需要選擇1.5或更高的版本)。
第二步:直接以Android Aplication運行。這里要注意,你之前在使用NDK編譯程序時要把這個hello-jni編譯過並產生了.so文件,此處才能運行起來。
三、在Eclipse中集成C/C++開發環境CDT
CDT的安裝可以使我們在一個工程中,同時開發基於C/C++的Native代碼和基於Java語言的殼,之後的配置還可以使得一次編譯兩部分代碼。
下載:
下載地址:http://www.eclipse.org/cdt/downloads.php
說明:
Eclipse C/C++ IDE Indigo SR2:是帶CDT的Eclipse開發環境。
p2 software repository:在線安裝的地址。(似乎被河蟹爬了)
cdt-master-8.0.2.zip:這個是CDT的離線安裝包。(推薦使用這個,保留離線包,復用)
離線安裝:
Eclipse -> Help -> Install New Software,點擊add。Name:隨意,建議使用好記的「CDT_版本」。Location:點擊Archive,定位到下載的「cdt-master-8.0.2.zip」文件。
錯誤:
如果Location的下面出現「Duplicate location」錯誤,請到Window -> preferences -> Install/Update -> Avaliable Software Site中找到該條,remove之。
驗證:
安裝完成後,在Eclispe中新建一個項目,如果出現了C/C++項目,則表明CDT插件安裝成功了。
四、安裝Sequoyah插件
Sequoyah插件用於設置Android工程對Native開發的支持。
官方網址:http://www.eclipse.org/sequoyah/downloads/
在線安裝:
官網提供了用於在線安裝的Update Site地址以及安裝包的下載地址。貌似安裝包才1M多,在線安裝也沒被河蟹爬過,直接在線安裝了。勾選全部列出的可安裝項並完成安裝。
Location:http://download.eclipse.org/sequoyah/updates/2.0/
注意:
在安裝界面不要勾選「Group items by category」復選框,默認是勾選的,出現了列表為空(There are no categorized items)的情況。
配置:
安裝完Sequoyah插件後,為Android配置NDK路徑。
在「window –> preferences ->Android -> 本機開發」中添加NDK的路徑。
驗證:
右鍵之前建立的「HelloJni」項目,在「Android Tools」選項中包含「Add Native Support…」選項即成功。
五、JNI編譯環境配置
仍舊以之前建立的「HelloJni」為例,到目前為止,如果我們修改「/HelloJni/jni/hello-jni.c」文件,動態鏈接庫libhello-jni.so文件卻不會被重新編譯生成。這是因為我們沒有給JNI項目添加它需要的編譯配置和依賴庫。現在我們來配置它。
第一步:轉換工程。點擊「文件 -> 新建 -> 其他」(快捷鍵:Ctrl+N)。選擇「C/C++」下的「Convert to a C/C++ Project(Adds C/C++ Nature)」。進入「下一步」。
第二步:選中你剛才建的「HelloJni」工程,下面左邊選「Makefile project」右邊選「Cygwin GCC」。確定後提示的「透視圖」不清楚是什麼,點擊「是」即可。
第三步:在「HelloJni」工程上右鍵,選擇「屬性」。配置「C/C++ Build」和「C/C++ General -> Paths and Symbols」。
C/C++ Build:點擊「C/C++ Build」,在右邊的「Builder Settings」中去掉默認勾選的「Use default build command」復選框。設置Build command為「bash D:\Java\android-ndk-r8\ndk-build」。
C/C++ General -> Paths and Symbols:在Includes下add新的GNU C依賴路徑。此「HelloJni」工程需要「D:\Java\android-ndk-r8\platforms\android-8\arch-arm\usr\include」即可,以後根據不同項目選擇不同的依賴庫。
驗證:
將「/HelloJni/jni/hello-jni.c」中的字元串「Hello from JNI !」如改為「Hello JNI from Baron!」,運行後在模擬器上輸出的字元串改變即說明配置成功。
8. 如何在Ubuntu下搭建Android NDK開發環境
1 搭建Android SDK開發環境
2 下載NDK開發包
3打開官網: 下載NDK 開發包,當前最新版本是r7b
下載解壓到 ~/bin 目錄下,
3 配置NDK環境參數
打開 ~/.bashrc文件: