NDK 生成 .so ,jni 调用

环境准备:

1、NDK 下载 Android NDK, Revision 6b(August 2011)

http://developer.android.com/sdk/ndk/index.html


2、android 通过JNI调用lib


package com.pathfindeng.android.test;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
    
    static {
        System.loadLibrary("testlib");
    }
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        
    }
    
    

    @Override
    protected void onResume() {
        super.onResume();
        
        testJNISet(123);
        Log.v("#######", "from jni "+testJNIGet());
        
    }
        
    
   public native void testJNISet(int value);
   public native int testJNIGet();

}




3、编译生成  MainActivity.class


4、javah 生成 头文件 ,进入 bin 目录


/NDK-test/bin$ javah -classpath . -jni com.pathfindeng.android.test.MainActivity

生成 com_pathfindeng_android_test_MainActivity.h


5、在项目根目录 新建文件夹 jni


|-- jni
|   |-- Android.mk
|   |-- com_pathfindeng_android_test_MainActivity.h
|   `-- testlib.c


6、新建Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := testlib
LOCAL_SRC_FILES := testlib.c

include $(BUILD_SHARED_LIBRARY)


7、新建 testlib.c

#include <com_pathfindeng_android_test_MainActivity.h>


int mValue = 0;

/*
 * Class:     com_pathfindeng_android_test_MainActivity
 * Method:    testJNISet
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_pathfindeng_android_test_MainActivity_testJNISet (JNIEnv *env, jobject obj, jint fromJava){

mValue = fromJava;


}



/*
 * Class:     com_pathfindeng_android_test_MainActivity
 * Method:    testJNIGet
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_pathfindeng_android_test_MainActivity_testJNIGet (JNIEnv *env, jobject ojb){

return mValue;

}


8、NDK 生成 so,ndk/android-ndk-r6b$ ./ndk-build -C ../../workspace/NDK-test/  生成 so



9 、运行 OK


10、工程目录结构

.
|-- AndroidManifest.xml
|-- assets
|-- bin
|   |-- classes.dex
|   |-- com
|   |   `-- pathfindeng
|   |       `-- android
|   |           `-- test
|   |               |-- MainActivity.class
|   |               |-- R$attr.class
|   |               |-- R.class
|   |               |-- R$drawable.class
|   |               |-- R$layout.class
|   |               `-- R$string.class
|   |-- com_pathfindeng_android_test_MainActivity.h
|   |-- NDK-test.apk
|   `-- resources.ap_
|-- default.properties
|-- gen
|   `-- com
|       `-- pathfindeng
|           `-- android
|               `-- test
|                   `-- R.java
|-- jni
|   |-- Android.mk
|   |-- com_pathfindeng_android_test_MainActivity.h
|   `-- testlib.c
|-- libs
|   `-- armeabi
|       `-- libtestlib.so
|-- obj
|   `-- local
|       `-- armeabi
|           |-- libtestlb.so
|           |-- libtestlib.so
|           `-- objs
|               |-- testlb
|               |   |-- testlb.o
|               |   `-- testlb.o.d
|               `-- testlib
|                   |-- testlib.o
|                   `-- testlib.o.d
|-- proguard.cfg
|-- res
|   |-- drawable-hdpi
|   |   `-- icon.png
|   |-- drawable-ldpi
|   |   `-- icon.png
|   |-- drawable-mdpi
|   |   `-- icon.png
|   |-- layout
|   |   `-- main.xml
|   `-- values
|       `-- strings.xml
`-- src
    `-- com
        `-- pathfindeng
            `-- android
                `-- test
                    `-- MainActivity.java

31 directories, 30 files



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值