JNIコンパイルso
5335 ワード
JNI
原文アドレス:超シンプルなAndroid Studio jni実装(コマンドライン不要)
1、生成する.hファイル
Program: JDKPath J D K P a t h\bin\javah.exe Parameters:-classpath . -jni -d ModuleFileDir M o d u l e F i l e D i r\src\main\jni FileClass F i l e C l a s s Working directory: ModuleFileDir M o d u l e F i l e D i r\src\main\Java
コメント:
-classpath classesはクラスの位置を示す-jni com.jni.jnitest.JNITestクラスの絶対パス-dが生成する.hファイルを指定ディレクトリの下に置く.
クラスを書いてJNIインタフェースを呼び出す
右クリックで書かれたクラス、右クリックsrc->New->Folder->JNI Folder
jniフォルダの下に生成されます.hフォルダ.
2、ファイルJniLibの作成cpp 、Android.mk、Application.mk
まず、jniフォルダの作成
右クリックsrc->New->Folder->JNI Folder
次に、jniディレクトリの下で JniLib.cppレプリケーションは作成したばかりです.hファイル内容は Android.mk Application.mk
合計4ファイル
3.その他の構成
1.appの下のbuildを修正する.gradleファイル、次のように
2.プロジェクト下のgradle.propertiesファイル(このファイルがない場合は、自分で新規作成)にコードを追加します.
4、ndk-buildの実行
最初のステップと同じ条件で、構成されたツールで実行されます.
JNIクラスの右ボタン->New->External Tools->ndk-buildを選択すると、成功します.
5、呼び出しso
クラステストを書いてください.
効果図:
原文アドレス:超シンプルなAndroid Studio jni実装(コマンドライン不要)
1、生成する.hファイル
Program: JDKPath J D K P a t h\bin\javah.exe Parameters:-classpath . -jni -d ModuleFileDir M o d u l e F i l e D i r\src\main\jni FileClass F i l e C l a s s Working directory: ModuleFileDir M o d u l e F i l e D i r\src\main\Java
コメント:
-classpath classesはクラスの位置を示す-jni com.jni.jnitest.JNITestクラスの絶対パス-dが生成する.hファイルを指定ディレクトリの下に置く.
クラスを書いてJNIインタフェースを呼び出す
public class JNITest {
static {
System.loadLibrary("JniLib");
}
public native String getString();
}
右クリックで書かれたクラス、右クリックsrc->New->Folder->JNI Folder
jniフォルダの下に生成されます.hフォルダ.
2、ファイルJniLibの作成cpp 、Android.mk、Application.mk
まず、jniフォルダの作成
右クリックsrc->New->Folder->JNI Folder
次に、jniディレクトリの下で
JniLib.cpp、Android.mk、Application.mk
の3つのファイルをそれぞれ作成して作成します.JniLib.cpp
に変更され、以下の通り(このファイルはJNIコンテンツファイル): /* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_jni_jnitest_JNITest */
/*
* Class: com_jni_jnitest_JNITest
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
Java_com_ynh_mediaclient_mediaclient_JNITest_getString //
(JNIEnv * env, jobject jobject)
{
return (*env).NewStringUTF(" JNI ");
}
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JniLib
LOCAL_SRC_FILES =: JniLib.cpp
include $(BUILD_SHARED_LIBRARY)
APP_MODULES := JniLib // so - so
APP_ABI := all // so.
合計4ファイル
3.その他の構成
1.appの下のbuildを修正する.gradleファイル、次のように
ndk{
moduleName "JniLib"
// abiFilters "armeabi", "armeabi-v7a", "x86" // abi so
}
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}
2.プロジェクト下のgradle.propertiesファイル(このファイルがない場合は、自分で新規作成)にコードを追加します.
android.useDeprecatedNdk=true
4、ndk-buildの実行
最初のステップと同じ条件で、構成されたツールで実行されます.
JNIクラスの右ボタン->New->External Tools->ndk-buildを選択すると、成功します.
5、呼び出しso
クラステストを書いてください.
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button button;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button) findViewById(R.id.button);
tv=(TextView) findViewById(R.id.tv);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tv.setText(" :"+ new JNITest().getString());
}
});
}
}
}
効果図: