external 库介绍

目录

概述

├── aac		// 用于Android的全称Fraunhofer FDK AAC编解码器库,多媒体相关
├── adeb	// 为Android设备提供Ubuntu那样的shell环境,可以运行python,apt-get安装软件等等
├── adhd	// 用于监视A / V设备事件的守护程序,该目录下有个cras,为ChromeOS Audio Server,用来播放音乐的
├── android-clat	// 用NAT64/DNS64支持ipv4转ipv6,ipv4包 -> clat进程客户端 -> Nat 4->6变为ipv6包 -> 经ipv6网络 -> Nat 6->4 -> plat server转为ipv4 -> ipv4服务器
├── androidplot		// Android中用来画表格的库
├── angle	// Almost Native Graphics Layer Engine,几乎全部的本地图形层引擎。支持openGL ES转Vulkan,桌面级opengl,direct3D等
├── ant-glob	// ant库中用来匹配路径glob通配符的库,ant用来打包和编译java
├── antlr	// 计算机语言的解析,和编译原理相关
├── apache-commons-bcel		// 解析java的字节码,java文件变为.class文件,java的库
├── apache-commons-compress	// tar,zip,cpio,bzip2,7zip格式的压缩包解压缩,java的库
├── apache-commons-math		// 数学相关的java库,有矩阵,统计等
├── apache-harmony	// java SDK实现,只有测试代码
├── apache-http		// 关于http的java库,有android.net.http的实现
├── apache-xml		// 解析xml的java库,源码中比较少引用到
├── arm-neon-tests	// arm的neon指令的测试,并行加速矩阵运算
├── arm-optimized-routines	// arm优化例子,有math和string库的优化
├── arm-trusted-firmware	// 安全启动相关(√)和optee相关
├── autotest	// linux自动化测试框架
├── avb		// 安卓验证启动
├── bc		// linux计算器
├── bcc		// linux内核trace工具,可以使用adeb工具来用
├── blktrace	// 追踪块设备调用的工具
├── boringssl	// https加密库,从openssl分出来的
├── bouncycastle	// 提供了很多哈希算法和加密算法的第三方库
├── brotli	// Google推出的无损压缩算法,比gzip更快更小
├── bsdiff	// 用来生成差分包以及APK的增量更新
├── bzip2	// .tar.bz2工具,只压缩不归档
├── caliper		// Google开发的性能测试工具
├── capstone	// 反汇编框架
├── catch2	// 轻量级c++单元测试框架
├── cblas	// 矩阵运算库
├── cbor-java	// 基于json的简明二进制对象展现,java语言实现
├── chromium-libpac		// 浏览器代理自动配置
├── chromium-trace		// Android systrace性能分析工具
├── chromium-webview	// webview浏览器apk
├── clang	// LLVM的编译前端,支持代码静态检查
├── cldr	// 通用语言环境数据仓库,Common Locale Data Repository
├── cn-cbor	// 基于json的简明二进制对象展现,c语言实现
├── compiler-rt		// Compiler-RT(runtime)项目为硬件不支持的低级功能提供目标特定的支持。
├── conscrypt		// 安卓加密安全相关的库
├── cpu_features	// 跨平台的用来检索CPU功能的c库-解析/proc/cpuinfo文件得到
├── cpuinfo		// 有关/proc/cpuinfo的信息
├── crcalc	// 构造实数计算器-用级数来计算实数
├── cros	// 
├── crosvm
├── curl
├── dagger2
├── deqp
├── deqp-deps
├── desugar
├── dexmaker
├── dlmalloc
├── dng_sdk
├── dnsmasq
├── doclava
├── dokka
├── drm_hwcomposer
├── drrickorang
├── dtc
├── dynamic_depth
├── e2fsprogs
├── easymock
├── eigen
├── elfutils
├── emma
├── error_prone
├── ethtool
├── exoplayer
├── expat
├── f2fs-tools
├── fastrpc
├── fdlibm
├── fec
├── flac
├── flatbuffers
├── fmtlib
├── fonttools
├── FP16
├── freetype
├── fsck_msdos
├── fsverity-utils
├── FXdiv
├── gemmlowp
├── gflags
├── giflib
├── glide
├── golang-protobuf
├── google-benchmark
├── google-breakpad
├── google-fonts
├── google-fruit
├── google-styleguide
├── googletest
├── gptfdisk
├── grpc-grpc
├── grpc-grpc-java
├── guava
├── guice
├── gwp_asan
├── hamcrest
├── harfbuzz_ng
├── honggfuzz
├── hyphenation-patterns
├── icu
├── igt-gpu-tools
├── image_io
├── ImageMagick
├── ims
├── iperf3
├── iproute2
├── ipsec-tools
├── iptables
├── iputils
├── iw
├── jacoco
├── jarjar
├── javaparser
├── javapoet
├── javasqlite
├── jcommander
├── jdiff
├── jemalloc
├── jemalloc_new
├── jline
├── jsilver
├── jsmn
├── jsoncpp
├── jsr305
├── jsr330
├── junit
├── junit-params
├── kernel-headers
├── kmod
├── kotlinc
├── kotlinx.coroutines
├── ksoap2
├── libaom
├── libavc
├── libbackup
├── libbrillo
├── libcap
├── libcap-ng
├── libchrome
├── libcups
├── libcxx
├── libcxxabi
├── libdaemon
├── libdivsufsort
├── libdrm
├── libepoxy
├── libese
├── libevent
├── libexif
├── libffi
├── libfuse
├── libgav1
├── libgsm
├── libhevc
├── libiio
├── libjpeg-turbo
├── libkmsxx
├── libldac
├── libmpeg2
├── libnetfilter_conntrack
├── libnfnetlink
├── libnl
├── libogg
├── libopus
├── libpcap
├── libphonenumber
├── libpng
├── libprotobuf-mutator
├── libsrtp2
├── libtextclassifier
├── libunwind
├── libunwind_llvm
├── libusb
├── libutf
├── libvpx
├── libvterm
├── libxaac
├── libxkbcommon
├── libxml2
├── libyuv
├── linux-kselftest
├── llvm
├── lmfit
├── ltp
├── lua
├── lz4
├── lzma
├── markdown
├── mdnsresponder
├── mesa3d
├── mime-support
├── minigbm
├── minijail
├── mksh
├── mockftpserver
├── mockito
├── mockwebserver
├── modp_b64
├── mp4parser
├── mtpd
├── nanohttpd
├── nanopb-c
├── naver-fonts
├── neon_2_sse
├── neven
├── newfs_msdos
├── nfacct
├── nist-pkits
├── nist-sip
├── nos
├── noto-fonts
├── oauth
├── objenesis
├── oj-libjdwp
├── okhttp
├── one-true-awk
├── opencensus-java
├── OpenCL-CTS
├── OpenCSD
├── openssh
├── oss-fuzz
├── owasp
├── parameter-framework
├── pcre
├── pdfium
├── perfetto
├── piex
├── ply
├── ppp
├── proguard
├── protobuf
├── psimd
├── pthreadpool
├── puffin
├── python
├── rappor
├── Reactive-Extensions
├── replicaisland
├── rmi4utils
├── robolectric-shadows
├── roboto-fonts
├── rootdev
├── rust
├── scapy
├── scrypt
├── scudo
├── seccomp-tests
├── selinux
├── setupcompat
├── setupdesign
├── sfntly
├── shaderc
├── shflags
├── skia
├── skqp
├── sl4a
├── slf4j
├── smali
├── snakeyaml
├── sonic
├── sonivox
├── speex
├── sqlite
├── squashfs-tools
├── strace
├── stressapptest
├── subsampling-scale-image-view
├── swiftshader
├── tagsoup
├── tcpdump
├── tensorflow
├── testng
├── tinyalsa
├── tinycompress
├── tinyxml
├── tinyxml2
├── toolchain-utils
├── toybox
├── tremolo
├── turbine
├── u-boot
├── ukey2
├── unicode
├── universal-tween-engine
├── v4l2_codec2
├── v8
├── vboot_reference
├── virglrenderer
├── vixl
├── vogar
├── volley
├── vulkan-headers
├── vulkan-validation-layers
├── walt
├── wayland
├── wayland-protocols
├── webp
├── webrtc
├── wpa_supplicant_8
├── wycheproof
├── xmp_toolkit
├── XNNPACK
├── xz-embedded
├── xz-java
├── yapf
├── zlib
├── zopfli
└── zxing

