沐鸣娱乐


        androids Studio JNI 开发简单案例(androids studio开发java)

        进程保活,热修复,硬件接入等等都需要底层的支持 ,而底层代码是 C 、C 写的,那么在 androids 中怎么调用底层的库呢 ?这里就需要了解 JNI 技术。

        androids Studio 出来两年多了 ,网上针对 AS 开发 JNI 工程资源比较少,针对于此,我特意写下本篇博客,希望能对大家有所帮助。

        配置环境

        下载NDK 请点击这里 ,并进行环境配置,如图 :

        androids Studio JNI 开发简单案例(androids studio开发java)

        项目关联NDK ,具体操作如图:

        右键你的工程项目,选择 【Open Module Settings】

        androids Studio JNI 开发简单案例(androids studio开发java)

        在 【androids NDK locations】配置 NDK 的按着目录:

        androids Studio JNI 开发简单案例(androids studio开发java)

        最后在 项目根目录 【gradle.properties】 下加上 :

        1 androids.useDeprecatedNdk=true

        如图:

        androids Studio JNI 开发简单案例(androids studio开发java)

        JNI实现

        新建 JNI_DEMO 项目,完成以上的配置工作 。我的项目路径为:D:androids_Study_DemosJNI_DEMO

        生成 .h 文件

        新建TestJNI类

        12345 public class TestJNI { public native String HelloWord(String str);}

        androids Studio JNI 开发简单案例(androids studio开发java)

        在cmd命令下面,cd到java目录 ,输入javah -jni com.github.jni_demo.TestJNI命令,生成 .h 文件:

        androids Studio JNI 开发简单案例(androids studio开发java)

        注意:com.github.jni_demo.TestJNI 不能 cd com  , cd github……否则编译不成功。

        你会发现在你的java路劲下生成了com_github_jni_demo_TestJNI.h文件:

        123456789101112131415161718192021 /* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_github_jni_demo_TestJNI */#ifndef _Included_com_github_jni_demo_TestJNI#define _Included_com_github_jni_demo_TestJNI#ifdef __cplusplusextern "C" {#endif/* * Class: com_github_jni_demo_TestJNI * Method: HelloWord * Signature: (Ljava/lang/String;)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_github_jni_1demo_TestJNI_HelloWord (JNIEnv *, jobject, jstring);#ifdef __cplusplus}#endif#endif

        然后右键 app >New> Folder > JNI Folder 生成jni目录如图:

        androids Studio JNI 开发简单案例(androids studio开发java)

        然后拷贝com_github_jni_demo_TestJNI.h到jni目录下面:

        androids Studio JNI 开发简单案例(androids studio开发java)

        生成 .C 文件

        右键jni ,生成com_github_jni_demo_TestJNI.cpp文件:

        androids Studio JNI 开发简单案例(androids studio开发java)

        拷贝以下代码到 .cpp 文件中 :

        1234567 #include <stdio.h>#include <stdlib.h>#include "com_github_jni_demo_TestJNI.h"JNIEXPORT jstring JNICALL Java_com_github_jni_1demo_TestJNI_HelloWord (JNIEnv *env, jobject, jstring str) { return str;}

        build.gradle 配置 ndk

        在defaultConfig节点下加入如下代码:

        1234 ndk { moduleName "TestJNI" abiFilters "armeabi", "armeabi-v7a", "x86" }

        点击 Build > Make Project 如图:

        androids Studio JNI 开发简单案例(androids studio开发java)

        编译成功后,打开 build > intermediates > ndk > debug > lib 下查看生成的 .so 文件 :

        androids Studio JNI 开发简单案例(androids studio开发java)

        Java中调用JNI

        记得把生成的 .so 文件拷贝到项目的 libs 目录下:

        androids Studio JNI 开发简单案例(androids studio开发java)

        接着在Java中调用JNI :

        123456789101112131415161718 package com.github.jni_demo;import androids.os.Bundle;import androids.support.v7.app.AppCompatActivity;import androids.util.Log;public class MainActivity extends AppCompatActivity { static { // 加载动态库 System.loadLibrary("TestJNI"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TestJNI testJNI=new TestJNI(); Log.e("---------------","************" testJNI.HelloWord("恭喜你,调用成功!")); }}

        androids Studio JNI 开发简单案例(androids studio开发java)

        这样你就生成了一个属于自己的 .so 文件 。

        ..

        相关新闻

        联系我们
        联系我们
        分享本页
        返回顶部

          XML地图