热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidStudio创建JNI工程之最详细教程

AndroidStudio创建JNI工程之最详细教程,Go语言社区,Golang程序员人脉社

1.概述

    在上一篇文章中 JNI技术-入门教程 中,我们只做了简单的用Java文件生成.h的头文件。

    在真正工作中,想要用自己公司的.so库,又恰巧底层使用C/C++写的,那恭喜你,你得学习JNI技术了。以前都是我直接拿同事生成的.so库来使用,jni流程看过,但是没想过自己写Jni工程,这次设计新的 SDK,层次划分到jni要自己去做的时候才知道,jni要写也是很麻烦的,当然这也是指在自己没做过的情况下,这次就自己动手从0到1实现一遍用Android studio编写的工程吧!

2.NDK下载及配置

    想要用工程编写jni首先一定要有NDK,那么NDK是什么呢? 下面先介绍下NDK是什么!

> 定义 :

     Native Development Kit,是 Android的一个工具开发包【NDK是属于 Android 的,与Java并无直接关系】

> 作用:

    快速开发C、 C++的动态库,并自动将so和应用一起打包成 APK

    即可通过 NDK在 Android中 使用 JNI与本地代码(如C、C++)交互,其实最大原因就是可以在工程中帮助你生成jni的.h头文件

>应用场景:

    在Android的场景下 使用JNI 【即 Android开发的功能需要本地代码(C/C++)实现】

 >NDK特点:

>NDK的两种下载方式:

这是Google官方下载: 点击打开下载NDK链接

通过Android studio 下载

在创建的工程 点击 File -> Settings ->

一定要点Apply

OK,NDK下载完成

然后 右键工程-> Open Module -> Android NDK Location -> OK -> 等待编译

查看一下,等待编译


发现根目录local.properties里面多了NDK路径如下图:


接着我们在根目录gradle.properties下面加上如下图:

android.useDeprecatedNdk=true

继续我们在module下面的build.gradle下面加上ndk节点如下图:

ndk {
moduleName "JniTest"

}

  

3.编写Jni接口


然后Build -> Make Project一下(记住一定不能拉下这一步,要不你编写的接口内容不会同步到class文件中),我们会发现在/JniTest/app/build/intermediates/下面多了一个classes文件夹.我们可以打开AS下面的Terminal进入到classes下面的release文件夹下。注意:创建工程默认为debug模式的,有的可能编译不过,建议更改为release模式

如下图:


正常来说执行到这里  我们只需要输入 javah com.butel.jni.ButelTestJni  就可以生成了,但是有时候会报下图这样的错误:


那到这里  我们还是按照上一篇文章所说的执行 javah -classpath . -jni com.butel.jni.ButelTestJni

好了 到这里  我们的.h文件就生成了!



推荐阅读
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 卓盟科技:动态资源加载技术的兼容性优化与升级 | Android 开发者案例分享
    随着游戏内容日益复杂,资源加载过程已不仅仅是简单的进度显示,而是连接玩家与开发者的桥梁。玩家对快速加载的需求越来越高,这意味着开发者需要不断优化和提升动态资源加载技术的兼容性和性能。卓盟科技通过一系列的技术创新,不仅提高了加载速度,还确保了不同设备和系统的兼容性,为用户提供更加流畅的游戏体验。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • 在尝试为 Unity 编译一个简单的 Java 库时,运行 `ant jar` 命令后遇到了 Java I/O 异常。具体错误信息为“无法启动程序 ${aAPT},错误代码 2”,这通常表示指定的文件或目录不存在。此问题可能是由于环境配置不正确或路径设置有误导致的。建议检查相关路径和环境变量,确保所有依赖项都已正确安装和配置。 ... [详细]
  • 短视频app源码,Android开发底部滑出菜单首先依赖三方库implementationandroidx.appcompat:appcompat:1.2.0im ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 在 Mac 上配置 NDK
    本文详细介绍了如何在 Mac 上配置 Android NDK,包括设置环境变量和解决常见问题的方法。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • Android Studio 安装指南:详细步骤与常见问题解答
    Android Studio 安装指南:详细步骤与常见问题解答 ... [详细]
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
  • 在多堆石子游戏中,通过分析Nim博弈策略,探讨了如何在限定时间和内存条件下实现最优解。本文详细研究了石子游戏中的数学原理和算法优化方法,旨在为参与者提供有效的策略指导。具体而言,文章讨论了不同堆数下的Nim值计算及其应用,帮助玩家在复杂的博弈环境中取得优势。 ... [详细]
author-avatar
Cornell和Janey的BabyPeter_580
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有