IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> jni编程环境搭建与示例 -> 正文阅读

[移动开发]jni编程环境搭建与示例

本博客只是搭建了jni编程所需要的环境,通过一个简单的例子展示了其流程,用于以后参考查阅,不涉及jni的复杂内容。

一、环境搭建

除了Android开发所需要的环境外还需要cmake、ndk。
1、现在sdk manager中安装cmake、ndk
在这里插入图片描述2、在local.propertites中设置ndk路径ndk.dir=E\:\\DevTools\\Sdk\\ndk\\24.0.8215888,其路径会自动同步到project structure中。
在这里插入图片描述

二、jni示例

1、在MainActivity同级目录下创建Java类

package com.example.myapplication1;

public class JniHello{
    static {
        System.loadLibrary("JniHello");
    }

    public static native String welcomeJniStudy();
}

2、创建javah和ndk通用工具
首先选择File->Settings->Tools->External Tools创建javah工具,其具体设置如下:

Program: E:\DevTools\Java\jdk1.8.0_162\bin\javah.exe
Arguments: -classpath . -jni -d E:\TestProjects\MyApplication1\app\src\main\jni $FileClass$
Working directory: E:\TestProjects\MyApplication1\app\src\main\java

在这里插入图片描述
然后创建ndk-build工具,具体设置如下:

Program:E:\DevTools\Sdk\ndk\24.0.8215888\build\ndk-build.cmd //安装ndk的路径
Arguments:
Working directory:E:\TestProjects\MyApplication1\app\src\main

在这里插入图片描述

3、通过通用工具javah生成C头文件
在这里插入图片描述
就会在jni文件夹下生成相应的c头文件
在这里插入图片描述

4、创建Android.mk和Application.mk

在这里插入图片描述

//Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS += -llog
LOCAL_LDLIBS +=-lm
LOCAL_MODULE := JniHello
LOCAL_SRC_FILES =: JniHello.cpp  # 实现c代码文件的名字
include $(BUILD_SHARED_LIBRARY)
//Application.mk
APP_MODULES := JniHello
APP_ABI := all

5、实现c头文件中的方法,文件命名为JniHello.cpp
在这里插入图片描述

文件内容为:

#include "com_example_myapplication1_JniHello.h"

JNIEXPORT jstring JNICALL Java_com_example_myapplication1_JniHello_welcomeJniStudy(JNIEnv *env, jclass jclass){
    return env->NewStringUTF("welcome to study jni");
}

6、修改app下的build.gradle,在defaultConfig中添加如下内容

ndk{
    moduleName "JniHello"
    //abiFilters \"armeabi-v7a", "x86" //输出指定abi下的so库
}

sourceSets.main {
    jni.srcDirs = []
    jniLibs.srcDir "src/main/libs"
}

7、生成so文件
在这里插入图片描述就会在libs文件夹下生成相应的so文件
在这里插入图片描述

8、在MainActivity.java中调用测试

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String str=new JniHello().welcomeJniStudy();
        System.out.println("============="+str);
    }
}

输出结果

05/06 18:33:35: Launching 'app' on Nexus 5 API 29.
Install successfully finished in 979 ms.
$ adb shell am start -n "com.example.myapplication1/com.example.myapplication1.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 16900 on device 'Nexus_5_API_29 [emulator-5554]'.
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
D/libEGL: Emulator has host GPU support, qemu.gles is set to 1.
W/libc: Unable to set property "qemu.gles" to "1": connection failed; errno=13 (Permission denied)
W/RenderThread: type=1400 audit(0.0:35): avc: denied { write } for name="property_service" dev="tmpfs" ino=7421 scontext=u:r:untrusted_app:s0:c134,c256,c512,c768 tcontext=u:object_r:property_socket:s0 tclass=sock_file permissive=0
D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
W/.myapplication: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
    Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
I/System.out: =============welcome to study jni
D/HostConnection: HostConnection::get() New Host Connection established 0xd89bac30, tid 16931
D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:15:26  更:2022-05-08 08:15:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 0:29:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码