首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Android Studio中制作JNI hello world程序?

在Android Studio中制作JNI hello world程序的步骤如下:

  1. 首先,确保你已经安装了Android Studio,并且已经配置好了NDK(Native Development Kit)。
  2. 创建一个新的Android项目,选择"Empty Activity"模板。
  3. 在项目的"app"模块下,创建一个名为"jni"的文件夹。
  4. 在"jni"文件夹下,创建一个名为"hello.c"的C源文件,用于编写JNI代码。以下是一个简单的示例:
代码语言:txt
复制
#include <jni.h>
#include <stdio.h>

JNIEXPORT void JNICALL
Java_com_example_myapplication_MainActivity_helloFromJNI(JNIEnv *env, jobject instance) {
    printf("Hello from JNI!\n");
}
  1. 在项目的"app"模块下,打开"build.gradle"文件,添加以下配置:
代码语言:txt
复制
android {
    // ...

    defaultConfig {
        // ...

        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }

    // ...

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}
  1. 在"jni"文件夹下,创建一个名为"CMakeLists.txt"的文件,用于配置CMake构建脚本。以下是一个简单的示例:
代码语言:txt
复制
cmake_minimum_required(VERSION 3.4.1)

add_library(hello-jni SHARED hello.c)

target_link_libraries(hello-jni log)
  1. 在Android Studio的底部工具栏中,点击"Build"按钮,或者使用快捷键"Ctrl + F9",进行项目构建。
  2. 构建成功后,在"app/build/intermediates/cmake/debug/obj"目录下,会生成一个名为"libhello-jni.so"的共享库文件。
  3. 在MainActivity.java文件中,添加一个native方法的声明:
代码语言:txt
复制
public class MainActivity extends AppCompatActivity {
    // ...

    public native void helloFromJNI();

    // ...
}
  1. 在MainActivity.java文件中,找到onCreate方法,在方法中调用native方法:
代码语言:txt
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // ...

    helloFromJNI();

    // ...
}
  1. 在MainActivity.java文件中,添加加载共享库的代码:
代码语言:txt
复制
static {
    System.loadLibrary("hello-jni");
}
  1. 运行你的Android应用程序,你将在Logcat中看到"Hello from JNI!"的输出。

这样,你就成功在Android Studio中制作了一个JNI hello world程序。请注意,这只是一个简单的示例,实际的JNI开发可能涉及更复杂的操作和配置。如果你想深入了解JNI开发,可以参考官方文档或其他相关资源。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

注册JNI函数的两种方式

前言 前面介绍过如何实现在Android Studio中制作我们自己的so库,相信大家看过之后基本清楚如何在Android studio创建JNI函数并最终编译成不同cpu架构的so库,但那篇文章介绍注册.../n"); return (*env)->NewStringUTF(env, "hello world returned."); } // 指定要注册的类 #define JNIREG_CLASS...native方法的名字,如本文的hello;Java函数的签名信息、JNI层对应函数的函数指针。...总结 关于JNI技术,在Android中使用是非常多的,我们在实际开发中或多或少可能会使用到第三方或者需要自己开发相应的so库,所以学习和理解JNI中的一些实现原理还是很有必要的,从以前在Eclipse...来实现so库开发到现在可以通过Android Studio来开发so库,会发现会方便很多,这个也是技术的发展带来的一些便捷。

