zoukankan      html  css  js  c++  java
  • Android开发概要记录

    1..o文件、 .ko和.so文件的路径

    kerneloutmediatek---------------.o文件

    .c/.cpp文件编译生成的目标文件

    out argetproducthsimobile77_ics2systemlibmodules----.ko文件

    .ko是整个模块生成的驱动文件(内核模块),其中可以包括了.so,如果编译进 kernel  只可以看到.o 不会生成ko

    out argetproducthsimobile77_ics2systemlib------------.so文件

     .so 是部分文件编译成库文件,芯片原厂不希望你看到源码,可以已这样的方式提供,相当于WINCE下的.dll文件(动态链接库文件)


    2.用Ctrl+C停止正在进行的编译操作


    3.如何快速编译单个驱动和调试?


    4.adb logcat > logo.txt可以抓取调试信息

    adb shell

    cat /proc/kmsg也可以抓调试信息。

    5./dev下通过ls -l可以查看设备文件更多详细的信息,比如主设备号和次设备号。


    6.adb shell setprop service.adb.root 1 设置权限。

    7.linux下fastboot使用

    adb reboot bootloader

    fastboot flash boot out argetproductmsm8909oot.img

    fastboot reboot


    8.svn一些常用的命令

    svn status查看有更新的文件

    svn log查看更新记录


    svn co svn://192.168.XX.XXX/源代码目录

    获取指定版本

    svn checkout http://siphon.googlecode.com/svn/trunk/siphon -r r791

     

    svn up获取新版本代码

    svn commit -m "解决DC无法充电及显示问题"


    svn status可知道修改的文件、和增加的文件。

    svn add file提交增加的文件


    提交某些指定的文件

    svn commit kernel/drivers/input/keyboard/A.c kernel/drivers/input/keyboard/A.h -m "1.优化按键驱动 2提交按键代码"


    删除文件

    svn delete path -m delete test fle

    svn info获取当前版本信息


    svn update -r10030-------更新到指定版本,也可以用于回退到哪个版本做测试验证

    r后面紧跟版本号


    递归删除目录下.svn文件

    find和xargs结合
      find . -name "*.svn" | xargs rm -rf

    9.Android 性能分析工具dumpsys的使用

     Android提供的dumpsys工具可以用于查看感兴趣的系统服务信息与状态,手机连接电脑后可以直接命令行执行adb shell dumpsys 查看所有支持的Service但是这样输出的太多,可以通过dumpsys | grep "DUMP OF SERVICE" 仅显示主要的Service的信息


    也可以单独列出某个系统服务的,比如battery,命令:dumpsys battery,如果想知道具体可以做哪些操作可:dumpsys battery -h来查看,比如我们想设置电量百分比,可以

    dumpsys battery set level 5。

    10. /sys/kernel/debug/msm_otg

    调试路径

    11.编译和替换framework部分

    比如修改frameworksaseservicescorejavacomandroidserverBatterySevice.java

    编译命令,编译命令mmm frameworks/base/services/

    user版本。Jar中的部分被编译程序优化成了odex文件和jar文件,请看log最后一行。

    但是user你们应该没有权限push进去的。

     

    如果你们要调试,请编译eng版本的jar,这样jar应该就是完整的2m大小了。


    adb remount

    adb push services.jar /system/framework/

    adb reboot


    11.手动设置电池容量
    echo 50 > sys/modules/qpnp_bms/parameters/bms_fake_battery


    13.linux主要目录的一样

    /proc/devices文件可以获知系统中注册的设备,第1列为主设备号,第2列为从设备名


    14.快递定位问题

    (1) 通过logo定位具体的地方

    看日志,在差不多的地方加个dump_stack() 就很容易看出来调用关系

    15.系统属性

    (1) msm8909系统属性文件

    device/qcom/msm8909/system.prop


    16.测试模式

    从2016.0115日开始系统,默认关闭测试模式,相对之前默认打开测试默认,有以下变化:

    (1) 接入USB线,需要选择才能打开USB debug模式

    (2) USB模式默认为MTP,之前为charging模式

    (3) 开机后,我们刷机软件QFIL识别不到端口(但关机状态下同时按下两个侧按键+power按键,还是可以正常刷机)



    17.vmlinux

    位于out argetproductmsm8909objKERNEL_OBJ文件夹下,

    vmlinux是未压缩的内核,vmlinux 是ELF文件,即编译出来的最原始的文件。用于kernel-debug,产生system.map符号表,不能用于直接加载,不可以作为启动内核。只是启动过程中的中间媒体
    vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制
    以是我在CSDN中看到的,可以使用反汇编查看这个文件:
    arm-eabi-objdump -d kernel/vmlinux > 1.S

    18. 关机充电部分编译

    比如修改systemcorehealthd文件夹的代码,用make bootimage编译即可,此文件夹生成的healthd在out argetproductmsm8909symbolssbin文件夹下


    19.adb shell top看看资源占用情况
     adb shell top看看资源占用情况
     adb shell top看看资源占用情况

    20.ROM助手可编辑img文件


    21. 设备树dt.img中的entry数量由dts和dtsi文件的"compatible"条目数量决定

    点击打开链接


    22.编译命令

    - m:       Makes from the top of the tree.
    - mm:      Builds all of the modules in the current directory, but not their dependencies.
    - mmm:     Builds all of the modules in the supplied directories, but not their dependencies.
               To limit the modules being built use the syntax: mmm dir/:target1,target2.
    - mma:     Builds all of the modules in the current directory, and their dependencies.
    - mmma:    Builds all of the modules in the supplied directories, and their dependencies.


    23.croot命令可直接回到代码根目录


    24.systemcoreinit打印调试信息

    比如init.c下main():

    KLOG_ERROR(LOG_TAG,"main() test --->error ");//串口打印出来
    KLOG_DEBUG(LOG_TAG,"main() test --->DEBUG ");//串口打印不出来

    编译boot.img即可


    26./proc/cpuinfo、cmdline对应硬件信息和内核启动参数

    27.获取属性值,比如getprop ro.build.product

    28.系统属性文件,在ioniclibcincludesys\_system_properties.h定义

    #define PROP_PATH_RAMDISK_DEFAULT  "/default.prop"
    #define PROP_PATH_SYSTEM_BUILD     "/system/build.prop"
    #define PROP_PATH_SYSTEM_DEFAULT   "/system/default.prop"
    #define PROP_PATH_VENDOR_BUILD     "/vendor/build.prop"
    #define PROP_PATH_LOCAL_OVERRIDE   "/data/local.prop"
    #define PROP_PATH_FACTORY          "/factory/factory.prop"


    29.查找代码


    技巧:
      在调试或理解系统的工作原理的时候,我们经常要去找服务程序对应的源码。
      寻找c或c++程序的源码文件:
      例如:以寻找init程序对应的源码为例。
       find ./ -name Android.mk -exec grep -l init {} ;
      注:通过find命令查找所有的Android.mk, 通过grep从中查找程序字符串,得到其路径,然后去路径下找源码即可,这么做的原因是,c或c++代码都是通过Android.mk来指导编译的。
       寻找java源码文件:
       java源码的特点是和类名一致,所以如果我们知道一个类名,找其java源码就直接加上java后缀即可。
      例如:寻找com.android.internal.os.ZygoteInit类的代码。
       find ./ -name ZygoteInit.java


    30.systemcore ootdirinit.rc

    需要注意的是,各个trigger的加载顺序,先加入的先执行,后加入的后执行,要特别注意,尤其是要修改init.rc文件的时候,不了解这个容易因为前后依赖关系造成问题。

    31.Android属性服务

    Android为了存储全局系统设置信息,提供了一个系统属性共享内存区,这个共享内存区的内容是一些键值对的列表,对外提供get和set方法读写属性。系统启动时由init初始化并开启属性服务。


    32.system/build.prop

    build.prop和上节说得根文件系统中的default.prop文件格式一样,都称为属性配置文件。它们都定义了一些属性值,代码可以读取或者修改这些属性值。属性值有一些命名规范:
      ro开头的表示只读属性,即这些属性的值代码是无法修改的。
      persist开头的表示这些属性值会保存在文件中,这样重新启动之后这些值还保留。
      其它的属性一般以所属的类别开头,这些属性是可读可写的,但是对它们的修改重启之后不会保留。


    33.MPSS和APSS

    APSS指应用子系统,Application subsystem

    MPSS是指modem应用子系统,Modem Application susbsystem


    34.策略文件,比如init.te,te是指TypeEnforcement Access Control(简称TEAC,一般用TE表示)


    35 frameworksasepackagesSettingsProvider esvaluesdefaults.xml

    有很多开机默认的设置,比如开机不锁屏<bool name="def_lockscreen_disabled">false</bool>


    36.framework层的JNI源代码:frameworksasecorejni

    frameworksaseservicescorejni


    37.编译so并快速打包到system.img中

    用mmm命令编译,用make snod打包到system.img中。

  • 相关阅读:
    Codeforces Round #630 (Div. 2)A~E题解
    2020cug新生赛 An easy problem
    tensorflow.python.framework.errors.NotFoundError: <exception str() failed>错误解决
    将博客搬至CSDN
    2018年北京大学软件工程学科夏令营上机考试
    程序设计题目中的输入输出
    2018北大计算机学科夏令营机试题目
    Pyhton全栈的知识点(5)
    Python全栈的知识点(4)
    Python全栈的知识点(3)
  • 原文地址:https://www.cnblogs.com/liang123/p/6325402.html
Copyright © 2011-2022 走看看