Eelmises osas valmistasime Eclipse projekti ette native koodi lisamiseks. Asume siis nüüd kõige põnevama juurde.
Lisa klass NativeCodeInterface samasse kohta, kus asub MainActivity.java.
package ee.infokiir.androidndkdemo; public class NativeCodeInterface { static { System.loadLibrary("NativeCode"); } public native int get_int(int param); public native String get_string(); }
Avame käsurea ja käivitame:
cd C:\Users\tiit\workspace-android\AndroidNdkDemo\bin\classes
"C:\Program Files\Java\jdk1.8.0_25\bin\javah.exe" -jni ee.infokiir.androidndkdemo.NativeCodeInterface
Tee kaust jni ja tõsta vastloodud .h fail sinna.
Käsurealt käib see nii:
mkdir ..\..\jni
move *.h ..\..\jni
Värskenda failide nimekirja F5 klahviga.
Lisa fail NativeCode.C
#include "ee_infokiir_androidndkdemo_NativeCodeInterface.h" JNIEXPORT jint JNICALL Java_ee_infokiir_androidndkdemo_NativeCodeInterface_get_1int (JNIEnv *, jobject, jint) { int result = param + 1; return result; } JNIEXPORT jstring JNICALL Java_ee_infokiir_androidndkdemo_NativeCodeInterface_get_1string (JNIEnv *, jobject) { return (*jenv)->NewStringUTF(jenv, "String from native code"); }
Lisa fail Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NativeCode
LOCAL_SRC_FILES := NativeCode.c
include $(BUILD_SHARED_LIBRARY)
Nüüd konverteeri projekt: File->New->Other
Pane paika NDK asukoht. See on oluline Debuggeri töölesaamiseks.
C:\ProgramData\Microsoft\AndroidNDK\android-ndk-r10d
Pane paika build käsklus:
C:\ProgramData\Microsoft\AndroidNDK\android-ndk-r10d\ndk-build.cmd NDK_DEBUG=1
Kui soovime deguggerit kasutada, siis on vajalik lisada lõppu NDK_DEBUG=1.
Võtmame linnukese „Clean“ eest.
Lisa include teekond: C:\ProgramData\Microsoft\AndroidNDK\android-ndk-r10d\platforms\android-21\arch-arm\usr\include
Lisa faili MainActivity.java klassi algusesse rida:
NativeCodeInterface NativeCode = new NativeCodeInterface();
Muuda funktsioone:
public void btnGetStringClick(View view) { TextView tv = (TextView) findViewById(R.id.textView1); //tv.setText("Get string clicked"); String nativeCodeStr = NativeCode.get_string(); tv.setText(nativeCodeStr); } public void btnGetIntClick(View view) { TextView tv = (TextView) findViewById(R.id.textView1); //tv.setText("Get int clicked"); int result = NativeCode.get_int(123); String resultString = "GetInt result:"+result; tv.setText(resultString); }
Nüüd võid käivitada ja vaadata, kas töötab.
Proovi ka debuggerit valides Debug As -> Android Native Application.
Mõnikord ilmub viga:
Unknown Application ABI:
Sellisel juhul muuda failis /AndroidNdkDemo/AndroidManifest.xml minSdkVersion="8" asemel minSdkVersion="21":
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="21" />
Proovi ka seada breakpoint failis NativeCode.C reale nr 5:
int result = param + 1;
Vajuta F5 või F6. Nüüd on näha, kuidas muutuja result sai endale õige väärtuse.
Sellega on siis peaaegu kõik. Järgmises osas vaatame veel, kuidas kasutada Visual Studio Android emulaator-t ning kuidas tööd veidi mugavamaks teha.
Vahepeal on Android Studio 1.3 preview saanud hea NDK toe. Edaspidi vaatame ehk ka seda, mida sellega teha saab.