最近一些的总结
一、前言
这个篇文章是去年第4季度的总结,最近工作太忙了都忘记这个了,感觉又是一个季度没有学习了。
因为以前JNI开发的时候,我都需要去看别人的写法,虽然能改一些,更多是改不了,而且没有逼格,而且很多时候改的也没有底,所以这次通过移植lame、soundTouch、curl、openssl进行学习和锻炼。
这次涉及的知识点大概有:
- CMake
- MakeFile
- NDK
- GIthub Action
- Shell
- WSL
- Android Gradle Plugin 4.0+:prefab功能
- C++
- Git 之submodule
- gcc、llvm和clang
- PostMan
后面我对这些知识点进行简单介绍,同时我描述移植的相关过程和碰到问题。
二、知识点简单介绍
这里只做简单介绍,具体的建议自己去看,自己去搜。
1. Cmake
CMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个库。 它用配置文件控制建构过程(build process)的方式和Unix的make相似,只是CMake的配置文件取名为CMakeLists.txt。
当然基础是方便看懂,还有需要特殊的操作需要实战才能真正的学习了解。
2. MakeFile
Makefile是在Linux
环境下 C/C++ 程序开发必须要掌握的一个工程管理文件。
配合Linux
下的工具 autoconf
automake
libtool
进行构建
执行./configure
是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或者是不是有编译的条件,它是个shell脚本,最后会生成一个MakeFile.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0wA7OXIg-1641522338355)(…/…/…/image/config生产makefile.png)]
执行make clean
是用来清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件。
执行make
是用来编译的,它从Makefile中读取指令,然后编译源代码、连接、生成目标文件、可执行文件。
执行make install
是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
大概过程.c文件-> 输出 .o 文件 -> 然后 .o 文化生成 静态库
3. NDK
- NDK:(Native Development Kit),原生开发工具包是一组可以让您在Android应用中利用C和c++代码的工具。
- LLDB:Android Studio 用于调试原生代码的调试程序。
原生共享库:NDK 从 C/C++ 源代码构建这些库或 .so 文件。
原生静态库:NDK 也可构建静态库或 .a 文件,而您可将静态库关联到其他库。
Java 原生接口 (JNI):JNI 是 Java 和 C++ 组件用于相互通信的接口。
如需了解更多相关信息,请查阅 Java 原生接口规范。
这些文章会告诉你如果编写脚本,如何去选择不同的clang, ~ 如果你想自己写脚本而不是抄别人。
4.Shell
Shell既是一种命令语言,又是一种程序设计语言 。
我们需要利用它来构建脚本。
很简单,如果有编程语言基础,然后只是改别人的话,甚至不需要去学。如果想自己写的话,还是要懂一点点,日常用的也不多。
5. GIthub Action
GitHub Actions: 是 GitHub 的持续集成服务。
这里我提供一些示例。
- APK构建并上传到Fir
拉取git代码->assemble->上次到fir - APK构建并保存Artifacts
拉取git代码->拉取gitsubmodule(私有)代码->assemble->保存到github的Artifacts(会失效 - 定时任务
这里直接可以看到大佬的文章,我刚开始也看到这个文章开始学习使用 - 交叉编译任务
拉取git的submodule的代码->make->保存到github的Artifacts(会失效)
当然还有更多骚操作需要去自己去了解,去使用
6. WSL
WSL是“Windows Subsystem for Linux”的缩写,顾名思义,WSL就是Windows系统的Linux子系统。
为什么用它?
我是WIN电脑,虽然我可以通过github Action 进行配置Linux
环境做一些但是,然后测试过程还是需要Linux 环境做一些准备。
github Action更适合做正确,重复的操作,不适合调试。
7. AGP(4.0+):prefab
AAR 库可以包含 Android Gradle 插件可以使用的原生依赖项。AGP 还能生成用于向使用者公开原生库的 AAR。
但是使用过程感觉有BUG,我不做过多介绍,自己看介绍。
但是这个功能是真的香,好像只是目前还存在一些问题,所以还没有大规模的推广。
8. C++
这个我就不介绍了,我也是菜鸡,语法感觉不能,但是因为对库不了解,导致需要经常去搜索方法。
9. Git 之submodule
学习submodule
,相信,你在多项目,多模块的构建上,会有更多的选择
需要知道gitSubmodelues的作用、添加、删除、更新。
可以自己选择中文文档查看。
10. gcc、llvm和clang
NDK R18之后默认clang 没有gcc了,不再支持mips
最低Android 16
STL (Standard Template Library/标准模版库)
NDK开发时,可以用下面方式指定c++运行库。
运行库在“c++_shared”,“c++_static”,“none”或“system”中选择其一,其中“c++_shared”,“c++_static”分别对应libc++的动态库和静态库。
10. PostMan
这里我用的mock,移植curl的时候用来测试get和post请求
三、实战案例
tip
文档内容都是点到为止,感兴趣的需要自己了解,去学。我这里只是提示一些知识点。