您的位置:首页 > 移动开发 > Android开发

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

2017-12-22 17:12 393 查看
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字段,文件是否有路径,程序格式等。






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