[출처 : Korea Android & here!]

Step By Step Instructions below:


Step #1: Compile the project using ant. Some snippets are shown below. 
 

NativeAdd.java class (with Native method)
package org.apache;
import android.util.Log;
public class NativeAdd {
    static {
        try {
            Log.i("JNI", "Trying to load libNativeAdd.so");
            System.loadLibrary("NativeAdd");
        }
        catch (UnsatisfiedLinkError ule) {
            Log.e("JNI", "WARNING: Could not load libNativeAdd.so");
        }
    }

    public static native long add(long a, long b);
}
Snippet that shows how this class/method is invoked from the main activity

    public void onClick(View view) {
        Log.i(LOG_TAG, "onClick");

        EditText a = (EditText) findViewById(R.id.a);
        EditText b = (EditText) findViewById(R.id.b);
        EditText c = (EditText) findViewById(R.id.c);
        Log.i(LOG_TAG, "calling native method");
        long sum = NativeAdd.add(Long.parseLong(a.getText().toString()),
                Long.parseLong(b.getText().toString()));
        Log.i(LOG_TAG, "back from native method");
        String text = Long.toString(sum);
        c.setText("Native add returns = " + text.subSequence(0, text.length()));
    }


 
Step #2: Generate header files using java by running the following command.
 
javah -classpath ../../android.jar;../bin/classes; org.apache.NativeAdd
Here’s how the header file (org_apache_CallNative.h) looks like
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class org_apache_NativeAdd */
#ifndef _Included_org_apache_NativeAdd
#define _Included_org_apache_NativeAdd
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     org_apache_NativeAdd
 * Method:    add
 * Signature: (JJ)J
 */
JNIEXPORT jlong JNICALL Java_org_apache_NativeAdd_add
  (JNIEnv *, jclass, jlong, jlong);
#ifdef __cplusplus
}

 
Step #3: Code a tiny C file (org_apache_NativeAdd.c) as shown below:
 
#include "org_apache_NativeAdd.h"
JNIEXPORT jlong JNICALL Java_org_apache_NativeAdd_add
  (JNIEnv *env, jclass c, jlong a, jlong b)
{
    return a + b;
}

 
 
Step #4: Please read the following article before you try the next step. 

Shared library “Hello World!” for Android
 
 
Step #5: Compile and link the org_apache_NativeAdd.c/org_apache_NativeAdd.h into a shared library.
 
 
arm-none-linux-gnueabi-gcc  -I/usr/lib/jvm/java-1.5.0-sun/include -I/usr/lib/jvm/java-1.5.0-sun/include/linux  -fpic -c org_apache_NativeAdd.c
arm-none-linux-gnueabi-ld -T armelf_linux_eabi.xsc -shared -o libNativeAdd.so org_apache_NativeAdd.o

NOTE: details on armelf_linux_eabi.xsc are in the Step #4.
 
 
Step #6: copy the library to the emulator. Copy the Application as well.
 
adb push native/libNativeAdd.so /system/libadb install bin/CallNative.apk
 
 
Step #7: Run the app to try some values. That’s it!
태그 : android,JNI
트랙백 주소 :: http://www.mirwing.com/104/trackback/
옵션
댓글 달기