1. aac-fdk-aac库解码aac

用于Android的全称Fraunhofer FDK AAC编解码器库,多媒体相关,fdk-aac库

2. adeb-Ubuntu的shell环境

为Android设备提供Ubuntu那样的shell环境,可以运行python,apt-get安装软件等等

大概原理就是,它会下载一个img,作为它的rootfs,里面包含了Ubuntu运行的所需的东西

2.1 adeb的安装和使用

1. 在Ubuntu电脑上下载adeb代码
https://github.com/joelagnel/adeb.git
sudo apt-get install qemu-user-static debootstrap
cd adeb
sudo ln -s $(pwd)/adeb /usr/bin/adeb
// 用来下载包的
export ADEB_REPO_URL="github.com/joelagnel/adeb/"
git checkout 0.99g		这个tag的代码有--kernelsrc

2. 使用adeb
adeb prepare --full --kernelsrc ../linux-kernel/linux-5.4/
第一次下载完包之后,就可以从/tmp目录下找到androdeb-fs.tgz文件
然后把androdeb-fs.tgz文件拷贝到fs_build/androdeb-fs.tgz目录下
然后下次执行命令:
adeb prepare --kernelsrc ../build/ --archive fs_build/androdeb-fs.tgz
adeb shell
就可以进行apt-get install python3等等操作了,还是换apt-get的安装源
modprobe命令	可以安装kmod

