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.