Android调用Jni,非常简单的一个Demo

简介:
step1:创建一个android项目
      Project Name:jnitest
      Build Target: Android 1.6
      Application Name: JNI Test
      Package Name: org.eshock.jnitest
      Create Activity: JNITest



JNITest.java类代码:
  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. public class JNITest extends Activity {  
  4.     public native int plus (int x, int y);//这个是需用c语言实现的函数    
  5.       
  6.     /** Called when the activity is first created. */  
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         int x = plus(12);  
  11.         android.util.Log.d("jni", String.valueOf(x));  
  12.     }  
  13.       
  14.     static {  
  15.         System.loadLibrary("mylib");  
  16.     }  
  17. }  



step2:用C语言实现这个plus函数
           创建<project>/jni/mylib.c: 内容如下 
  1. #include <jni.h>  
  2. #include "JNITest.h"  
  3. #ifdef __cplusplus  //最好有这个,否则被编译器改了函数名字找不到不要怪我  
  4. extern "C" {  
  5. #endif  
  6.   
  7. JNIEXPORT jint JNICALL  
  8. Java_org_eshock_jnitest_JNITest_plus( JNIEnv* env,  
  9.                                                   jobject thiz,  
  10.                                                   jint x,  
  11.                                                   jint y )  
  12. {  
  13.     return x + y;  
  14. }  
  15.   
  16.   
  17. #ifdef __cplusplus  
  18. }  
  19. #endif  




step3:随便在某个目录下创建一个文件JNITest.java:内容如下:
  1. public class JNITest {  
  2.    public native int plus (int x, int y);  
  3. }  


在cmd窗口中进入JNITest类所在的文件路径   然后执行命令:javac JNITest.java && javah JNITest 
将生成一个文件JNITest.h,该文件放到jni目录下面,在bin路径下新建一个header文件夹,把JNITest.h文件复制一份到header文件夹下面:

  1. /* DO NOT EDIT THIS FILE - it is machine generated */  
  2. #include <jni.h>  
  3. /* Header for class JNITest */  
  4.   
  5. #ifndef _Included_JNITest  
  6. #define _Included_JNITest  
  7. #ifdef __cplusplus  
  8. extern "C" {  
  9. #endif  
  10. /* 
  11.  * Class:     JNITest 
  12.  * Method:    plus 
  13.  * Signature: (II)I 
  14.  */  
  15. JNIEXPORT jint JNICALL Java_JNITest_plus  
  16.   (JNIEnv *, jobject, jint, jint);  
  17.   
  18. #ifdef __cplusplus  
  19. }  
  20. #endif  
  21. #endif  


step4:在jni包下创建Android.mk文件
  1. LOCAL_PATH := $(call my-dir)         #LOCAL_PATH表示c源代码文件的位置  
  2.   
  3. include $(CLEAR_VARS)  
  4.   
  5. LOCAL_MODULE    := mylib              #LOCAL_MODULE表示生成的共享库的名称  
  6. LOCAL_SRC_FILES := mylib.c            #LOCAL_SRC_FILES代表c代码的文件  
  7.   
  8. include $(BUILD_SHARED_LIBRARY)  


step5:在jni包下创建Application.mk文件  文件放jni包下
      APP_ABI := armeabi armeabi-v7a mips x86   #定义cpu类型


step6:把jni文件夹下的文件生成.so文件
      (1) 在cmd窗口进入项目所在目录  e:  进入e盘目录
      (2) cd E:\workspace\jnitest    //进入项目所在目录

      (3) E:\workspace\jnitest>ndk-build NDK_MODULE_PATH=jni   //输入命令ndk-build NDK_MODULE_PATH=jni



注意事项:如果ndk环境变量没有配置,需要配置ndk环境变量

            变量名:NDK_MODULE_PATH
            变量值:C:\android-ndk-r9b   (根据安装路径进行调整)

            添加到path路径:  %NDK_MODULE_PATH%;
            如果path路径下没有冒号,自己添加一个

目录
相关文章
|
9月前
|
Android开发
Android JNI与CAN通信遇到的问题总结
Android JNI与CAN通信遇到的问题总结
370 1
|
9月前
|
Android开发
Android JNI 报错(signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr )
Android JNI 报错(signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr )
1407 1
|
6月前
|
XML API Android开发
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
本文介绍了如何使用androidx.preference库快速创建具有一级和二级菜单的Android设置界面的步骤和示例代码。
209 1
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
|
6月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
460 1
|
5月前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
9月前
|
Java 开发工具 Android开发
OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)
OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)
1139 0
|
9月前
|
Java Android开发
Android JNI 调用
Android JNI 调用
70 1
|
9月前
|
传感器 Java 开发工具
[NDK/JNI系列03] Android Studio集成NDK开发环境
[NDK/JNI系列03] Android Studio集成NDK开发环境
91 0
|
9月前
|
Android开发
[Android jni] Bitmap与Mat对象的相互转换
[Android jni] Bitmap与Mat对象的相互转换
268 0
|
9月前
|
Java 开发工具 Android开发
[Android]JNI的基础知识
[Android]JNI的基础知识
136 0
[Android]JNI的基础知识

热门文章

最新文章

  • 1
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 2
    Android历史版本与APK文件结构
  • 3
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 4
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 9
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 10
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 1
    android FragmentManager 删除所有Fragment 重建
    15
  • 2
    Android实战经验之Kotlin中快速实现MVI架构
    21
  • 3
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    24
  • 4
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    39
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    121
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    40
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    55
  • 8
    Android历史版本与APK文件结构
    148
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    46
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    40