Android深度探索(卷2)系统应用源代码分析与ROM定制 读书笔记1

1.在config文件中如果加上CONFIG_IKCONFIG_PROC=y,编译下载开机后就会在/proc下面生成config.gz的文件,这个文件可以直接解压使用。

2.Android源码下面就有编译器,alps/prebuild目录下即是,可以在目录下搜索arm-eabi-gcc找到交叉编译器的位置,然后可以加入PATH

3.刷机之前需要保证BootLoader是解锁的,如果未解锁需要在Android设备开机下执行adb reboot bootloader进入bootloader模式,执行fastboot oem unlock(fastboot oem lock是加锁),成功后会在模式界面显示红色的UNCLOCKED

4.system.img的修改

在out/host/linux-x86/bin下有很多linux-x86的工具,包括打包工具,通过

使用simg2img system.img system.img.raw把system.img转换为可挂载的镜像

使用mount system.img.raw /mnt/system 把镜像挂载到/mnt/system下面

使用make_ext4fs -s -l 512M -a system system.img /mnt/system 重新打包成镜像

其中-s是生成Sparse格式的镜像文件,不可挂载,占用空间小,不加则可直接挂在但是大,

-l是指定逻辑分区的尺寸,生成的镜像不能比这个大,-a指定在Android运行系统中的挂载点

5.修改开机动画

方法一:直接替换解压的system/media下的bootanimation.zip,然后打包

方法二:直接替换运行的Android设备中的/system/media下或者/data/local下的bootanimation.zip,需要root权限

adb push bootanimation.zip /adcard/bootanimation.zip
adb shell
su
mount -o rw, remount /system
cp /sdcard/bootanimation.zip /system/media/bootanimation.zip
/data/local下不用remount
adb push bootanimation.zip /adcard/bootanimation.zip
adb shell
su
cp /sdcard/bootanimation.zip /data/local/bootanimation.zip

6.bootanimation.zip
由一个或多个partN文件夹和desc.txt组成
文件夹中是播放动画的图片,图片名称结尾(不包括格式)需要用数字排序结尾,例如pic001
desc.txt
<width> <height> <frame-rate>
p <loop> <pause> <folder>
...
例如:
786 1366 15
p 1 0 pic001
p 0 0 pic002
暂停时间计算:pause/frame-rate

7.修改userdata.image
使用simg2img userdata.img userdata.img.raw把userdata.img转换为可挂载的镜像
使用mount userdata.img.raw /mnt/rom/userdata 把镜像挂载到/mnt/rom/userdata下面
可以在里面添加apk
使用make_ext4fs -s -l 128M -a datauserdata.img /mnt/rom/userdata 重新打包成镜像
注意这个128M会指定内存的最大容量,即使实际大小比128M大也只能显示和用128M,
并且这个制定的容量不能比实际的内部储存大。

8.ramdisk.img是root目录的压缩,包括初始化文件,不能使用上面的方法挂载,使用gunzip解压,并
用cpio恢复目录结构
mkdir ramdisk
cd ramdisk
gunzip -c ../ramdisk.img | cpio -i
使用下面的命令生成ramdisk.img
mkbootfs . | minigzip > ../ramdisk.img

9.boot.img主要包括内核zImage和ramdisk.img
解压
unpackbootimg -i ../boot.img
压缩
mkbootimg(out/host/linux-x86/bin/) --kernel boot.img-zImage --ramdisk.gz.new -o boot.img.new

10.获取ROOT权限
把修改过的su命令文件直接放入前面解压的system.img的/system/xbin下面,然后打包。
修改ramdisk.img,使得进入shell是就获得ROOT权限,修改ramdisk.img中的defualt.prop文件,
然后重新生成boot.img,经过修改的boot.img如下
ro.secure=0
ro.allow.mock.location=1
ro.debuggable=1
presist.sys.usb.config=mtp
ro.adb.secure=1
persist.service.adb.enable=1

11.获取Hardware版本的方法
通过adb中使用cat /proc/cpuinfo可以查看
12.APK程序复制安装
有的apk会被拆分成两个同名的文件(userdebug编译的结果没有odex文件,user有,不过可以修改build/core/mian.mk中WITH_DEXPREOPT改成true),一个是apk一个是odex文件,不能简单地把这两个文件
拷贝到不同rom上安装。因为如果是分开的,在安装之前Dalivk会强迫进行一系列的校验(使用Android系统中的
一些Library),校验不通过odex文件是不能使用的,但是如果两个合并之后就不需要校验可以直接安装。
校验使用的库可以在init.rc中查看BOOTCLASSPATH查看 cat /init.rc | grep BOOTCLASSPATH
合并的步骤:
1. 使用baksmail工具反编译odex文件,源码中的好像有点问题
java -jar baksmali.jar -a l7 -x test.odex -d framework -o test
-a:API LEVEL 这里是17-x指定odex文件,-d指定需要的库在的目录,-o编译后文件储存目录
2. 



13.Android系统签名
文件在build/target/product/security,在Android.mk中使用LOCAL_CERTIFICATE变量指定
testKey:默认签名,普通key
platform:可以使用系统应用的核心功能
shared:可以和home/contacts进程共享数据
media:将成为media/download的系统的一部分

14.intent问题

Android 应用之所以会在程序列表显示图标,是因为在定义程序中的窗口(Activity)制定了名为android.intent.action.MAIN和android.intent.category.LAUNCHER的Category。如果同一个窗口的同一个intent-filter有多个action时,使用时只需制定一个即可调用。如果没有action说明这个窗口不能被别的调用。如果AndroidMainfest.xml文件中有多个窗口都制定了android.intent.action.MAIN 和android.intent.category.LAUNCHER,那在程序列表中会有多个图标。

如果一个activity有多个intent-filter,则说明有多重调用该窗口的方式,主要不同是否包含action字段,文件是否有路径,程序格式等。













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值