码迷,mamicode.com
首页 > 其他好文 > 详细

baidu patchrom项目开发详细教程(Being updated)

时间:2014-05-24 09:35:23      阅读:375      评论:0      收藏:0      [点我收藏+]

标签:android   style   class   c   code   java   

 

 

 

 

 

 

 

 

linux64位android开发环境

baidu patchrom项目开发

by: doswhy [百度云ROM官方项目组修订]
by: colinchen 学习修改

 

 


******************************************************************************
******************************************************************************

1 准备工作 下载所需软件(均为官方原版,只是离线下载到了百度网盘)

 


1.1 deepin_2013_zh-hans_amd64.iso
http://pan.baidu.com/s/1i3G8Xhz

1.2 jdk-6u38-linux-x64.bin
http://pan.baidu.com/s/1mgBdmR2

1.3 eclipse-jee-indigo-linux-gtk-x86_64.tar.gz
http://pan.baidu.com/s/1dDqYEI1

1.4 android-sdk_r22.6.2-linux.tgz
http://pan.baidu.com/s/1gd66IbD

1.5 bcompare-3.3.4.14431_amd64.deb
http://pan.baidu.com/s/1kTBit7L

 

 

******************************************************************************
******************************************************************************

2 软件安装 推荐使用 linuxdeepin 64 位,DeepWin安装适合新手朋友,免去你的分区烦恼http://wiki.linuxdeepin.com/inde ... n%E5%AE%89%E8%A3%85提醒:请不要在root用户下搭建以下开发环境和进行ROM的开发工作【如果只有root用户,请新建个人用户】

 


2.1 在当前用户home目录下新建android目录:(jdk, sdk, eclipse安装移动后都将放在这个目录)
mkdir ~/android


2.2 软件安装(将下载的文件全部复制到桌面上,直接在桌面运行终端)

2.2.1 JDK安装 下载jdk-6u38-linux-x64.bin

2.2.1.1 在jdk-6u38-linux-x64.bin所在目录下,添加可执行权限,并运行该文件

chmod +x jdk-6u38-linux-x64.bin
./jdk-6u38-linux-x64.bin

2.2.1.2将生成的jdk1.6.0_38目录移动到android目录下:

mv jdk1.6.0_38 ~/android


2.2.2 安装Eclipse 下载Eclipse Linux版压缩版 eclipse-jee-indigo-linux-gtk-x86_64.tar.gz

2.2.2.1 解压
tar -xzf eclipse-jee-indigo-linux-gtk-x86_64.tar.gz

2.2.2.2 将解压得到的eclipse目录移动到 android目录下
mv eclipse ~/android

2.2.2.3 创建桌面链接(若不行,手动创建链接到桌面)
ln ~/android/eclipse ~/桌面/eclipse


2.2.3 环境变量的配置(把这个提前了,因为不先配置环境变量,下载Android SDK Platform-tools是会提示JAVA错误)

2.2.3.1打开/etc/profile文件,具体可使用如下命令:
sudo gedit /etc/profile

2.2.3.2 在最后添加下列内容:

 


# set android home
ANDROID_HOME=/home/colinchen/android

# set java environment
export JAVA_HOME=$ANDROID_HOME/jdk1.6.0_38
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
export

PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ANDROID_HOME/android-sdk-linux/tools/:$ANDROID_HOME/android-sdk-linux/platform-tools/:$PATH

 

2.2.3.3 然后保存

source /etc/profile

2.2.3.4 查看java是否安装成功

java -version

2.2.3.5 重启

 

 

2.2.4 安装Android sdk 下载android-sdk_r22.6.2-linux.tgz

2.2.4.1 解压:
tar -xzf android-sdk_r22.6.2-linux.tgz

2.2.4.2 将解压得到的android-sdk-linux目录移动到 android目录下
mv android-sdk-linux ~/android

2.2.4.3 进入~/android/android-sdk-linux/tools文件夹,运行程序android

./android

2.2.4.4 会弹出一个更新界面,这个界面会自动更新可以安装的列表,大概需要几分钟,更新完成后,我们选择Tools下的Android SDK Platform-tools 这个包,点击install 1 package 安装,因为adb目前放在这个包里面安装完成后可以在~/android/android-sdk-linux/platform-tools/下看到adb 的应用至此adb下载完成。如果直接执行adb shell会提示你没有权限,这就需要在root模式下启动adb 服务了


2.2.5 安装 bcompare 下载 bcompare-3.3.4.14431_amd64.deb

2.2.5.1 点击安装即可

2.2.5.2

bcompare用与文件的对比,命令如下:
两项对比
bcompare framework-res/AndroidManifest.xml out/reject/framework-res/AndroidManifest.xml.reject

三项对比
bcompare autopatch/bosp/framework-res/AndroidManifest.xml framework-res/AndroidManifest.xml out/reject/framework-res/AndroidManifest.xml.reject

2.2.6 repo安装

2.2.6.1 个人目录下创建bin目录,这是为了保存repo 等更新脚本的

mkdir -p ~/bin

