使用NDK c++建立一個Android應用


使用NDK c++建立一個Android應用

一.工具

  • ADT(集成了eclipse,cdt,ndk plug-in)
  • NDK (用它來編譯c/c++程序)
  • JDK (Java開發包)
  • ANT(eclipse打包插件)

二.配置環境變量

  • 1.JAVA_HOME=C:\Program Files\Java\jdk1.7.0_71
  • 2.ANT_HOME=D:\apache\ant
  • 3.ANDROID_SDK_HOME=D:\SDK\android-sdk
  • 4.NDK_HOME=D:\SDK\android-ndk-r10e

添加Path變量
JAVA_HOME%\bin;%NDK_HOME%;%ANDROID_SDK_HOME%\platform-tools;%ANT_HOME%\bin

三.環境檢查

打開控制台,依次輸入

  • javac –version (檢驗JDK安裝)
  • ant –version (檢驗ant安裝)
  • ndk-build –version (檢驗NDK安裝)
  • adb devices ( 檢驗android platforms tools安裝)

如果以上命令都是有效命令,安裝完成

四.為Eclipse分別配置SDK和NDK位置

  • Windows->Preferences->Android設置SDK路徑
  • Windows->Preferences->Android->NDK設置NDK路徑

五.創建Android應用

打開eclipse,File->new->Project->Android->Android Application Project 創建Android應用。

六.讓Android工程支持C++編譯

右鍵單擊工程,Android Tools->Add Native Support,在彈出對話框中直接點擊finish,此時eclipse會自動在工程文件中創建jni文件,含對應配置文件和源文件

七.編寫JNI及調用代碼

//jni/hellojni.cpp

#include <jni.h>

jstring JniString(JNIEnv* env) {
	return env->NewStringUTF("Hello,NDK");
}
extern "C"
{
	JNIEXPORT jstring JNICALL Java_com_example_hellondk_NDKUtils_stringFromJNI(JNIEnv* env,jobject o){
	return JniString(env);
}
}

//com.example.hellondk.NDKUtils

package com.example.hellondk;

public class NDKUtils {
	public static native String  stringFromJNI();
	static {
	      System.loadLibrary("hellondk");
	}
}

//com.example.hellondk.MainActivity

package com.example.hellondk;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		TextView  textView01 = (TextView)findViewById(R.id.textView01);
		textView01.setText(NDKUtils.stringFromJNI());
	}
}

八.編譯生成so

  • 1.通過Eclipse編譯
    右鍵單擊工程進行Clean Project,然后再執行Build Project,即可在libs目錄下看到生成的so文件
  • 2.也可以通過命令行編譯(定位到jni目錄下),執行命令“ndk-build clean”進行清理,執行“ndk-build”進行編譯

九.編譯支持多架構

  • 在jni目錄下創建Application.mk文件
    配置 APP_ABI := all 重新編譯,即可在libs目錄下看到編譯生成所有平台so
  • 也可以指定需編譯支持的架構平台
    APP_ABI := armeabi armeabi-v7a x86 mips arm64-v8a x86_64 mips64

如果你的工程沒有Application.mk文件,則系統會用默認的,$(NDK_ROOT)/build/core/default-application.mk

十.本示例代碼

附:參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM