Android Studio 编写Jni

来源:互联网 发布:网络视听制作许可证 编辑:程序博客网 时间:2024/05/21 07:08

最近客户要求写一个操作串口的JNI,并按他们的要求编写,并把源码给他们,我也是醉了,网上不是有操作串口的JNI吗?拿来用不就可以了,真是没办法,因为刚接触Android Studio不久,以前都是直接在源码里或Eclipse编写并编译JNI代码的(现在Google用他们的亲儿子AS,不用干儿子EC了,没办法,一把年纪了也要硬着头皮学了),设置如下:

1.在AS的File菜单里找到Settings,点击进入Settings界面,并选择External Tools:


2.击点右边界面上的+号,设置生成头文件扩展工具:


$JDKPath$/bin/javah-classpath $Classpath$ -v -jni $FileClass$$SourcepathEntry$\..\jni

注:$JDKPath$,$Classpath$ 这些直接点击右边的按钮自行选择,下面的图也是一样。


3.点+号生成ndk编译扩展工具:


$ModuleSdkPath$/ndk-bundle/ndk-build.cmd$ModuleFileDir$\src\main

4.生成清除扩展工具:


$ModuleSdkPath$/ndk-bundle/ndk-build.cmdclean$ModuleFileDir$\src\main
5.在module下找到build.gradle加入如下代码:

        ndk {            moduleName "my_serial_jni"            abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。            //stl "stlport_static"    //打开.c 的 debug (此句是打开的debug的关键)        }        sourceSets.main {            jni.srcDirs = []            jniLibs.srcDir "src/main/libs"        }


6.右键module,New->Folder->JNI Folder新建jni目录备用,再编写JniSerial.java,由于某些问题,就不贴具体代码了,只是说一下方法,请见谅:

public class JniSerial {    public native int open();    public native int close();    static {        try {            System.loadLibrary("my_serial_jni");        } catch (Exception e) {            e.printStackTrace();        }    }}
7.在AS的Build菜单下选择:Build Module 'app',然后右键JniSerial.java,按下图会在刚才新建的jni目录下生成.h文件:

8.在Jni目录下增加JniSerial.c文件,具体代码可以参照网上的串口文件

9.在Jni目录下增加Android.mk和Application.mk两个文件:

# Android.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := fm_serial_jniLOCAL_SRC_FILES =: jniSERIAL.cLOCAL_LDLIBS+= -L$(SYSROOT)/usr/lib -llogLOCAL_PRELINK_MODULE := falseLOCAL_MODULE_TAGS := optionalinclude $(BUILD_SHARED_LIBRARY)


# Application.mkAPP_MODULES := my_serial_jniAPP_ABI := all

10.编译Jni目录,系统编译成功后会在当前目录下生成libs和obj两个目录,并生成相应的so文件:

以上步骤,如果你在写jni时有不成功的地方,请指出,谢谢!


0 0