网站首页 > 技术文章 正文
最近项目需要用到NDK的一些东西,所以就随便看了看,虽然网上一大堆,但是谁叫我是一个爱学习的人呢?不做笔记就浑身不舒服,因此写下一些笔记,给初学的人少走一些弯路吧!
好了言归正传,我手里拿到一个eclipse开发的项目,转移到AS各种报错,心累,最后解决了大部分爆红,突然发现出现了这么几个玩意(看下图结构),以前没接触过,很尴尬,然后就找资料,然后就发现新大陆般成谜其中无可自拔!!!最后我也发现通过NDK可以干另外一件很有意思的事情,如果你的公司对推送很重视的话(问:为啥不直接用第三方推送?答:用户KILL App后不能收到推送。然后谁叫我们公司是创业公司呢?所有的东西能用程序写出来的能不花钱就不花钱。),可以解决百分之七十左右KILL APP之后不能收到推送的问题。
DNK
一:首先配置如上图,NDK得下载,配置完这个如果出现这个错误(No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android)说明缺少文件哈附上NDK下载链接,下载完解压,对比你本地这个toolchains的文件缺少啥就粘贴复制(一般缺少 mips64el-linux-android这个文件)。NDK下载
配置NDK
toolchains文件夹下
配置SDK
配置完成以后就开始我们的开发了
二:首先声明原生方法,必须加上native,告诉程序这是一个原生方法。在具体java代码调用时,和调用java的其他方法一样,直接调用就可以了。activity代码:
看到飘红的就是我们申明的原生方法
System.loadLibrary("talk");这个就是加载库,需要注意的是加载的库名即编译生成的库名,去掉前缀lib和后缀so。
这个地方我是自己建的jnilibs,一般你们都是直接放在libs下面的哈
然后我们make project一下,(不要告诉我你不知道make project在哪里哈!!!),我们的目的就是编译成对应的class文件。然后根据生成的class文件,利用javah生成对应的 .h头文件。这个过程我相信大家很熟悉吧。哈哈!下面我们来点重头戏,生成.h文件。
三:我们在AS的控制台打开Terminal或者工具栏打开view ->ToolsWindows->Terminal
执行命令cd app\src\main,然后我们进入src\main\目录下;这个时候需要很细心了,因为我们马上要执行一段很长的命令了,javah -d jni -(classpath这是你要生成头文件java类的绝对路径,可以直接把包名粘贴过来,然后把.上你的java类 )\Users\beijingnixun\smart_home.ihomephone.v700.Talk;
下面我们来讲解一下:
<1>javah 是生成头文件需要的工具。
<2>-d jni 是在你的工程下生成jni目录,到时会在这个目录下建JNI开始的C/C++源文件的。
四:然后剩下步骤按照下图
生成c/c++
填写名称
配置cpp文件
最后如果报错可能这个地方未填写
五,生成.so文件
这一步最重要,前面的都是铺垫,我们最主要的就是生成 .so文件然后放在jinlib里面。
我们现在gradle里面添加modulName以及添加支持cpu库,写到这里突然想起来差两个东西,这两个东西也很重要就是.mk文件,这里我们不讲.mk文件哈,有兴趣的自己去百度。我们讲这两个写,首先在jni里面建立两个文件一个命名为Android.mk一个命名为Application.mk。看下图:
Application.mk
说一下里面的参数:APP_ABI这个是.so文件支持的库。APP_PLATFORM这个是因为如果你报错关于targetSDK之类的错误,你就加上这句话,然后android-1(这个1你要写你studio下报错里面有一个minSdk版本号)
Android.mk
Android.mk这个里面你直接复制粘贴就好:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := talk //依赖项的名称,跟你gradle里面填写的moduleName以及你talk.java文件里面lib引用的名称保持一致 LOCAL_SRC_FILES := jnitalk.c//在你jni里面生成的.c文件名 include $(BUILD_SHARED_LIBRARY)
现在我们准备好了所有的工作,下一步我们就生成.so文件。反键选择JNI文件夹--》Open in terminal。如下图:
进入jni文件在terminal
然后我们输入命令ndk-build然后你就会看到你生成了.so文件,如果报错找不到ndk那是你没配置好ndk环境,这个希望你们自己去百度。好了,现在ndk流程基本完了。我们就剩下调用了。这个调用不用我教你吧,类名点方法。你就可以看到c层给你返回的消息了。本篇文章暂时介绍到这里,下一章我打算更新一篇双进程守护。谢谢各位同学花时间观看,。
猜你喜欢
- 2024-10-27 NDK开发——FFmpeg视频解码 ffmpeg ndk
- 2024-10-27 Camera基本代码架构 camera calibrator
- 2024-10-27 android 功耗分析方法和优化(1) 功耗app
- 2024-10-27 Cocos Creator v2.3.2 发布了!全新 Launcher 效率飞起!
- 2024-10-27 如何androd动态注册编写计算器 淘宝动态评分计算器在线
- 2024-10-27 高通平台OV8856 Camera的bring up总结
- 2024-10-27 高通平台移植GC2145 Camera驱动 高通驱动安装
- 2024-10-27 《坎公骑冠剑》光炮Android Mk.99技能与背景故事
- 2024-10-27 ubuntu移植libwebp到Android平台 ubuntu移植到arm
- 2024-10-27 步步为营,十分钟学会 Native JNI(附带彩蛋)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)