Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)

简介: Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)

需要源码请点赞关注收藏后评论区留言~~~

一、创建JNI接口

JNI提供了若干API实现Java和其他语言的通信。虽然JNI是Java平台的标准,但是要想在Android上使用JNI,还得配合NDK,NDK提供了C/C++标准库的头文件和标准库的链接文件,而JNI开发只是在App工程下编写C/C++代码,代码必须包含NDK提供的头文件,build.gradl和mk文件依据编译规则把标准库链接进去,编译完成形成最终的so动态库文件,这样才能在App中通过Java代码调用JNI接口。

下面以获取CPU指令集为例,简要介绍JNI开发具体步骤

1:确保NDK环境搭建完成 并且本模块已经添加了对NDK的支持

2:在活动代码中添加JNI接口定义 并在初始化时加载JNI动态库

3:转到工程的jni目录下,在h文件,c文件,cpp文件中编写C/C++代码

工程目录结构如下

以上开发步骤需要注意以下几点

1:数据类型转换

2:编译规则定义

3:开发注意事项

运行效果如下 调用CPU的指令集

代码如下

Java类

package com.example.ebook;
import android.annotation.SuppressLint;
import android.os.Build;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
@SuppressLint("SetTextI18n")
public class JniCpuActivity extends AppCompatActivity {
    private TextView tv_cpu_jni; // 声明一个文本视图对象
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jni_cpu);
        TextView tv_cpu_build = findViewById(R.id.tv_cpu_build);
        tv_cpu_build.setText("Build类获得的CPU指令集为" + Build.CPU_ABI);
        tv_cpu_jni = findViewById(R.id.tv_cpu_jni);
        findViewById(R.id.btn_cpu).setOnClickListener(v -> {
            // 调用JNI方法cpuFromJNI获得CPU信息
            String desc = cpuFromJNI(1, 0.5f, 99.9, true);
            tv_cpu_jni.setText(desc);
        });
    }
    // 声明cpuFromJNI是来自于JNI的原生方法
    public native String cpuFromJNI(int i1, float f1, double d1, boolean b1);
    // 在加载当前类时就去加载libcommon.so,加载动作发生在页面启动之前
    static {
        System.loadLibrary("common");
    }
}

XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="5dp" >
    <TextView
        android:id="@+id/tv_cpu_build"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:textSize="17sp" />
    <Button
        android:id="@+id/btn_cpu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="调用jni接口获取指令集"
        android:textColor="@color/black"
        android:textSize="17sp" />
    <TextView
        android:id="@+id/tv_cpu_jni"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:textSize="17sp" />
</LinearLayout>

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
5天前
|
Android开发
Android JNI与CAN通信遇到的问题总结
Android JNI与CAN通信遇到的问题总结
37 1
|
5天前
|
移动开发 小程序
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
|
5天前
|
缓存 Linux Go
一次性构建出多CPU指令集的 Docker 镜像
本文介绍了使用 Docker Buildx 构建跨平台 Docker 镜像的流程。首先确保系统为 Ubuntu 22.04,安装 Docker 和相关依赖。然后配置 Docker Buildx,编写 Go 程序和 Dockerfile。接着,创建构建脚本 `build.sh` 自动化构建并推送镜像到 Docker Hub。运行此脚本将为不同平台(如 amd64, arm64)构建并推送镜像。最后,在 Docker Hub 可查看构建结果,并可在其他系统上测试镜像。
37 3
|
5天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
114 3
|
5天前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤
|
5天前
|
开发工具 数据安全/隐私保护 Android开发
【教程】APP 开发后如何上架?
【教程】APP 开发后如何上架?
|
5天前
|
Android开发
Android JNI 报错(signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr )
Android JNI 报错(signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr )
70 1
|
4天前
|
Java Android开发
Android JNI 调用
Android JNI 调用
8 1
|
5天前
|
Web App开发 数据采集 移动开发
开发uniapp过程中对app、微信小程序与h5的webview调试
开发uniapp过程中对app、微信小程序与h5的webview调试
13 1
|
5天前
|
Android开发 异构计算
高通android设备themal读取cpu温度
高通android设备themal读取cpu温度
14 0
http://www.vxiaotou.com