Android开发概要记录

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

\kernel\out\mediatek---------------.o文件

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

\out\target\product\hsimobile77_ics2\system\lib\modules----.ko文件

 

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

 

\out\target\product\hsimobile77_ics2\system\lib------------.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\target\product\msm8909\boot.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 move xxx yyy

将xxx文件重命名为yyy,类似于Linux的mv命令。

 

svn info获取当前版本信息

 

svn update -r10030-------更新到指定版本,也可以用于回退到哪个版本做测试验证,这只是回退到指定版本,但服务器上还是最新版本。

如果要恢复服务器代码到指定版本,用svn merge -r 29:28 .//回退29版本到28版本,.表示当前路径,回退后需要svn commit提交。

r后面紧跟版本号

svn add --no-ignore *------我们提交的时候,svn可能识别不到有些类型文件,比如so,增加这个可以提交

递归删除目录下.svn文件

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

 

svn创建补丁

(1)创建当前目录下补丁svn diff -r 39:390 > 39_390.patch

(2) 创建指定目录补丁svn diff minui -r 39:390 > 39_3902.patch

(3)创建指定文件补丁:svn diff graphics_fbdev.cpp -r 39:390 > 39_3902.patch

svn创建命令http://embed.21ic.com/software/linuxos/201403/31527.html

svn add之后撤销命令svn revert --recursive example_folder。

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部分

比如修改\frameworks\base\services\core\java\com\android\server\BatterySevice.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\target\product\msm8909\obj\KERNEL_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. 关机充电部分编译

比如修改system\core\healthd文件夹的代码,用make bootimage编译即可,此文件夹生成的healthd在out\target\product\msm8909\symbols\sbin文件夹下

 

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.system\core\init打印调试信息

比如init.c下main():

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

编译boot.img即可

 

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

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

28.系统属性文件,在\bionic\libc\include\sys\_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.system\core\rootdir\init.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 frameworks\base\packages\SettingsProvider\res\values\defaults.xml

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

 

36.framework层的JNI源代码:frameworks\base\core\jni

frameworks\base\services\core\jni

 

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

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

 

38.Android studio官网:点击打开链接

39. init.rc

mkdir /data/misc 01771 system misc

命令  文件路径  权限 所有者 所有组

 

40. adb shell service list查看系统中注册了哪些service

41. adb shell
getprop可以查看一系列系统属性值
getprop |grep xxx.xxx.xx 过滤查看特定系统属性值

42. 默认预置apk到system/app/目录(普通系统apk,不可卸载),预置apk到system/priv-app/目录(系统核心apk,不可卸载),app对应的Android.mk下增加LOCAL_PRIVILEGED_MODULE := true,表示生成的apk放在system/priv-app/目录下。

 

43. 编译服务器编译不同版本android的方法,比如android5.1用openjdk-7-jdk,android7.1用openjdk-8-jdk,可以用不同的用户安装不同版本来编译,或是同一个用户手动切换Java版本: sudo update-alternatives --config java        sudo update-alternatives --config javac

44.监测内存及CPU情况,可用安兔兔测评软件

45.dumpsys telephony.registry可获取telephony状态,可以看网络注册状态,数据链接状态,是否漫游,信号强度,等等,参数我就不一一解毒了,跟android系统版本也有关系

46 jdk版本选择

比如ubuntu系统中安装了openjdk-7-jdk和openjdk-8-jdk,通过下面的命令可以切换

sudo update-alternatives --config java

sudo update-alternatives --config javac

 

47updatezip升级设置目录和文件权限

android7.1set_metadata_recursive和set_metadata命令,主要是修改文件或目录权限和属组等信息
比如:set_metadata("/system/bin/login","uid", 0, "gid", 0, "mode", 0755,"capabilities", 0x0, "selabel", "u:object_r:system_file:s0");---
第1个0表示ROOT,上帝用户: ROOT, 他的UID= 0; 上帝用户永远属于任何UID


Uid和gid的值system\core\include\private\android_filesystem_config.h定义,比如:

 

48. adb的adb shell pm list packages命令用来查看当前设备app应用包

49.android8.1设备数中可设置要挂载的分区

kernel\msm-3.18\arch\arm\boot\dts\qcom\tps950\sim8950-msm8953.dtsi

50.通过AT命令拨打电话:echo -e "ATD123456789;\r" > /dev/smd11,拨打123456789的号码,smd11这里是modem串口

51.android手动修改density(dpi)的方法

adb shell getprop ro.sf.lcd_density

52. 查看版本信息dumpsys package com.alipay.zoloz.smile | grep version

53 通过adb命令获取apk的安装路径:adb shell pm path +apk包名

54. 通过包名查看正在运行的进程ID(PID)

adb shell pidof 包名

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loongembedded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值