1.3K20
  • Android 增加JNI

    需要交互的本地代码 实现在 Java中声明的Native方法 编译.so库文件 通过Java命令执行 Java程序,最终实现Java调用本地代码 如 Java 需要与 C++ 交互,那么就用C++实现...,并自动将so和应用一起打包成 APK 即可通过NDK在 Android中 使用 JNI与本地代码(如C、C++)交互 应用场景:在Android的场景下 使用JNI 即 Android开发的功能需要本地代码...具体使用 本文根据版本的不同介绍了两种在Android Studio中实现 NDK的方法:Android Studio2.2 以下 & 2.2以上 4.1 Android Studio2.2 以下实现NDK...在Gradle的build.gradle添加ndk节点 至此,将Andorid Studio的项目 与 NDK 关联完毕 下面,将真正开始讲解如何在项目中使用NDK 步骤3:创建本地代码文件 即需要在...("Hello i am from JNI!")

    1.5K40

    Android:JNI 与 NDK到底是什么?(含实例教学)

    JNI的头文件(.h文件) 使用 Java需要交互的本地代码 实现在 Java中声明的Native方法 如 Java 需要与 C++ 交互,那么就用C++实现 Java的Native方法 编译....+的动态库,并自动将so和应用一起打包成 APK 即可通过 NDK在 Android中 使用 JNI与本地代码(如C、C++)交互 应用场景:在Android的场景下 使用JNI 即 Android...具体使用 本文根据版本的不同介绍了两种在Android Studio中实现 NDK的方法:Android Studio2.2 以下 & 2.2以上 4.1 Android Studio2.2 以下实现NDK...至此,将Andorid Studio的项目 与 NDK 关联完毕 下面,将真正开始讲解如何在项目中使用NDK ---- 步骤3:创建本地代码文件 即需要在Android项目中调用的本地代码文件...("Hello i am from JNI!")

    3.4K21

    Android Studio2.2下NDK开发初试

    很久没更博了,这次来记录一下如何在Android Studio2.2中进行NDK开发吧,NDK开发嘛,就是将C/C++的代码编译成so类库,供java调用(当然c调用java也是可以的),还记得以前没有...IDE的时候,需要在linux环境编译,非常麻烦,光是看完教程就不想弄了,但不得不说Android Studio是Android开发的神器,它将一切都弄的如此简单。...首先,配置Android.mk文件,如下所示 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni...:23.3.0' testCompile 'junit:junit:4.12' } 接下来,Android Studio为了我们开发方便,提供了小trick,就是我们可以在需要调用hello-jni...,如: public static native String getHelloString(); 接着,Android Studio可以帮助我们构建hello-jni.c文件,在错误的地方,alt+

    97750

    Android NDK开发扫盲及最新CMake的编译使用

    本篇文章旨在简介 Android 中 NDK 是什么以及重点讲解最新 Android Studio 编译工具 CMake 的使用 1 NDK 简介 -------- 在介绍 NDK 之前还是首推 Android...在Android Studio 2.2 之后,工具中增加了 CMake 的支持,你可以这么认为,在 Android Studio 2.2 之后你有2种选择来编译你写的 c/c++ 代码。...2.1 Hello world 我们通过一个Hello World项目来理解 CMake 首先创建一个新的包含原生代码的项目。...3 资料文献 ------ 首推 Android NDK 官方文档,虽然很多都不完整,但是绝对是必须看一遍的东西。 当初次接触 NDK 开发又觉得新建的 Hello World 项目过于简单时。...以上文档资料仅为了解决 NDK 开发过程中编译配置问题,具体 c/c++ 的逻辑编写、jni等不在此范畴。

    2.4K30

    【Android NDK 开发】Visual Studio 2019 使用 CMake 开发 JNI 动态库 ( 动态库编译配置 | JNI 头文件导入 | JNI 方法命名规范 )

    JNI 简介 : JNI 是一套框架 , 能够让开发者在 Java 中调用 C / C++ 代码 , JNI 范围较广 , 凡是可以运行 Java 代码的地方 ( 如 Linux , UNIX , Windows..., Android 等平台 ) , 都可以通过 JNI 接口 调用 C/C++ 代码 ; NDK 只是 Android 平台的 JNI 规范 , 属于 JNI 的一个分支 ; 2 ....NDK 简介 : NDK 是 Android 提供的开发工具包 , 其中包含了 ① Android 平台的交叉编译器 ; ② Android 平台的一系列动态库 及 静态库 ; 本篇博客只介绍 JNI...方法名规范 : Java_包名_类名_方法名 , 如包名为 " kim.hsl.jni " , 类名为 " Main " , 方法名为 " jniTest " , 那么 C/C++ 中对应的 Native..., 并在 CMake 中配置生成动态库 ; ① C++ 代码 : // 009_Cmake.cpp: 定义应用程序的入口点。

    2K30

    Android程序中,内嵌ELF可执行文件--Android开发C语言混合编程总结

    本文先从一个最简单的JNI例子来开始介绍Android中Java和C++的混合编程,随后再介绍Android直接调用ELF命令行程序的规范方法,以及调用混合了第三方库略微复杂的命令行程序。...Android Studio配置 第一个配置是安装Android的SDK,这是开发Android程序必须的。...先准备一个基本的Android程序 在Android Studio界面选择New Project,如果是在开始界面,直接点击主界面上的按钮;也可以在文件菜单中选择。...但作为一个完整的程序,我们更希望JNI部分,也能在整体Android Studio项目编译的时候编译,并一起打包进APK。 所以我们修改一下本项目的Gradle脚本,增加NDK编译的配置。...编译可执行文件 首先当然是准备一个C/C++代码,比如我们用一个最经典的Hello World。

    1.9K40

    Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结

    本文先从一个最简单的JNI例子来开始介绍Android中Java和C++的混合编程,随后再介绍Android直接调用ELF命令行程序的规范方法,以及调用混合了第三方库略微复杂的命令行程序。...Android Studio配置 第一个配置是安装Android的SDK,这是开发Android程序必须的。...但作为一个完整的程序,我们更希望JNI部分,也能在整体Android Studio项目编译的时候编译,并一起打包进APK。 所以我们修改一下本项目的Gradle脚本,增加NDK编译的配置。...编译可执行文件 首先当然是准备一个C/C++代码,比如我们用一个最经典的Hello World。...APK中多了一个assets文件夹,其中根据CPU类型分类,hello已经在里面了。 把可执行程序拷贝到Android系统 这个工作是最复杂的部分,至少比我们演示中显示一个字符串复杂多了。

    1.8K40

    Android系统源码分析-JNI

    1.JNI JNI(Java Native Interface,Java本地接口)是一种编程框架使得Java虚拟机中的Java程序可以调用本地应用/或库,也可以被其他程序调用。...3.Hello World 这里,我们先通过一个简单的Hello World实例来对JNI的调用流程有一个直观的印象,然后针对其中的实现原理和细节做分析。...world"; return (*env).NewStringUTF(str); } build文件中编译支持指定的平台(arm,x86等) ndk { moduleName "hello...这个过程中, 当JVM调用这些函数,传递了一个JNIEnv指针,一个jobject的指针,任何在Java方法中声明的Java参数。...另一种加载方式 对于JNI方法的注册无非是通过两种方式一个是上述启动过程中的注册,一个是在程序中通过System.loadLibrary的方式进行注册,这里,我们以System.loadLibrary来分析其注册过程

    1.2K70
    领券