2.2.6.2 安装git

sudo apt-get install git-core

2.2.6.3 安装curl

sudo apt-get install git-core curl

2.2.6.4 安装repo, 通过curl下载repo并给于权限

curl http://git-repo.googlecode.com/files/repo-1.13 > ~/bin/repo

chmod a+x ~/bin/repo

2.2.6.5 也可以把 ~/bin/repo 加入到环境变量里面,终端输入

sudo gedit /etc/profile

2.2.6.6 打开的文件添加

# add bin in path
export PATH=~/bin:$PATH

2.2.6.7 更改结束之后终端输入

source /etc/profile

2.2.6.8 重启

sudo reboot

 

******************************************************************************
******************************************************************************

3 配置usb识别android设备

 


3.1 adb的下载安装

sudo apt-get install android-tools-adb

3.2 在/etc/udev/rules.d/目录下创建51-android.rules文件

sudo touch /etc/udev/rules.d/51-android.rules:

3.3 终端输入 lsusb

lsusb


3.4 会出现
Bus 001 Device 003: ID 24e3:7112
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub


3.5 编辑51-android.rules

sudo gedit /etc/udev/rules.d/51-android.rules

3.6 然后添加

SUBSYSTEM=="usb", ATTR{idVendor}=="24e3", ATTR{idProduct}=="7112", MODE="0600"

3.7 点击保存然后给予权限
sudo chmod a+rx /etc/udev/rules.d/51-android.rules

3.8 接着终端输入

sudo /etc/init.d/udev restart

3.9 关闭adb

sudo adb kill-server

[sudo] password for administrator: 输入你的密码

3.10 开启adb

sudo adb start-server

3.11 出现
* daemon not running. starting it now on port 5037 ** daemon started successfully *

3.12 输入

sudo adb devices

3.13 出现类似这样,device这时已经识别到你的设备了.

List of devices attached 0123456789ABCDEF

 

******************************************************************************
******************************************************************************

4 同步源码,创建开发工程


接下来就可以同步源码了,以 mtk 4.2为例.详情请看 Developer-Guide.pdf

 


4.1 创建baidurom

mkdir -p ~/baidurom

4.2 进入baidurom

手动进入colinchen@colinchen-Inspiron-M5110:~/baidurom$

 

4.3 同步coron-mtk-4.2(这里有很多分支,我同步的是mtk的4.2) 注:这里比耗时(因网速而定)请耐心等待

4.3.1 在baidurom文件夹中打开终端,输入

repo init -u https://github.com/baidurom/manifest.git -b coron-mtk-4.2

4.3.2 同步完成后,输入 (devices有一个repo sync 后就出现的文件夹,那是示例机型
)

repo sync

 

 

///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////

每回从这里开始


4.4 环境初始化


4.4.1 进入baidurom文件夹后执行

source build/envsetup.sh

4.4.2 就像这个

colinchen@colinchen-Inspiron-M5110:~/baidurom$ source build/envsetup.sh

 

4.5 构建一个新的开发工程make newproject,新建工程目录(你的机型,比如荣耀3c h30_u10)

 

4.5.1 在 /home/colinchen/baidurom/devices/文件夹里新建h30_u10文件夹(机型)

mkdir -p devices/h30_u10

4.5.2 进入/home/colinchen/baidurom/devices/h30_u10/文件夹

cd devices/h30_u10


4.5.3 需要用到文件recovery.img 或 recovery.fstab,boot.img非必须 放入到 h30_u10文件夹里


4.5.4 进入 /home/colinchen/baidurom/devices/h30_u10/文件夹,然后执行

makeconfig # 该命令会识别手机参数,自动生成一个 Makfile 文件

4.5.5 构建本地的新机型工程

make newproject

# 该命令自动从手机拉包,并构建本地的新机型工程//手机连接电脑并开启调试模式

 

 

 

 

******************************************************************************
******************************************************************************

5 适配patchrom

 

5.1 插桩代码改动,自动 Patch

make patchall


具体说明

3.1). make patchall 自动 Patch
$ make patchall
# Patch 所有需要插桩的代码
该命令将自动将百度云 ROM 的所有改动 Patch 到厂商的代码中。如果厂商对 Android
原生改动较小,那就可以顺利 Patch。否则,将会产生 Patch 的冲突。冲突文件以*.reject 为
后缀,保存在机型目录下的 out/reject/子目录中。
譬如 framework-res/AndroidManifest.xml 这个文件在自动 patch 的过程中产生了冲突,
那么冲突就会保存在 out/reject/framework-res/AndroidManifest.xml.reject 文件中。
Patchall 命令可以多次执行,不影响之前 patch 的内容。当需要重新 Patch 单个文件时,
只需要将这个文件切换回厂商原来的代码,重新执行该命令即可。
执行完 make patchall 后,
会在机型目录下,
生成一个 autopatch 目录,
其结果如下所示。
6autopatch/
├── aosp/ # AOSP(Android Open Source Project)的反编译代码
├── bosp/ # BOSP(Baidu Open Source Project)的反编译代码
├── changelist/ # autopatch 所涉及到的改动文件列表
3.2). 解决合并冲突。
在解决冲突之前,需要理解三个目录:
* 厂商的代码,即 VENDOR。在机型根目录下,开发者最终修改的都是厂商代码;
* Android 原生代码,即 AOSP。在 autopatch/aosp/目录下;
* 百度云 ROM 代码,即 BOSP。在 autopatch/bosp/目录下。
冲突会在 reject 文件中以下面的形式标注出来:

