JNI入门教程:最小环境HelloWorld实战

本文介绍如何在Ubuntu系统下,最小环境学习JNI。通过编写Java代码,生成头文件,编写并编译C代码,最终实现Java到Native的交互。文章详细讲解了每个步骤,包括遇到的问题和解决方案,如命令找不到、gcc编译报错等。
摘要由CSDN通过智能技术生成

JNI是Android应用开发中不太常涉及的技术,但在Framework层中却被广泛使用。作为一名Android应用开发人员,学习JNI知识,对理解整个系统原理还是有很大帮助的。

学习JNI有很多途径:

  1. 可以直接阅读Framework源码。这种方案不太好上手验证,因为Framework代码要配置的编译环境还是比较复杂的,而且编译后没法直接运行测试,需要Root系统
  2. 其次也可以下载安装NDK,直接在Android Studio里开发项目。这种方式也有比较多的环境配置工作,并且操作起来比较麻烦。

因此这篇文章探讨的主题就是在最小环境下,进行JNI的学习与验证。JNI是Java本身就具备的能力,所以最小环境就是Java运行的环境,不需要任何Android开发工具以及IDE
为了方便调试与编译,这里我使用Ubuntu系统,需要安装的开发工具有:

  • openjdk:这里采用的是openjdk11版本
  • gcc:通过apt-get install build-essential安装
  • 任意一个文本编辑器

JNI Hello World

在这个JNI例子中,主要做这几件事:

  1. Java中调用JNI函数
  2. JNI中打印Java中的变量
  3. 在JNI中修改Java中变量
  4. 在JNI中调用Java方法

编写Java代码

Java层的代码很简单,声明一个String变量,供native代码读写。同时提供一个打印变量的方法

public class JniStudy {
   

    private String msg = "Hello World from Java";
    
    private native void nativeChangeMsg();
    public native void nativeCallPrintMsg();

    public void getNativeMsg() {
   
        nativeChangeMsg();
    }
    
    public void printMsg() {
   
        System.out.println(this.msg);
    }

    public static void main(String[] args) {
   
        JniStudy test = new JniStudy();
        test.getNativeMsg();  // 调用native方法更改msg内容
        test.printMsg();
        System.out.println("####################");
        test.nativeCallPrintMsg();  // 调用native方法,native再反向调用printMsg方法
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值