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
總結
以上是生活随笔為你收集整理的baidu patchrom项目开发详细教程(Being updated)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取实体表相关信息
- 下一篇: VB6转换C#2010函数替换