<<<<<<< VENDOR
原厂的代码块
=======
需要改动的代码块
>>>>>>> BOSP


解决冲突一般分为三步:
第一步:确定冲突位置。对比机型根目录下对应的厂商文件 out/reject 目录下的冲突文
件。可以找到冲突的具体位置,每一个冲突都有编号, 从 Conflict 0 开始。

第二步:确定百度云 ROM 的改动。找到冲突位置后,对比 AOSP 和 BOSP 的代码来找出
在冲突的位置处百度云 ROM 是如何修改的 AOSP 的。


bcompare用与文件的对比,命令如下:
两项对比
bcompare framework-res/AndroidManifest.xml out/reject/framework-res/AndroidManifest.x ml.reject

三项对比
bcompare autopatch/bosp/framework-res/AndroidManifest.xml framework-res/AndroidManifest.xml out/reject/framework-res/AndroidManifest.xml.reject

 


第三步:确定冲突的解法。之所以会产生冲突,是因为厂商(VENDOR)也在 AOSP 上有改
动,一旦百度云 ROM 和厂商在 AOSP 改动的位置相同,冲突就产生了。对比厂商和 AOSP
的代码,确定厂商(VENDOR)是如何改动 AOSP 的。
解决冲突就是对 BOSP 和 VENDOR 进行取舍,即保留 BOSP 或者 VENDOR。在取舍时,
需要注意寄存器变量是否能够原来的上下文匹配。
如果寄存器变量使用错误,
就会造成编译
或运行错误。
73.3) 机型全编译 make
解决完冲突以后,可以通过以下命令开始编译整个机型,如果编译成功,将会生成一个
卡刷包和其他相关的 image(譬如 system.img,boot.img 等)。
$ make
# 全编译生成一个最终的卡刷包
将编译成功后的产出刷入手机,
当出现不能起机、
卡在开机动画或者起机后出现某些应
用程序 Crash,则需要分析开机日志,解决办法可以参考常见问题。

 

 

 

 

 

 

 

 

 


小助手:有些手机刷入适配包重启后ADB无连接,亲参照各种方式开启adb http://bbs.rom.baidu.com/thread-135064-1-1.html

补充说明:一
persist.service.adb.enable=1
persist.sys.usb.config=adb
有些手机boot.img里面的default.prop厂商修改了好多,如没有上面两项或其实一项只需添加即可.
persist.service.adb.enable=1 这个其实主要就是让手机默认开启调试模式,可以找个卡刷包修改试一下
补充说明:二(主要用于补充说明一无效时即卡开机动画且ADB无连接)
暴力的查看日志的方法:
---------------------------------------------------
解压ota卡刷包,在recovery/etc/中的install-recovery.sh后面加上一句:
logcat >> /data/local/tmp/log
重新打包ota卡刷包并刷入手机,依然会卡在开机动画,请无视,卡上一段时间后重启进入REC模式
----------------------------------------------------
recovery.fstab里面找到data所在的分区位置(recovery.fstab的位置在vendor/RECOVERY/RAMDISK/etc/recovery.fstab)
假如data所在的那一行的内容如下:
/data ext4 /dev/block/platform/sdhci-tegra.3/by-name/UDA /data
然后REC模式下
adb shell
mount /dev/block/platform/sdhci-tegra.3/by-name/UDA /data
-----------------------------------------------------
看看有没有 log 这个文件存在
ls /data/local/tmp
如果没有那说明之前的操作有错误
-----------------------------------------------------
导出log
exit (退出adb shell)
adb pull /data/local/tmp/log log
-----------------------------------------------------
然后就可以在终端的当前目录下看到 log 文件
复制代码
将包push到sd卡中
adb push out/ota_ktouch.zip /mnt/sdcard/SD_CARD
复制代码
重启手机
adb reboot
复制代码
重启到Recovery界面
adb reboot recovery
复制代码
抓取开机的日志信息(Log)
adb logcat -b radio -b system -b main | tee all.log
复制代码
这样既能够把所有的开机日志保存在 all.log 这个文件中,又能够在屏幕上实时的把日志打印出来。只导出错误地方
adb logcat *:E>log
复制代码
进入手机的超级终端Terminal
adb shell
复制代码
退出 adb shell
exit
复制代码

 

baidu patchrom项目开发详细教程(Being updated),布布扣,bubuko.com

baidu patchrom项目开发详细教程(Being updated)

标签:android   style   class   c   code   java   

原文地址:http://www.cnblogs.com/qinglinchen/p/3748519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!