ndk入門基礎demo

2164 ワード

本稿では,ndkを用いた最初の関連内容を詳細に記録し,小さな例で述べる.(以下の命令と符号化を操作する前に、ndkの環境変数を構成してください.方法はjdkの構成と同じで、binディレクトリを構成するだけでいいです)
現在の操作はすべてeclipseで行われており、android studioはndkを全面的にサポートすることはできません.
package com.example.hellondk;

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

public class MainActivity extends Activity {
	
	static {
		System.loadLibrary("hello");
	}
	public static native String getStringFromC();
	
	private TextView text;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
			text = (TextView)findViewById(R.id.text);
		//System.out.println(getStringFromC());
			text.setText(getStringFromC());
	}

}

ここでpublic static native String getStringFromC()最初に書くには、このnativeメソッドはjavahコマンドによってjavaのヘッダファイルを生成します.
1.「jni」というディレクトリを手動で作成します.
2.cmdを開き、現在のプロジェクトのディレクトリに切り替えます.コマンド、javah-classpath bin/classesを実行します.D:\sdk_r10\platforms\android-18\android.jar -d jni com.example.hellondk.MainActivity
[注]:javah-classpath bin/classes;[sdkplatforms任意バージョンandroid.jar]-d[ファイル格納フォルダを生成][パッケージ名.クラス名]
3.jniディレクトリの下にc言語のファイルを作成し、導入前にコンパイルする.hファイル
#include<stdio.h>
#include<stdlib.h>

#include 'com_example_hellondk_MainActivity.h'

JNIEXPORT jstring JNICALL Java_com_example_hellondk_MainActivity_getStringFromC
  (JNIEnv *env, jclass jclass){
	return (*env)->NewStringUTF(env, " , ")
}
4.jniディレクトリにAndroidを導入する.mkファイル(記憶不要でコピー可能)
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello
LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)

LOCAL_MODULEはコンパイル後のsoの名前を指定します
LOCAL_SRC_FIFESとは、どのcファイルをコンパイルするか
5.現在のディレクトリの下で、cmdでnkd-buildを実行する
実行するとobj->local->armeabiディレクトリの下にlibhelloというsoファイルが見つかります.so.
6.Activityに戻り、
static {
		System.loadLibrary("hello");
	}

soパッケージをロードして、万事順調で、呼び出すことができます
public static native String getStringFromC(); ndk 。