国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

NDK開發

2019-11-09 17:30:35
字體:
來源:轉載
供稿:網友

HelloJni工程的搭建

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

NDK系統環境變量的配置

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

eclipse開發環境的配置

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

開始編寫NDK工程:

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

public static native String getStringFromC();

打開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 := HelloMyJniLOCAL_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(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.textView); textView.setText(getStringFromC()); }}

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 晋州市| 赣州市| 抚州市| 上蔡县| 成都市| 汉阴县| 永昌县| 陆良县| 深泽县| 青海省| 霍林郭勒市| 鸡西市| 牙克石市| 噶尔县| 莲花县| 烟台市| 宝丰县| 合作市| 宜宾县| 南召县| 宁乡县| 原阳县| 勃利县| 游戏| 工布江达县| 手游| 东辽县| 平乡县| 静安区| 普宁市| 堆龙德庆县| 西和县| 萨迦县| 梅州市| 清河县| 峨眉山市| 甘德县| 开封市| 特克斯县| 仪陇县| 泸西县|