3. adhd-播放音乐的

用于监视A / V设备事件的守护程序,该目录下有个cras,为ChromeOS Audio Server,用来播放音乐的

4. android-clat-ipv4转ipv6进行传输的

用NAT64/DNS64支持ipv4转ipv6,ipv4包 -> clat进程客户端 -> Nat 4->6变为ipv6包 -> 经ipv6网络 -> Nat 6->4 -> plat server转为ipv4 -> ipv4服务器

5. androidplot-画表格的

Android中用来画表格的库

6. angle-openGL ES转Vulkan,桌面级opengl,direct3D等

 Almost Native Graphics Layer Engine,几乎全部的本地图形层引擎。支持openGL ES转Vulkan,桌面级opengl,direct3D等

7. ant-glob-ant库中用来匹配路径glob通配符的库,ant是用来打包和编译java的工具

glob模式,就是通配符,如*.java等就表示glob模式

8. antlr-计算机语言的解析

用来解析计算机语言的工具

9. apache-commons-bcel-解析java类文件,java文件变为.class文件

Byte Code Engineering Library为用户提供一种方便的方式来分析,创建和操作(二进制)Java类文件(以.class结尾的文件)

例如javac命令,可以将java文件,生成.class文件,其中就是用到了bcel库中的ClassParser类

10. apache-commons-compress-tar,zip,cpio,bzip2,7zip格式的压缩包解压缩,java库

tar,zip,cpio,bzip2格式的压缩包解压缩,以及对压缩包的加密工作

11. apache-commons-math-数学相关的java库,有矩阵,统计等

数学相关的java库,有矩阵,统计等

12. apache-harmony-java SDK实现,只有测试代码

java SDK实现,只有测试代码

13. apache-http-关于http的java库,有android.net.http的实现

关于http的java库,有android.net.http的实现

14. apache-xml-解析xml的java库,源码中比较少引用到

解析xml的java库,源码中比较少引用到

