雛形作成
概要
雛形作成
準備
Android SDKの雛形作成と同様の方法でプロジェクトを作成する
手順
指定のプロジェクトを選択して、右クリックし、「Androidツール」>「Add Native Support」をクリック
モジュール名を設定
コンソールに「Unable to launch cygpath. Is Cygwin on the path?…」のようなメッセージが表示されるが無視して良い
jniなどのディレクトリが作成されていることを確認
コマンドプロンプトより移動して、アクティビティのcppファイル用のヘッダーファイルを作成
C:\Users\xxxx>cd C:\Users\xxxx\Desktop\adt-bundle-windows-x86_64-20130219\workspace\Sample\jni
C:\Users\xxxx\Desktop\adt-bundle-windows-x86_64-20130219\workspace\Sample\jni>
javah
-o ./sample.hpp
-classpath "../bin/classes;../../../sdk/platforms/android-7/data/layoutlib.jar;"
app.example.sample.MainActivity
C:\Users\xxxx\Desktop\adt-bundle-windows-x86_64-20130219\workspace\Sample\jni>
sample.hppの中身
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class app_example_sample_MainActivity */
#ifndef _Included_app_example_sample_MainActivity
#define _Included_app_example_sample_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
#undef app_example_sample_MainActivity_MODE_PRIVATE
#define app_example_sample_MainActivity_MODE_PRIVATE 0L
#undef app_example_sample_MainActivity_MODE_WORLD_READABLE
#define app_example_sample_MainActivity_MODE_WORLD_READABLE 1L
#undef app_example_sample_MainActivity_MODE_WORLD_WRITEABLE
#define app_example_sample_MainActivity_MODE_WORLD_WRITEABLE 2L
#undef app_example_sample_MainActivity_MODE_APPEND
#define app_example_sample_MainActivity_MODE_APPEND 32768L
#undef app_example_sample_MainActivity_BIND_AUTO_CREATE
#define app_example_sample_MainActivity_BIND_AUTO_CREATE 1L
#undef app_example_sample_MainActivity_BIND_DEBUG_UNBIND
#define app_example_sample_MainActivity_BIND_DEBUG_UNBIND 2L
#undef app_example_sample_MainActivity_CONTEXT_INCLUDE_CODE
#define app_example_sample_MainActivity_CONTEXT_INCLUDE_CODE 1L
#undef app_example_sample_MainActivity_CONTEXT_IGNORE_SECURITY
#define app_example_sample_MainActivity_CONTEXT_IGNORE_SECURITY 2L
#undef app_example_sample_MainActivity_CONTEXT_RESTRICTED
#define app_example_sample_MainActivity_CONTEXT_RESTRICTED 4L
#undef app_example_sample_MainActivity_RESULT_CANCELED
#define app_example_sample_MainActivity_RESULT_CANCELED 0L
#undef app_example_sample_MainActivity_RESULT_OK
#define app_example_sample_MainActivity_RESULT_OK -1L
#undef app_example_sample_MainActivity_RESULT_FIRST_USER
#define app_example_sample_MainActivity_RESULT_FIRST_USER 1L
#undef app_example_sample_MainActivity_DEFAULT_KEYS_DISABLE
#define app_example_sample_MainActivity_DEFAULT_KEYS_DISABLE 0L
#undef app_example_sample_MainActivity_DEFAULT_KEYS_DIALER
#define app_example_sample_MainActivity_DEFAULT_KEYS_DIALER 1L
#undef app_example_sample_MainActivity_DEFAULT_KEYS_SHORTCUT
#define app_example_sample_MainActivity_DEFAULT_KEYS_SHORTCUT 2L
#undef app_example_sample_MainActivity_DEFAULT_KEYS_SEARCH_LOCAL
#define app_example_sample_MainActivity_DEFAULT_KEYS_SEARCH_LOCAL 3L
#undef app_example_sample_MainActivity_DEFAULT_KEYS_SEARCH_GLOBAL
#define app_example_sample_MainActivity_DEFAULT_KEYS_SEARCH_GLOBAL 4L
/*
* Class: app_example_sample_MainActivity
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_app_example_sample_MainActivity_stringFromJNI
(JNIEnv *, jobject);
/*
* Class: app_example_sample_MainActivity
* Method: unimplementedStringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_app_example_sample_MainActivity_unimplementedStringFromJNI
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
jni配下にある、cppファイルを編集して関数を作成
sample.cpp
#include <jni.h>
#include <string.h>
#include <sample.hpp>
JNIEXPORT jstring JNICALL Java_app_example_sample_MainActivity_stringFromJNI
(JNIEnv *env, jobject)
{
return (env)->NewStringUTF("Jni Test Sample");
}
※作成したsample.hppを必ず指定する必要があります。
アクティビティにモジュールの機能を組み込む
MainActivity.java
package app.example.sample;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
import app.example.sample.R;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// テキストビューのオブジェクトを取得して文字列を設定
TextView text1 = (TextView) findViewById(R.id.textView1);
String a = stringFromJNI();
text1.setText(a);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// NDKの定義
public native String stringFromJNI();
public native String unimplementedStringFromJNI();
static {
System.loadLibrary("sample");
}
}
cppファイルをコンパイル
C:\Users\xxxx\Desktop\adt-bundle-windows-x86_64-20130219\workspace\Sample\jni>ndk-build
"Compile++ thumb : sample <= sample.cpp
StaticLibrary : libstdc++.a
SharedLibrary : libsample.so
Install : libsample.so => libs/armeabi/libsample.so
C:\Users\xxxx\Desktop\adt-bundle-windows-x86_64-20130219\workspace\Sample\jni>
eclipseよりjniフォルダに"Application.mk"を作成して、以下の値を設定
APP_PLATFORM := android-8
ビルドして、実機にて確認
最終更新:2013年05月12日 13:10