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

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

手动进入[email protected]:~/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 就像这个

[email protected]:~/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
复制代码

时间: 2024-07-31 14:31:09

baidu patchrom项目开发详细教程(Being updated)的相关文章

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

linux64位android开发环境miui patchrom项目开发 by: colinchen 整合修改[本人正在学习中,一直更新] ************************************************************************************************************************************************************ 1 准备工作 下载所需软件(均为官方原版,只是

WinForm项目开发傻瓜教程

开发环境:Win7 64Bit简体中文版,VS2012简体中文版. 主要内容: 登录页面与主页面 背景资源的使用 控件程序集 制作安装包 打开VS2012,选择文件|新建|项目,弹出新建项目对话框: 注:项目是一个实体,可以是一个执行文件,一个程序集,解决方案就是若干个项目的集合,如果只想做一个简单的工具,只有一个项目,可以把为解决方案创建目录去掉,可以省掉一集目录:本例子的解决方案中有一个执行程序,两个程序集,所以要选上,项目名称与解决方案名称也可以不一样. 点击确定之后,项目就生成了. 生成

微信开发详细教程

一. 准备工作 a) 账号 在SAE上面注册一个账号. 在微信公众号开发平台地址 https://mp.weixin.qq.com  注册一个微信公众号. 注意:1.个人只能申请到个人类型的订阅号. 2.微信公众号认证需要300大洋. 申请公众号测试号地址 http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index 二. 微信公众账号介绍 服务号.订阅号.企业号的介绍(区别) 1.订阅号:主要

eclipse怎么导入maven项目 eclipse导入maven项目详细教程

Eclipse怎么导入maven项目一直是困扰着大量程序猿和刚上手小白们的问题,使用eclipse的时候却不知道该怎么才能导入maven项目,是一件十分苦恼的事情,不用担心小编今天为大家带来了详细的eclipse导入maven项目详细教程,一起来看看吧. 详细教程 最近遇到Maven管理下的spring MVC项目,组内某位将项目代码扔过来,一脸懵逼(囧),查阅了一些资料后终于将此项目运行通了(>_<),特此记录下来与各位分享. 通俗的来说,Maven就是个类似于Git的项目管理工具.而Spr

如何托管你的项目到github上详细教程

一.首先你要有三个东西  github账号.上传工具msysgit 和 你的项目. 1.注册一个github账号 要托管到github,那你就应该要有一个属于你自己的github帐号,所以你应该先注册一个账号. 打开浏览器,在地址栏输入地址:https://github.com(如下图),填写用户名(name20151231).邮箱([email protected]).密码(********),点击Sign up for GitHub ,跳转到下一界面,拖动到页面最下面点击Finish Sig

Unity2D游戏开发基础教程1.2 项目、资源和场景

Unity2D游戏开发基础教程1.2 项目.资源和场景 如果使用Unity制作游戏,就一定会接触到项目(Project.资源(Asset)和场景(Scene).本节将依次介绍它们. 1.2.1项目 Unity是一个基于项目的应用.这就意味着每开发一个新游戏,都要创建一个新项目.一个项目就代表一个游戏,不管游戏是2D还是3D的.开发人员可以把项目当做容器,它包含了开发游戏时,自动生成还有引入的所有文件.本文选自<Unity2D游戏开发基础教程大学霸> 要在Unity里创建一个新项目,可以单击Fi

iOS项目——微信H5棋牌牛牛斗牛出租平台项目开发环境搭建教程

在开发项目之前,我们需要做一些准备工作,了解iOS扩展--微信H5棋牌牛牛斗牛出租平台(h5.fanshubbs.com联系Q_1687054422),学习iOS学习--Xcode9上传项目到GitHub是我们进行版本控制和代码管理的选择之一,明白iOS学习--iOS项目Project 和 Targets配置详解则更利于我们今天对完整项目开发环境的搭建,这些内容在在之前的博文中都已经有了一些总结和步骤说明,具体详情可以戳链接查看. 开发一个完整的App,不同于我们平时学习和练习时随意新建一个pr

Web开发入门教程:Pycharm轻松创建Flask项目

Web开发入门教程:Pycharm轻松创建Flask项目 打开Pycharm的file,选择创建新的项目,然后弹出对话框,我们可以看到里面有很多的案例,Flask.Django等等,我们选择生成Flask的demo程序 选择创建之后一个简易的Flask项目就出现在我们眼前,第一个是入口程序,还有一个static的静态目录,templates是模板存放的位置 我们可以手动来启动这个Flask项目,但是这不是很理智的,在Pycharm上面有个run,我们可以选择run来启动Flask的服务,默认打开

android开发入门详细教程

随着移动端开发的火热,越来越多的IT程序员转做移动开发,做J2EE的转做Android开发,现在让麦子学院android开发老师给大家讲讲一些入门经验,希望能给你带来帮助. 工具/原料 .        JDK,ADT,JAVA 方法/步骤 1.   开发工具的准备: 第一个工具:JDK1.7, 第二个工具:Android Developer Tools简称ADT. JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)  只需以上两个工具就可以进行开发