15. arm-neon-tests-arm的neon指令的测试,并行加速矩阵运算

NEON是一种SIMD(Single Instruction Multiple Data)指令,也就是说,NEON可以把若干源(source)操作数(operand)打包放到一个源寄存器中,对他们执行相同的操作,产生若干目的(dest)操作数,这种方式也叫向量化(vectorization)。
简单来说,就是:NEON指令优化的精髓就在于同时在不同通道内进行并行运算。通常可用于图像等矩阵数据的循环优化。
加法:4个数字并行运算
add: vaddq_f32 or vaddq_f64
float32x4_t v1 = { 1.0, 2.0, 3.0, 4.0 }, v2 = { 1.0, 1.0, 1.0, 1.0 };
float32x4_t sum = vaddq_f32(v1, v2);
// => sum = { 2.0, 3.0, 4.0, 5.0 }
乘法:
multiply: vmulq_f32 or vmulq_f64
float32x4_t v1 = { 1.0, 2.0, 3.0, 4.0 }, v2 = { 1.0, 1.0, 1.0, 1.0 };
float32x4_t prod = vmulq_f32(v1, v2);
// => prod = { 1.0, 2.0, 3.0, 4.0 }

16. arm-optimized-routines-arm优化例子,有math和string库的优化

arm优化例子,有math和string库的优化,最新的还有网络库的优化

17. arm-trusted-firmware-安全启动相关

安全启动相关

18. autotest-linux自动化测试框架

linux自动化测试框架

19. avb-安卓验证启动

安卓验证启动

20. bc-linux计算器

linux计算器

21. bcc-linux内核trace工具,可以使用adeb工具来用

linux内核trace工具,可以使用adeb工具来用

22. blktrace-追踪块设备调用的工具

追踪块设备调用的工具

23. boringssl-https加密库,从openssl分出来的

https加密库,从openssl分出来的

24. bouncycastle-提供了很多哈希算法和加密算法的第三方库

提供了很多哈希算法和加密算法的第三方库

25. brotli-Google推出的无损压缩算法,比gzip更快更小

Google推出的无损压缩算法,比gzip更快更小

26. bsdiff-用来生成差分包以及APK的增量更新

用来生成ota差分包以及APK的增量更新
https://blog.csdn.net/lmj623565791/article/details/52761658
1. 用户手机上提取当前安装应用的apk
2. 如何利用old.apk和new.apk生成增量文件,生成增量文件,./bsdiff old.apk new.apk old-to-new.patch
3. 增加文件与1.中的old.apk合并,然后安装,合并,./bspatch old.apk new2.apk old-to-new.patch

27. bzip2-.tar.bz2工具,只压缩不归档

.tar.bz2工具,只压缩不归档
tar –cjf jpg.tar.bz2 *.jpg   // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,命名为jpg.tar.bz2 
tar -xjvf file.tar.bz2    // 解压 tar.bz2 

28. caliper-Google开发的性能测试工具

Google开发的性能测试工具
libcore/benchmarks/src/benchmarks和./frameworks/base/tests/benchmarks/Android.bp有用到这个库

29. capstone-反汇编框架

反汇编框架
1. 深入了解ARM架构的反汇编器	https://zhuanlan.zhihu.com/p/144943960
objdump也是反汇编工具,将binary转成汇编的形式,就是不太准
用编译工具	gcc-linaro-5.3.1-2016.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objdump -d sdcard

30. catch2-轻量级c++单元测试框架

轻量级c++单元测试框架
使用上要比google test更简单	https://blog.csdn.net/wanywhn/article/details/83655406

31. cblas-矩阵运算库

矩阵运算库

32. cbor-java-基于json的简明二进制对象展现

基于json的简明二进制对象展现
物联网领域的JSON格式——CBOR,CBOR是专门为受限制物联网终端设计的数据交换格式,该格式轻量间接,可以简单理解为二进制形式JSON格式。CBOR格式可以与COAP协议组合使用,犹如HTTP+JSON;另外,CBOR也是COSE的基础。
参考:物联网专用数据交换格式CBOR https://www.jianshu.com/p/76adec5e61f8

