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

手动进入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
复制代码

 

转载于:https://www.cnblogs.com/qinglinchen/p/3748519.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 文件转换二进制_在vue中使用axios实现post方式获取二进制流下载文件(实例代码)...

需求点击导出下载表格对应的excel文件在 vue 项目中,使用的 axios ,后台 java 提供的 post 接口 api实现第一步,在 axios 请求中加入参数,表示接收的数据为二进制文件流responseType: "blob"第二步,在拿到数据流之后,把流转为指定文件格式并创建a标签,模拟点击下载,实…

QMainWindow中的布局管理

给QWidget或者QDialog设置布局的时候方式很简单。创建好一个布局&#xff1a;mainLayout&#xff0c;然后不停地把各个控件往mainLayout里面放&#xff0c;最后调用setLayout(mainLayout)就行了。 QMainWindow中使用这个方法的时候却不管用&#xff0c;因为QMainWindow是默认有…

ubuntu下vim语法高亮问题

造成语法不能高亮的原因&#xff0c;是ubuntu上的vi和vim默认是vim.tiny&#xff0c;tiny是精简版&#xff0c;不支持语法高亮&#xff0c;需要安装完整版vim&#xff0c;即vim.basic。 在shell栏输入下面指令&#xff1a; xiaubuntu:~$sudo apt-get install vim 转载于:https:…

autoincrement mysql_SQL AUTO INCREMENT 字段 | 菜鸟教程

SQL AUTO INCREMENT 字段Auto-increment 会在新记录插入表中时生成一个唯一的数字。AUTO INCREMENT 字段我们通常希望在每次插入新记录时&#xff0c;自动地创建主键字段的值。我们可以在表中创建一个 auto-increment 字段。用于 MySQL 的语法下面的 SQL 语句把 "Persons&…

vs2010中moc文件生成方法

Qt 程序在交由标准编译器编译之前&#xff0c;先要使用 moc 分析 C 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT&#xff0c;则会生成另外一个 C 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同…

LFS,编译自己的Linux系统 - 前言

LFS&#xff0c;编译自己的Linux系统 - 前言 近期工作计划&#xff1a;1. 上班时&#xff0c;用Django编写一个网站&#xff1b;2. 下班时&#xff0c;用C#、WPF编写一个单机版应用软件&#xff1b;3. 其他时间&#xff0c;根据LFS编译自己的Linux系统。 LFS是一本书&#xff0…

mysql allowmultiqueries=true_Mysql批量更新的一个坑-allowMultiQueries=true允许批量更新(转)...

实际上&#xff0c;我们经常会遇到这样的需求&#xff0c;那就是利用Mybatis批量更新或者批量插入&#xff0c;但是&#xff0c;实际上即使Mybatis完美支持你的sql&#xff0c;你也得看看你说操作的数据库是否支持&#xff0c;而阿福&#xff0c;最近就遇到这样的一个坑。问题先…

vs生成qt moc文件

1. 右键需要生成moc文件的头文件 2. 将生产的moc加入工程中

javascript好文---深入理解定位父级offsetParent及偏移大小

前面的话 偏移量(offset dimension)是javascript中的一个重要的概念。涉及到偏移量的主要是offsetLeft、offsetTop、offsetHeight、offsetWidth这四个属性。当然&#xff0c;还有一个偏移参照——定位父级offsetParent。本文将详细介绍该部分内容 offsetParent定位父级 在理解…

bash中将字符串split成数组的方法

相信编程时&#xff0c;字符串的处理是很频繁被处理的问题&#xff0c;其中大家肯定不陌生各种语言的string.split(sp)将字符串按照某个字符或子串切分成一个数组。 同样&#xff0c;我们在用shell处理文本信息时也可以方便地实现该功能。 这里主要使用了bash中关于字符串变量的…

mysql的seq2_DESeq2处理TCGA数据库Seq-count数据

1、DESeq2需要导入两个数据集&#xff1a;mycounts, colData。先说mycounts&#xff0c;这就是处理完的TCGA数据RNAmatrix.txt&#xff0c;直接读入即可。library(tidyverse)library(DESeq2)#导入数据setwd("E:/2.Hitseq_counts/")mycountshead(mycounts)#这里有个x&…

理解 e.clientX,e.clientY e.pageX

event.clientX、event.clientY 鼠标相对于浏览器窗口可视区域的X&#xff0c;Y坐标&#xff08;窗口坐标&#xff09;&#xff0c;可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性 event.pageX、event.pageY 类似于event.clientX、event.clientY&#xff0c;…

基于FlashPaper的文档播放器

本文主要讨论、描述了使用Adobe公司的Flex与FlashPaper产品完成对发布到网上的文档资料进行只读控制&#xff0c;也就是说只允许浏览操作、对下载、打印进行控制。FlashPaper FlashPaper是Macromedia的一款用于将操作系统所识别的文档的内容通过虚拟打印机制将内容转换为swf文件…

mysql列调换位置_mysql互换表中两列数据方法

1.创建表及记录用于测试CREATE TABLE product ( id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 产品id, name varchar(50) NOT NULL COMMENT 产品名称, original_price decimal(5,2) unsigned NOT NULL COMMENT 原价, price decimal(5,2) unsigned NOT NULL COMMENT 现…

UCScript——C++集成脚本

使用UCScript作脚本&#xff0c;主要是因为它几个特点很适合用于集成&#xff08;脚本引擎体积小&#xff0c;占用资源少&#xff0c;运行快&#xff0c;跨平台跨语言&#xff0c;与宿主语言交互方便&#xff09;&#xff0c;而且它的语法类C语言&#xff0c;不用去多学一门语言…

python经纬度转换xy坐标公式 pyqt_EXCEL公式进行经纬度与XY坐标的相互转换

一、用EXCEL进行高斯投影换算从经纬度B、L换算到高斯平面直角坐标X、Y(高斯投影正算)&#xff0c;或从X、Y换算成B、L(高斯投影反算)&#xff0c;一般需要专用计算机软件完成。在目前流行的换算软件中不足之处&#xff0c;就是灵活性较差&#xff0c;大都需要一个点一个点地进行…

display:inline-block之用法

HTML的元素有多种display属性&#xff0c;比较常见的有display:none; display:block; display:inline和display:inline-block;等。详细可参阅 W3Schools文档。有些HTML元素自然地带有display:block;样式属性&#xff0c;比如<div><h1>...<h6><p><ul…

java桥_JAVA 桥模式

桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦&#xff0c;使得二者可以独立地变化”。这句话很短&#xff0c;但是第一次读到这句话的人很可能都会思考良久而不解其意。这句话有三个关键词&#xff0c;也就是抽象化、实现化和脱耦。理解这三个词所代表…

display:inline display:block

display:inline; 元素会被显示为内联元素&#xff0c;元素前后没有换行符. display:block 元素将显示为块级元素&#xff0c;此元素前后会带有换行符. 举例&#xff1a; 1.display:block <span style"display:block">11111111</span><span>2222…

java utf8 byte_byte以及UTF-8的转码规则

https://www.cnblogs.com/hell8088/p/9184336.html多年来闲麻烦&#xff0c;只记录笔记&#xff0c;不曾编写BLOG&#xff0c;本文为原创&#xff0c;如需转载请标明出处废话不说&#xff0c;直奔主题ascii计算机只接受 “高”、“低”电压&#xff0c;所以使用二进制 1 和 …