ネイティブメソッドを呼び出すための[学習] JNI経由のJavaのAndroidのNDK開発

参考:AndroidのNDK、サンプル/ハローJNIの典型的なプロジェクト

システム環境:Ubuntuの12.04 LTS 32ビット

 

1、仕事する準備ができて

Eclipseを開き、新しいAndroidのプロジェクト:

アプリケーション名:HelloJNI

プロジェクト名:HelloJNI

パッケージ名:com.example.hellojni

活動:MainActivity

アクティビティレイアウト:activity_main.xml

 

「:テキストアンドロイド」プロパティを削除、属性:「IDアンドロイド」を追加し、<TextViewに/>タグとして、activity_main.xmlを変更します。

< RelativeLayout のxmlns:アンドロイド= "http://schemas.android.com/apk/res/android" 
    のxmlns:ツール= "http://schemas.android.com/tools" 
    のandroid:layout_width = "match_parent" 
    のandroid:layout_height = "match_parent"  >

    < TextViewには
         アンドロイド:ID = "@ + ID / activity_main_textview_hello" 
        アンドロイド:layout_width = "wrap_content" 
        のandroid:layout_height = "wrap_content" 
        アンドロイド:layout_centerHorizo​​ntal = "true"の
        アンドロイド:layout_centerVertical = "true"の
        ツール:コンテキスト= "MainActivity"  / >

</ RelativeLayout >

 

SRC / COM /例を修正/ hellojni / MainActivity.java、レイアウトファイルのTextViewオブジェクトの参照を追加します。

パッケージcom.example.hellojni。

輸入android.os.Bundle;
輸入android.app.Activity。
輸入android.widget.TextView。

パブリック クラス MainActivityは延びアクティビティ{
    
    民間のTextView helloTextView。

    @オーバーライド
    公共 のボイドのonCreate(バンドルsavedInstanceState){
         スーパー.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main)。
        
        helloTextView = (のTextView)findViewById(R.id.activity_main_textview_hello)。
    }

}

 

Javaファイルに記述された2、

MainActivityクラスで

声明ネイティブメソッド

公共の ネイティブ文字列のhello();

.soのライブラリをロードします

静的{
    System.loadLibraryを( "MYLIB" );
}

TextViewの表示文字列関数は、ハロー返します

helloTextView.setText(ハロー())。

次のようにMainActivity.javaコードは次のとおりです。

パッケージcom.example.hellojni。

輸入android.os.Bundle;
輸入android.app.Activity。
輸入android.widget.TextView。

パブリック クラス MainActivityは延びアクティビティ{
    
    静的{
        System.loadLibraryを( "MYLIB" );
    }
    
    民間のTextView helloTextView。

    @オーバーライド
    公共 のボイドのonCreate(バンドルsavedInstanceState){
         スーパー.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main)。
        
        helloTextView = (のTextView)findViewById(R.id.activity_main_textview_hello)。
        helloTextView.setText(ハロー())。
    }

    公共の ネイティブ文字列のhello();
}

 

Cのファイルに書かれた3、

。プロジェクトHelloJNIディレクトリの下に、フォルダのJNIを作成します

 

B。.hファイルのjavahはを生成するためのツールを使用して、

オープンターミナルは、プロジェクトディレクトリのEclipseワークスペースにカレントディレクトリを切り替えます

CD HelloJNI / binに/クラス

JVH D Actiteepi:// wwvkchnblogskcom / jtri / -jni Com.akshmplekhellojtriknaenachtivity

javahはは、 JavaクラスからCヘッダファイルとCソースファイルを生成します。これらのファイルは、JavaとCのコードが相互作用することを可能にする結合接着剤を提供しています。

使用するjavahは:http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javah.html

.hファイルのディレクトリJNIを生成するためのプロジェクトを更新

 

C。実現方法ハロー

JNIのディレクトリでは、ドキュメントの作成と編集com_example_hellojni_MainActivity.c

javahははJava_com_example_hellojni_MainActivity_hello機能を達成する前に生成された.hファイルを含めます

#include " com_example_hellojni_MainActivity.h "

JNIEXPORT JSTRING JNICALL Java_com_example_hellojni_MainActivity_hello
  (JNIEnvの * envを、jオブジェクトthiz){
     リターン(* ENV) - > NewStringUTF(ENV、" こんにちはJNI!" );
}

 

4、文書の作成Android.mk

JNI /ディレクトリには、メイクファイルAndroid.mkを作成します。

LOCAL_PATH:= $(my-呼び出しDIR)

$(CLEAR_VARS)が含ま

LOCAL_MODULE: = MYLIB
LOCAL_SRC_FILES: = com_example_hellojni_MainActivity.c

含める$(BUILD_SHARED_LIBRARY)

注意:Android.mkのために、別のブログ記事で説明します

 

5、コンパイルして実行

。コンパイルされた共有ライブラリ

プロジェクトのルートディレクトリにカレントディレクトリを切り替え、すなわちHelloJNI /

使用のAndroid NDKは、ツールNDKビルドが付属して、/ディレクトリにJNI .cファイルをコンパイルし、LIBS / armeabiディレクトリ内の.so共有ライブラリを生成します

 

B。プロジェクトを実行

ディスプレイに "Hello JNI!"、ありがとうございます!

 

 

ます。https://www.cnblogs.com/dyingbleed/archive/2012/09/30/2709320.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34204057/article/details/93301815