android ndk開發,NDK開發

 2023-10-20 阅读 21 评论 0

摘要:HelloJni工程的搭建 在建立NDK工程之前要進行環境的搭建,有以下兩個方面需要搭建的: NDK系統環境變量的配置 去android developer官網選擇NDK下載相應的ndk版本,我選擇的是ndk-r9d版本,安裝完以后要進行系統環境變量的配置,將ndk的安裝目錄

HelloJni工程的搭建

在建立NDK工程之前要進行環境的搭建,有以下兩個方面需要搭建的:

NDK系統環境變量的配置

去android developer官網選擇NDK下載相應的ndk版本,我選擇的是ndk-r9d版本,安裝完以后要進行系統環境變量的配置,將ndk的安裝目錄配置到Path系統環境變量中,配置好之后打開cmd執行ndk-build出現如下畫面則配置成功。
這里寫圖片描述

android ndk開發?eclipse開發環境的配置

eclipse安裝ADT(這個是安卓的開發環境搭建);

開始編寫NDK工程:

新建一個安卓工程HelloJni,在MainActivity里聲明native方法

public static native String getStringFromC();

安卓ndk、打開cmd進入到HelloJni的根目錄下

cd E:\MyProject\eclipsem\HelloMyJni

使用javah命令生成相應的.h頭文件

javah -classpath bin/classes;D:\adt-bundle-windows-x86_64-20130522\sdk\platforms\android-17\android.jar -d jni com.example.hellomyjni.MainActivity

javah 命令用于生成頭文件,參數是生成.h文件的相應的類(全類名);
-classpath 指定類的加載目錄(有兩個類一個是位于bin下的MainActivity和sdk下的android.jar包的Activity類,用分號隔開);
-d 表示輸出路徑在jni文件夾下;

生成之后會在項目工程的jni目錄下發現com_example_hellomyjni_MainActivity.h文件
然后為項目添加native支持:項目右鍵->Android Tools-> add native support
此時打開.h文件出現錯誤如下圖
錯誤
這個是因為沒有導入jni頭文件的原因。
Project Properties -> C/C++ General -> Path and Symbols
選擇include標簽,Add -> File system -> 選擇ndk安裝目錄下的\platforms\android-17\arch-arm\usr\include
且選中All languages.
最后Apply -> OK
這樣錯誤就解決了。

接下來就是實現剛才定義的getStringFromC();方法了
修改jni目錄下的HelloJni.cpp文件(沒有則創建),實現以下代碼:

#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include "com_example_hellomyjni_MainActivity.h"JNIEXPORT jstring JNICALL       Java_com_example_hellomyjni_MainActivity_getStringFromC(JNIEnv * env, jclass jclass){return (*env)->NewStringUTF(env,"Hello from JNI");
}

這樣我們就實現了Java_com_example_hellomyjni_MainActivity_getStringFromC函數了。

接下來在jni目錄下還要有一個Android.mk文件聲明要編譯的內容,修改(沒有則新建,添加一下代碼

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := HelloMyJni
LOCAL_SRC_FILES := HelloMyJni.cinclude $(BUILD_SHARED_LIBRARY)

其中LOCAL_MODULE表示生成的.so庫的名稱,LOCAL_SRC_FILES表示要編譯的c文件名稱,自行修改

修改完之后就要進行ndk-build命令了,cmd進入項目根目錄下,執行ndk-build之后再項目的obj文件夾下就生成了.so文件

在MainActivity中加載so庫:

public class MainActivity extends Activity {static{System.loadLibrary("HelloMyJni");}public static native String getStringFromC();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView textView = (TextView) findViewById(R.id.textView);textView.setText(getStringFromC());}
}

運行可見textview已經獲得了從jni創建的字符串了
這里寫圖片描述

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/152152.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息