android studio jni开发 简书,Android studio开发jni

1、下载NDK

2、新建一个类,声明native方法。

这个类是java与c/c++交互的中介,方法由java声明,逻辑有C/C++实现。

public class MyJni{

//加载so库

static{

System.loadLibrary("JniTest");

}

//native方法

public static native String sayHello();

}

3、点击Android studio中的Build

8ec299942804?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

点击Make Project等待编译。

3.1、打开终端,可以是dos或者是Android studio的Terminal切换到目录下,假设我的目录是:ndk----->build----->intermediates--->classes--->debug

8ec299942804?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

输入命令:javah -jni 包名路劲下的类文件

8ec299942804?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

4、点开Module(app)下的build--->intermediates--->classes-->debug下会看到一个.h的文件

5、在main文件夹下创建jni文件夹,把之前的.h文件拷贝到jni,在新建一个main.c文件,把.h的文件代码全部复制到main.c中。

1、生成的.h文件

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class com_example_binbin_testjni_myJNI */

#ifndef _Included_com_example_binbin_testjni_myJNI

#define _Included_com_example_binbin_testjni_myJNI

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: com_example_binbin_testjni_myJNI

* Method: sayHello

* Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_example_binbin_testjni_myJNI_sayHello

(JNIEnv *, jclass);

#ifdef __cplusplus

}

#endif

#endif

2、拷贝修改后的main.c

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class com_example_binbin_testjni_myJNI */

#ifndef _Included_com_example_binbin_testjni_myJNI

#define _Included_com_example_binbin_testjni_myJNI

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: com_example_binbin_testjni_myJNI

* Method: sayHello

* Signature: ()Ljava/lang/String;

*/

//就实现了个函数 JNIEnv的用法可以自行百度,这里就不展开了

JNIEXPORT jstring JNICALL Java_com_example_binbin_testjni_myJNI_sayHello

(JNIEnv *env, jclass jobj){

//返回一句话

return (*env)->NewStringUTF(env,"JNI hahahahahahahaha");

}

#ifdef __cplusplus

}

#endif

#endif

6、配置NDK的路径

打开工程下的local.properties文件添加NDK路径

8ec299942804?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

7、打开app Module的build.gradle文件,

在defaultConfig节点里添加代码。

ndk{

moduleName "JniTest";

ldLibs "log", "z", "m"

abiFilters "armeabi", "armeabi-v7a", "x86"

}

注意:这里的moduleName是在之前编写的类里面加载的so库名。

8、在工程下的gradle.properties里加一句话:

android.useDeprecatedNdk = true

9、生成so库。

点击菜单栏上的Build,然后点击rebuild Project

8ec299942804?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

然后在项目中的app\build\intermediates\ndk\debug\lib可以看到三个文件夹“armeabi”、“armerbi-v7a”、"x86"点开就是so库

8ec299942804?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

10、配置so库

在src/main下新建文件夹jniLibs,生成so文件拷贝到改文件夹下。

8ec299942804?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

11、使用jni

因为native方法声明成了静态方法,直接调用即可

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

//setContentView(R.layout.activity_main);

TextView test = new TextView(this);

test.setText(MyJni.sayHello());

}

界面上就是显示在C文件中的内容了。

踩了挺多坑的,有时候生成的文件不对,有时候生成的文件名怪怪的,慢慢踩就好。注意:C和C++写的方式略有不同,C文件中(*env)->,而在C++中可以用evn->

鄙人不才,如有错误还望大神指点一二!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio 中进行 JNI(Java Native Interface)开发的流程如下: 1. 创建新的 Android 项目或打开现有项目。 2. 在项目的 `app` 模块下创建 `jni` 文件夹。可以右键点击 `app` 模块,选择 "New" -> "Folder" -> "JNI Folder"。 3. 在 `jni` 文件夹中创建一个新的 C/C++ 文件,例如 `native-lib.cpp`。 4. 在 `native-lib.cpp` 文件中编写您的 C/C++ 代码,可以与 Java 代码进行交互。 5. 打开 `CMakeLists.txt` 文件,它位于 `app` 模块的根目录中。如果没有该文件,则可以创建一个。 6. 在 `CMakeLists.txt` 文件中添加以下内容: ```cmake # 添加自动生成的 C/C++ 头文件 include_directories(src/main/cpp) # 添加你的 C/C++ 源文件 add_library(native-lib SHARED src/main/cpp/native-lib.cpp) ``` 7. 在 `MainActivity.java`(或您想要使用 JNI 的任何其他类)中,添加以下代码来加载和调用本地库: ```java static { System.loadLibrary("native-lib"); } // 调用本地方法示例 public native String yourNativeMethod(); ``` 8. 点击顶部菜单栏的 "Build" -> "Make Project" 来构建项目。 9. 如果一切顺利,您就可以在您的 Java 代码中调用您定义的本地方法了。 请注意,这只是一个简单的 JNI 开发流程示例。在实际开发中,您可能还需要处理类型转换、异常处理等其他细节。同时,您还需要了解更多关于 JNI 的知识,例如如何在 Java 和 C/C++ 之间传递数据、使用 JNI 的限制和最佳实践等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值