日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android ndk 界面开发教程,Android NDK开发之入门教程

發布時間:2025/5/22 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android ndk 界面开发教程,Android NDK开发之入门教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JNI(Java Native Interface, Java本地化方法)使得Java能與其它語言(如C、C++)的動態庫進行交互。

在Android 項目中,經常看到地圖,統計,推送之類的第三方平臺都用了 JNI。

Android NDK(Android Native Development Kit)是一系列的開發工具,使用JNI編程,可以提高程序的執行效率,更方便地使用現存的開源庫。

至于配置NDK環境,無論是Cygwin還是最新的(無Cygwin),網上的教程太多了,這里不再贅述。

好了,下面開始寫一個入門Demo了……

首先新建一個Android project

項目右鍵點擊-Android Tools -Add Native Support

點擊Finish。

可以看到在Android項目中生成了一個JNI文件:

然后在MainActivity 中添加以下代碼:

public class MainActivity extends ActionBarActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

initJNI();

}

private void initJNI() {

TextView tv = new TextView(this);

tv.setTextSize(25);

tv.setBackgroundColor(Color.parseColor("#FFA07A"));

tv.setText(myTestNdk());

tv.setGravity(Gravity.CENTER);

setContentView(tv);

}

public native String myTestNdk();

static {

System.loadLibrary("TestBaseJNI");

}

}

System.loadLibrary("TestBaseJNI")表示VM去加載動態庫TestBaseJNI.so文件;

public native String myTestNdk(),這里的native表示這個方法由本地代碼定義,需要通過jni接口調用本地c/c++代碼,在java代碼中僅僅是聲明。

然后在TestBaseJNI.cpp添加以下代碼:

#include

#include

extern "C" {

jstring Java_com_example_testbase_MainActivity_myTestNdk(JNIEnv* env,

jobject thiz) {

return env->NewStringUTF("Hello NDK");

}

}

聲明加extern "C",是解決C++函數名問題;

"Java_com_example_testbase_MainActivity_myTestNdk",嚴格按照這種格式寫。開頭是Java,后面依次是包名,Activity名,方法名;

jstring表示返回類型,這段函數的功能就是返回字符串"Hello NDK"。

這時候可能會報錯。

Type 'jstring' could not be resolved

Method 'NewStringUTF' could not be resolved等等。

遇到這些類錯誤:

Type 'XXX' could not be resolved

Method ?'XXX' ' could not be resolved

常見的解決辦法:

右鍵->Properties,點擊C/C++ General展開,點擊Path and Symbols, 右側Includes,點擊Add,把NDK文件夾下的jni頭文件和相應的C++頭文件添加進來

這是我添加的兩個路徑:

F:\Installer\Programming\android-ndk32-r10b-windows-x86\android-ndk-r10b\toolchains\mipsel-linux-android-4.8\prebuilt\windows\lib\gcc\mipsel-linux-android\4.8\include

F:\Installer\Programming\android-ndk32-r10b-windows-x86\android-ndk-r10b\platforms\android-19\arch-arm\usr\include

運行成功界面:

好了,我們再通過手動建JNI的方式來實現上面的Demo

首先新建一個Android project

根目錄建立JNI文件夾,再分別創建Android.mk和hello-jni.c文件

在MainActivity 中添加以下代碼:

public class MainActivity extends ActionBarActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

TextView myTextView = new TextView(this);

myTextView.setText(stringTestNdk());

setContentView(myTextView);

}

public native String stringTestNdk();

static {

System.loadLibrary("hello-jni");

}

}

hello-jni.c中添加:

#include

#include

/* This is a trivial JNI example where we use a native method

* to return a new VM String. See the corresponding Java source

* file located at:

*

* apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java

*/

jstring Java_com_example_testndk_MainActivity_stringTestNdk(JNIEnv* env,

jobject thiz) {

return (*env)->NewStringUTF(env, "Hello Test NDK !");

//return env->NewStringUTF("Hello NDK");

}

Android.mk配置中添加:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hello-jni

LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

LOCAL_MODULE表示編譯的動態庫名稱

LOCAL_SRC_FILES 表示源代碼文件

建立并配置Builder:

右鍵-屬性-Builder-New-Main,Refresh,Build中如下配置(按照實際項目操作,這里只是舉例),編譯并生成.so文件。

然后可以看到在在控制臺輸出信息(如果沒有,Project-Clean):

[armeabi] Compile thumb ?: hello-jni <= hello-jni.c

[armeabi] SharedLibrary ?: libhello-jni.so

[armeabi] Install ? ? ? ?: libhello-jni.so => libs/armeabi/libhello-jni.so

在libs-armeabi下生成了libhello-jni.so文件

運行成功截圖:

代碼就這么幾行,注意操作步驟就OK了,Demo就不上傳了……

總結

以上是生活随笔為你收集整理的android ndk 界面开发教程,Android NDK开发之入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。