分类 Android 下的文章

转自: https://blog.csdn.net/u011913612/article/details/51878356

Android编译系统分析系列文章:

android编译系统分析一<source build/envsetup.sh与lunch> Android编译系统<二>-mm编译单个模块 android编译系统分析(三)-make android编译系统(四)-实战:新增一个产品 Android编译系统分析(五)-system.img的生成过程

虽然已经有很多人分析过android的编译系统的代码了,我也看过他们的博客,也学到了不少知识,但单纯的看别人分析,终究还是理解的不深入,所以,我还是要自己再认真的分析一遍。

想想我们编译android系统的过程:

首先:source build/envsetup.sh

其次:lunch ---选择一个特定的类型

最后:make

按着这个顺序,追踪这看似简单的几步,到底有哪些背后的秘密?

- 阅读剩余部分 -

  1. 根据引脚和初始化参数,以及规格书,制作类似于 panel_ili9881c_720p_video.xml 的文件。
  2. 安装必要的软件
    #sudo apt-get install libxml-libxml-perl 
    #sudo apt-get install libxml-perl 
  3. 把 xml 文件放入 device/qcom/common/display/tools 文件夹里面。
  4. perl parser.pl panel_ ili9881c_720p_video.xml panel 生成 dsi-panel-ili9881c-720p-video.dtsipanel_ili9881c_720p_video.h
  5. cp device/qcom/common/display/tools/dsi-panel-ili9881c-720p-video.dtsi kernel/msm-4.9/arch/arm64/boot/dts/qcom cp device/qcom/common/display/tools/panel_ili9881c_720p_video.h bootable/bootloader/lk/dev/gcdb/display/include/
  6. 修改 bootable/bootloader/lk/target/msm8952/oem_panel.c, lk 中的配置用于刚开机后对屏幕的驱动。
  7. 修改 kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8937-mdss-panels.dtsi kernel/msm-4.9/arch/arm64/boot/dts/qcom/qm215-qrd.dtsi 等文件,用于 kernel 对于 sleep 和 wakeup 时对屏幕的驱动。
  8. 全部修改完后,编译一下,拿到新的 boot.img
    source build/envsetup.sh 
    lunch msm8937_32-userdebug 
    make aboot 
    make kernel 
  9. 根据修改的内容决定具体烧录哪些 img, 正常修改屏幕驱动,只要更新 emmc_appsboot.mbn, boot.img
    adb reboot bootloader
    fastboot flash boot boot.img
    fastboot flash aboot emmc_appsboot.mbn
    fastboot flash dtbo dtbo.img
    fastboot flash dtbobak dtbo.img
    fastboot reboot

  1. 下载 qcom llvm, https://developer.qualcomm.com/software/snapdragon-llvm-compiler-android/tools
  2. 把解压出来的文件复制到asop 内。 类似于 cp $(LLVM_DIR)/toolchains/llvm-Snapdragon_LLVM_for_Android_8.0/prebuilt/linux-x86_64/* $(TOP_DIR)/prebuilts/clang/host/linux-x86/sdclang-8/
  3. 在 BoardConfig.mk 中增加
    # SDClang Config
    ifneq ($(HOST_OS),darwin)
    SDCLANG := true 
    SDCLANG_PATH := prebuilts/clang/host/linux-x86/sdclang-8/bin
    SDCLANG_PATH_2 := prebuilts/clang/host/linux-x86/sdclang-8/bin
    SDCLANG_LTO_DEFS := device/qcom/common/sdllvm-lto-defs.mk
    endif
  4. export 变量
    # export SDCLANG_PATH=prebuilts/clang/host/linux-x86/sdclang-8/bin
    # export SDCLANG_PATH_2=prebuilts/clang/host/linux-x86/sdclang-8/bin

参考

https://developer.qualcomm.com/forum/qdn-forums/software/snapdragon-llvm-compiler-android/68403
https://blog.csdn.net/love_xiaozhao/article/details/89684756
http://bbs.raindi.net/thread-26209-1-1.html
https://blog.csdn.net/qq_23129309/article/details/85225017
https://discuss.96boards.org/t/build-fails-sdclang-path-can-not-be-empty/6669

如果没有正确加载第三方 so 库,编译可以通过,但是一旦运行,就报错,无法找到对应的 so 库。

经过测试,最简单加载第三方 so 库的方法如下,不需要修改 build.gradle:

  • 把 so 库直接放到 app\src\main\jniLibs\armeabi-v7a 目录下面,如果没有目录就创建。

类似如下:

project/
├──libs/
|  └── *.jar       <-- if your library has jar files, they go here
├──src/
   └── main/
       ├── AndroidManifest.xml
       ├── java/
       └── jniLibs/ 
           ├── arm64-v8a/                       <-- ARM 64bit
           │   └── yourlib.so
           ├── armeabi-v7a/                     <-- ARM 32bit
           │   └── yourlib.so
           └── x86/                             <-- Intel 32bit
               └── yourlib.so
  • 重新编译后,验证的方法是把 app\build\outputs\apk\debug 下面的 apk 直接解压,确认 lib 文件夹里面是否有 so 库。

参考

https://stackoverflow.com/questions/24357687/how-to-include-so-library-in-android-studio
https://stackoverflow.com/questions/16683775/include-so-library-in-apk-in-android-studio?rq=1
https://blog.csdn.net/sinat_22657459/article/details/53420047

debug 串口参数

默认 115200, 8,n, 1, xon/xoff

查看 tty 驱动

cat /proc/tty/drivers

...
msm_serial_hs        /dev/ttyHS    240 0-255 serial
msm_serial           /dev/ttyMSM   241 0-2 serial
...

serial 对应 ttyMSM, 这个是普通速度串口。 serial_hs 对应 ttyHS,这个是高速串口。

uart 设置为 console

/kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8917-mtp.dtsi 里面设置:

&blsp1_uart2 {
        status = "ok";
        pinctrl-names = "default";
        pinctrl-0 = <&uart_console_active>;
};

- 阅读剩余部分 -

比较推荐 《Android系统源代码情景分析》作者 罗升阳 的 blog,https://blog.csdn.net/Luoshengyang

https://blog.csdn.net/luoshengyang/article/details/29688041
https://blog.csdn.net/luoshengyang/article/details/18466779
https://blog.csdn.net/luoshengyang/article/details/18195205

https://blog.csdn.net/mcryeasy/article/details/60466837

selinux policy 资料: https://blog.csdn.net/onj123/article/details/108351493
https://blog.csdn.net/hyl1718
https://blog.csdn.net/hyl1718/article/details/116225067?spm=1001.2014.3001.5501
https://blog.csdn.net/xiaosaerjt/article/details/106021337

AOSP下的系统开发 https://www.jianshu.com/p/85557c7b7653

动手实现Android源码(AOSP)的下载、编译、运行、导入、调试 https://blog.csdn.net/mcryeasy/article/details/60466837

Android8.0 下的 qcom8953 平台上的 sensor 调用过程 https://blog.csdn.net/woshishui918/article/details/83088120?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-4.control&spm=1001.2101.3001.4242

Android sepolicy简要记 https://blog.csdn.net/ch853199769/article/details/82501078

添加 Selinux 权限步骤 https://blog.csdn.net/wangjun7121/article/details/88221006

漫谈android系统(3) SELinux报错修改篇 https://blog.csdn.net/u013983194/article/details/50462694

android 8.1 安全机制 — SEAndroid & SELinux https://www.cnblogs.com/schips/p/SELinux.html
https://blog.csdn.net/qq_19923217/article/details/81240027

ADB—查看设备信息 https://www.jianshu.com/p/811741a2ad97

adb命令 android 串口_Android adb 串口设备调试方法 https://blog.csdn.net/weixin_39831902/article/details/111816945?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.control&spm=1001.2101.3001.4242

[RK3288]串口开发之运行app权限不够报错闪退(基于android8.1使用android studio3.6开发) https://blog.csdn.net/a812417530/article/details/106925335

[RK3288]串口JNI开发之so库的生成(串口C源代码)(基于android8.1使用android studio3.6开发 https://blog.csdn.net/a812417530/article/details/106917484

[RK3288]串口开发之JNI环境搭建(基于android8.1使用android studio3.6开发) https://blog.csdn.net/a812417530/article/details/106916604

Android串口通讯整理 https://www.jianshu.com/p/d79f4ccbbf44

Android 串口开发 https://blog.csdn.net/u010872301/article/details/94735221

在Android Studio项目工程中设置所使用的JDK版本 https://www.jianshu.com/p/2e4fff44ba38

android 串口参数设置,Android-SerialPort https://blog.csdn.net/weixin_42394780/article/details/117531565

Android FrameWork学习(一)Android 7.0系统源码下载\编译 https://www.jianshu.com/p/6af0bb7c1e70

Android FrameWork学习(二)Android系统源码调试 https://www.jianshu.com/p/4ab864caefb2

android 开发串口中遇到的权限问题 (个人笔记) https://blog.csdn.net/only_you_zj/article/details/80098192

刷机相关的Android的安全 https://blog.csdn.net/dongyi1988/article/details/103995737

msm8953之串口dts配置 https://blog.csdn.net/LoongEmbedded/article/details/82320947

高通平台串口调试 AP与模块串口通讯调试总结 https://blog.csdn.net/linux_devices_driver/article/details/24329043

高通uart调试总结 https://blog.csdn.net/weixin_38233274/article/details/95204486

高通linux-串口笔记 https://blog.csdn.net/sheji105/article/details/82625799

【Android驱动】高通串口驱动,串口驱动中的msm_serial.c https://blog.csdn.net/John_chaos/article/details/106545907

type=1400 audit(506975.539:15): avc: denied { read write } https://groups.google.com/g/Android-porting/c/DF9eKcV9SjI

How to enable UART port in Android 10 source https://forum.khadas.com/t/how-to-enable-uart-port-in-android-10-source/9101

Android 9 how to open the serial port https://forum.radxa.com/t/android-9-how-to-open-the-serial-port/3373

idegen:一个角落里的法器 https://www.jianshu.com/p/8f9b4e4970c9

高通平台msm8916修改开机logo【原创】 https://www.cnblogs.com/zzb-Dream-90Time/p/6510908.html

[Android L]SEAndroid增强Androd安全性背景概要及带来的影响 https://www.cnblogs.com/l2rf/p/4960572.html

[Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties) https://www.cnblogs.com/l2rf/p/4960579.html
https://blog.csdn.net/yelangjueqi/article/details/46761987

Android seLinux导致的APP访问设备权限问题 https://blog.csdn.net/qq_33611327/article/details/106210711

SELinux 关于avc:denied {read write getattr xxx} for 错误 https://blog.csdn.net/qq_33611327/article/details/114081849

Android SELinux avc:denied报错模板通用修改策略 https://blog.csdn.net/qq_33611327/article/details/114085637

Android open source project analysis https://github.com/sucese/android-open-source-project-analysis

看源码工具 https://cs.android.com
https://mp.weixin.qq.com/s?__biz=MzA3MzE4ODY0Mg==&mid=2455984638&idx=1&sn=a61f07e7aae09813feb6b297abd84f39&scene=21#wechat_redirect

Android问题汇总
https://blog.csdn.net/armfpga123/article/details/54849274

msm8953 + android7.1.2知识总结
https://blog.csdn.net/Wbl752134268/article/details/105201622?spm=1001.2101.3001.6650.19&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-19.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-19.no_search_link

Android 惯用工作命令mmm,mm,m,croot,cgrep,jgrep,resgrep,godir,快速查找 find grep合并使用
https://blog.csdn.net/zengxx1989/article/details/52837517

linux中bootable和kernel中子目录的作用
https://ciellee.blog.csdn.net/article/details/82599559

linux系统 RTL8152B网卡驱动移植-USB转网卡
https://blog.csdn.net/u013921164/article/details/109455430

Android.bp 文件中引入aar、jar、so库正确编译方法(值得收藏)
https://blog.csdn.net/u012932409/article/details/108119443
关于make update-api命令
https://blog.csdn.net/u010229714/article/details/73840014
Android 接口定义语言 (AIDL)
https://developer.android.google.cn/guide/components/aidl?hl=zh-cn
深入浅出 - Android系统移植与平台开发(十一)- Android系统的定制
https://blog.csdn.net/mr_raptor/article/details/30113417

Android系统篇(一)——建立Android系统开发环境
https://blog.csdn.net/qq_26787115/article/details/79543340
Android通过SystemProperties获取build.prop中配置的信息
https://blog.csdn.net/u013693649/article/details/60143634
Makefile call函数说明
https://blog.csdn.net/qu1993/article/details/88976861

Android系统开发入门-4.添加自定义模块
http://qiushao.net/2019/11/22/Android%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91%E5%85%A5%E9%97%A8/4-%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A8%A1%E5%9D%97/

03 Android系统之添加自定义模块
https://blog.csdn.net/feit2417/article/details/105209814
android 10 添加系统服务步骤
https://blog.csdn.net/a546036242/article/details/118221349

Modular System Components
https://source.android.com/devices/architecture/modular-system
Soong Build System
https://source.android.com/setup/build

Android源码创建新模块加入源码自动编译
https://blog.csdn.net/angelsmiling/article/details/93973919
9.Android 添加新模块
https://blog.csdn.net/qq_34738528/article/details/107403949

转自: https://blog.csdn.net/Easyhood/article/details/52138759

准备工作: 确信 \android-sdk-windows\tools\下有 adb.exe AdbWinApi.dll AdbWinUsbApi.dll 三个文件,如果没有从\android-sdk-windows\platform-tools\ 下面拷贝到tools下(android sdk 3.0 以上版本一些工具默认不放在tools下,作为可选配置放在platform-tools下)

开始:

安装apk到手机:

adb install c:\HA_drocap2_JOY3G.apk

启动所安装的程序,手机要是root权限并且进入到data\app目录下:

# am start -n cn.vsp/cn.vsp.StartActivty

查看相应的日志:

adb logcat -s welcome:i

【操作命令】

查看设备
adb devices

这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示

安装软件
adb install
adb install <apk文件路径> :这个命令将指定的apk文件安装到设备上
卸载软件
adb uninstall <软件名>
adb uninstall -k <软件名>

如果加 -k 参数,为卸载软件但是保留配置和缓存文件.

进入设备或模拟器的shell:
adb shell

通过上面的命令,就可以进入设备或模拟器的shell环境中,在这个Linux Shell中,你可以执行各种Linux的命令,另外如果只想执行一条shell命令,可以采用以下的方式:

adb shell [command]

如:adb shell dmesg会打印出内核的调试信息。

发布端口

可以设置任意的端口号,做为主机向模拟器或设备的请求端口。如:

adb forward tcp:5555 tcp:8000
从电脑上发送文件到设备
adb push <本地路径> <远程路径> 

用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机)

从设备上下载文件到电脑
adb pull <远程路径> <本地路径> 

用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑

查看bug报告
adb bugreport
记录无线通讯日志

一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录:

adb shell 
logcat -b radio 
获取设备的ID和序列号
adb get-product 
adb get-serialno 
adb shell 
sqlite3