33. chromium-libpac-浏览器代理自动配置

浏览器代理自动配置,配置http,https和ftp流量是直接走,还是走代理服务器

34. chromium-trace-Android systrace性能分析工具

Android systrace性能分析工具
使用方法:参考https://developer.android.com/topic/performance/tracing/command-line

该命令在android-sdk/platform-tools/systrace/中,需要安装python
python systrace.py -o mynewtrace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res
python systrace.py --list-categories	列出支持的策略
也可以使用android-studio中的monitor.bat工具来抓systrace

将perfetto格式的文件,转为systrace格式的:
python systrace.py --from-file=trace

转换的过程中,会有错误:这是因为如果不是adb形式的,它是没有开头和结尾的,所以不需要辨认了,直接把读到的data传进去就好了
    data_start = re.search(TRACE_START_REGEXP, result).end(0)
AttributeError: 'NoneType' object has no attribute 'end'

  def _read_trace_data(self):
    with open(self._filename, 'rb') as f:
      result = f.read()
    try:
      data_start = re.search(TRACE_START_REGEXP, result).end(0)
      data = re.sub(ADB_IGNORE_REGEXP, '', result[data_start:])
    except:
      data = result
    return self._preprocess_data(data)

35. chromium-webview-webview浏览器apk

webview浏览器apk,这个仓库只剩下apk了。源码在chromium项目中:https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview
使用webview的情况:https://developer.android.com/guide/webapps
尽管 WebView 对象增强了对界面的控制,但也有一些替代方法可以提供类似的功能,并且具有诸多优势:它们需要进行的配置更少、加载和执行速度可以更快、提供更强大的隐私保护并能访问浏览器的 Cookie。

如果您的应用出现以下情况,请考虑使用 WebView 的这些替代方法:

1. 如果您希望将用户引导至移动网站,请构建渐进式 Web 应用 (PWA)。
2. 如果您希望显示第三方网页内容,请向已安装的网络浏览器发送 Intent。
3. 如果您想避免离开应用来打开浏览器,或者想要自定义浏览器界面,请使用 Chrome 自定义标签页。

36. clang-LLVM的编译前端,支持代码静态检查

LLVM的编译前端和gcc相对
https://blog.csdn.net/zhouzhaoxiong1227/article/details/52166942		LLVM和Clang背后的故事
https://blog.csdn.net/xhhjin/article/details/81164076		简述 LLVM 与 Clang 及其关系
https://www.zhihu.com/column/clang		深入研究Clang
https://getting-started-with-llvm-core-libraries-zh-cn.readthedocs.io/zh_CN/latest/		LLVM编译器实战教程

Clang extras:
(1)Clang Check:语法检查
(2)Clang Format:格式化任意的c++代码,使它符合Google代码风格
(3)Clang Modernizer:代码重构工具
(4)Clang Tidy:这是一个剥绒机工具,它检查常见的编程错误,这些错误违背了LLVM或者Google的编码标准。

37. cldr-通用语言环境数据仓库,Common Locale Data Repository

通用语言环境数据仓库,Common Locale Data Repository
官网:http://cldr.unicode.org/

38. cn-cbor-基于json的简明二进制对象展现,c语言实现

基于json的简明二进制对象展现,c语言实现
hardware/interfaces/confirmationui/1.0/vts/functional/Android.bp	有使用到

39. compiler-rt-(runtime)项目为硬件不支持的低级功能提供目标特定的支持。

Compiler-RT(runtime)项目为硬件不支持的低级功能提供目标特定的支持。举例来说,32位目标通常缺少64位除法指令。Compiler-RT提供一个目标特定的优化的函数,它用32位指令实现64位除法,从而解决这个问题。它是libgcc的LLVM等价物,提供相同的功能。而且,它运行时支持地址和内存清洁(sanitizer)工具。

