结语
- 现在随着短视频,抖音,快手的流行NDK模块开发也显得越发重要,需要这块人才的企业也越来越多,随之学习这块的人也变多了,音视频的开发,往往是比较难的,而这个比较难的技术就是NDK里面的技术。
- 音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以AndroidNDK技术已经是我们必备技能了。
- 要学习好NDK,其中的关于C/C++,jni,Linux基础都是需要学习的,除此之外,音视频的编解码技术,流媒体协议,ffmpeg这些都是音视频开发必备技能,而且
- OpenCV/OpenGl/这些又是图像处理必备知识,下面这些我都是当年自己搜集的资料和做的一些图,因为当年我就感觉视频这块会是一个大的趋势。所以提前做了一些准备。现在拿出来分享给大家。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-
linux_android_development
master
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$
四、编译Android源码
=============
`Android` 源码编译,每个项目由于脚本各不相同,编译的命令 有时候也会有说差异。
##### google 官方编译命令如下
1.source ./build/envsetup.sh
2.lunch 项目
3.make -j8
##### 高通项目编译命令 如下:
`./buildall_userdebug.sh E5527M all`
五、source Android 编译环境
=====================
首先进入`Android` 源码根目录,执行`source ./build/envsetup.sh`,
如不`source`,后续则无法单编模块。
高通项目举例如下:
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ source ./build/envsetup.sh
including device/generic/car/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/generic/uml/vendorsetup.sh
including device/google/muskie/vendorsetup.sh
including device/google/taimen/vendorsetup.sh
including device/qcom/common/vendorsetup.sh
including device/qcom/qssi/vendorsetup.sh
including vendor/partner_gms/products/vendorsetup.sh
including vendor/qcom/opensource/core-utils/vendorsetup.sh
including vendor/qcom/proprietary/common/vendorsetup.sh
including vendor/qcom/proprietary/prebuilt_HY11/vendorsetup.sh
Created 9 symlinks out of 9 mapped links…
including sdk/bash_completion/adb.bash
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$
六、lunch 所需的编译项目
===============
执行 `lunch` 命令,查看所有 编译项目列表,然后选择 编译项目。
高通项目 举例如下:
##### 1\. lunch ,然后选择所需编译分支
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ lunch
You’re building on Linux
Lunch menu… pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_mips-eng
... ...
40. msm8937_64-userdebug
41. msm8937_64-user
... ...
65. taimenb2-userdebug
// 选择要编译的分支名
Which would you like? [aosp_arm-eng] msm8937_64-userdebug
device/qcom/msm8937_64/msm8937_64.mk:42: warning: “Build with 4.9 kernel”
… …
OUT_DIR=out
============================================
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$
##### 2\. 直接lunch 分支
比如我们需要编译`msm8937_64-userdebug`项目,其实我们可以执行最简单的方法,直接`lunch`这个项目所排列的位置,比如`lunch 40`
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ lunch 40
device/qcom/msm8937_64/msm8937_64.mk:42: warning: “Build with 4.9 kernel”
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=9
TARGET_PRODUCT=msm8937_64
… …
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=PKQ1.190601.001
OUT_DIR=out
============================================
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$
七、单编 模块
=======
我们常用 `mmm` 以及`mm` 来及对单模块进行编译。
`mmm` 与`mm` 主要区别在于你当前所在的目录位置。
如果当前正在所要编译模块的地方`(需要有android.mk文件,才可以进行)`,请使用 `mm`,否则使用`mmm`。
高通项目举例如下:
##### 1\. mmm使用举例(此时不在FM 目录)
比如单编`FM`,不在`FM`目录下,需要执行`mmm vendor/qcom/opensource/commonsys/fm/fmapp2/`
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ mmm vendor/qcom/opensource/commonsys/fm/fmapp2/
/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2/
Restriction Checker not present, skipping…
device/qcom/msm8937_64/msm8937_64.mk:42: warning: “Build with 4.9 kernel”
============================================
… …
OUT_DIR=out
============================================
QSSI: not enabled for msm8937_64 target as vendor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_list.txt was not found.
… …
build completed successfully (7 seconds)
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$
##### 2\. mm使用举例(在FM 目录下)
比如单编`FM`,在`FM`目录下,需要执行`mm`
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ cd vendor/qcom/opensource/commonsys/fm/fmapp2/
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2$ mm
Restriction Checker not present, skipping…
device/qcom/msm8937_64/msm8937_64.mk:42: warning: “Build with 4.9 kernel”
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=9
… …
OUT_DIR=out
============================================
QSSI: not enabled for msm8937_64 target as vendor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_list.txt was not found.
ninja: no work to do.
… …
build/make/core/base_rules.mk:412: warning: ignoring old commands for target `out/target/product/msm8937_64/vendor/lib64/hw/fingerprint.default.so’
ninja: no work to do.
build completed successfully (41 seconds)
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2$
八、 push 模块 验证修改是否生效
===================
##### 1\. 使用debug版本,挂载手机
`adb shell getprop ro.build.type` 主要用来查看当前使用的版本,调试只能使用`debug` 版本,`user`版本无法调试。
高通项目举例如下:
C:\Users\Administrator>adb shell getprop ro.build.type
userdebug
最后笔者收集整理了一份Flutter高级入门进阶资料PDF
以下是资料目录和内容部分截图
里面包括详细的知识点讲解分析,带你一个星期入门Flutter。还有130个进阶学习项目实战视频教程,让你秒变大前端。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
8269948)]
[外链图片转存中…(img-jrY5s9W1-1715618269948)]
里面包括详细的知识点讲解分析,带你一个星期入门Flutter。还有130个进阶学习项目实战视频教程,让你秒变大前端。
[外链图片转存中…(img-GCAeQbus-1715618269948)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!