40. conscrypt-加密安全相关的库

https://blog.csdn.net/Innost/article/details/44081147		深入理解Android之Java Security第一部分
https://blog.csdn.net/Innost/article/details/44199503		深入理解Android之Java Security第二部分(Final)
JCE相关的信息:有加解密,密钥交换,消息摘要(Message Digest,比如MD5等),密钥管理等。
libcore/ojluni/src/main/java/java/security/Security.java注册了com.android.org.conscrypt.OpenSSLProvider(java框架)
com.android.org.conscrypt.OpenSSLProvider在conscrypt/repackaged/common/src/main/java/com/android/org/conscrypt/OpenSSLProvider.java文件中实现了具体的算法(android中的具体实现)
应用 -> java.security包 -> com.android.org.conscrypt.OpenSSLProvider中的具体实现(MD5,SHA-1,SHA-256等等算法的实现)
key -> base64编码 -> 传出去
证书:android/system/ca-certificates把一些顶级CA证书集成到系统中。目前通用格式为X.509格式。
keystore:存储key的一个文件
摘要:MD5计算
HMAC:加上密钥算摘要,就可以认证了
签名:证明摘要是正确的

JSSE相关的信息:Java平台对SSL/TLS的某种实现
SSL/TLS:TCP 之上的一个安全协议
服务器和客户端之间交换证书和key等

硬件支持keymaster HAL的作用:https://developer.android.com/training/articles/keystore
运行 Android 9(API 级别 28)或更高版本的受支持设备可拥有 StrongBox Keymaster,它是位于硬件安全模块中的 Keymaster HAL 的一种实现。该模块包含以下组成部分:
1. 自己的 CPU。
2. 安全存储空间。
3. 真实随机数生成器。
4. 可抵御软件包篡改和未经授权旁加载应用的附加机制。
检查存储在 StrongBox Keymaster 中的密钥时,系统会通过可信执行环境 (TEE) 证实密钥的完整性。

为支持低能耗的 StrongBox 实现,为一部分算法和密钥大小提供了支持:
1. RSA 2048
2. AES 128 和 256
3. ECDSA P-256
4. HMAC-SHA256(支持 8-64 字节密钥大小,含首末值)
5. Triple DES 168
使用 KeyStore 类生成或导入密钥时,您需要通过将 true 传递给 setIsStrongBoxBacked() 方法,指示在 StrongBox Keymaster 中存储密钥的偏好。

41. cpu_features-跨平台的用来检索CPU功能的c库-解析/proc/cpuinfo文件得到

跨平台的用来检索CPU功能的c库-解析/proc/cpuinfo文件得到
用法:代码中判断CPU是否支持这个功能,然后做相应的优化操作
#include "cpuinfo_x86.h"

static const X86Features features = GetX86Info().features;

void Compute(void) {
  if (features.aes && features.sse4_2) {
    // Run optimized code.
  } else {
    // Run standard code.
  }
}

42. cpuinfo-有关/proc/cpuinfo的信息

有关/proc/cpuinfo的信息
判断主机CPU是否支持NEON功能
cpuinfo_initialize();
if (cpuinfo_has_arm_neon()) {
    neon_implementation(arguments);
}

43. crcalc-构造实数计算器-用级数来计算实数

构造实数计算器-用级数来计算实数,系统自带的计算器会用到这个库
用泰勒级数的方式,来计算cos和sin这些函数,以得到精确的值

参考

1. 【CPU】ARM底层汇编之neon指令集优化(附实例)
https://blog.csdn.net/qq_38410730/article/details/103569527
2. NEON Intrinsics Quick Guide
https://gist.github.com/csarron/3191b401ec545f78022881f1805cae9a
3. 加密与安全
https://www.liaoxuefeng.com/wiki/1252599548343744/1255943717668160
posted @ 2021-06-28 19:53  pyjetson  阅读(1115)  评论(0编辑  收藏  举报