導航:首頁 > 源碼編譯 > 編譯adbubuntu

編譯adbubuntu

發布時間:2025-03-22 14:28:57

『壹』 Ubuntu 22.04編譯AOSP android 13

為了在Ubuntu 22.04上編譯AOSP Android 13,首先需要安裝下載所需的工具,並配置環境。

安裝並下載repo工具,將以下內容添加到~/.bashrc文件的最後:vim ~/.bashrc。

配置Git環境,包括設置個人的email和姓名。

創建並指定用於保存代碼的目錄。下載android-13.0.0_r35分支(或選擇其他分支),下載時使用-j16參數,以充分利用電腦的20線程性能,提高編譯速度。

若在下載過程中遇到找不到Python的錯誤,執行相應步驟解決問題。

安裝編譯工具,選擇適合啟動模擬器的版本,如sdk開頭的分支。

等待編譯過程完成,預計耗時約1個半小時。使用-j16參數可加速編譯。

編譯完成後,在同一窗口內執行emulator啟動模擬器。若終端窗口切換,請重新執行emulator。

設置-emulator -writable-system參數,以確保系統文件可寫。執行adb devices命令檢查模擬器運行狀態。

安裝adb調試工具。使用adb devices確認模擬器正在運行。

通過adb root和adb remount命令,提示重啟系統。執行adb reboot命令後,再次使用adb devices確認模擬器狀態。

使用adb push命令將編譯產物apk推送到系統中進行驗證。在模擬器上執行apk安裝,然後重啟模擬器。

進入模擬器,通過adb shell執行相關命令修改代碼,例如修改首頁文字。找到Android.bp文件,定位到CarMapsPlaceholder部分進行修改。

編譯修改後的代碼,將編譯產物apk再次通過adb push命令推送到系統中。在模擬器上執行adb root和adb remount命令,提示重啟系統後執行adb reboot命令。

重啟後,使用adb shell進入模擬器,查看首頁文字是否已經更新,以驗證修改是否成功。

『貳』 如何針對特定機型,編譯cwm recovery

*1 准備Ubuntu作為您的操作系統,筆者的版本是12.04_amd64。

*2 准備 Android 源碼的編譯環境,主要是安裝一些編譯用到的lib庫,以及同步源碼的一些工具,如GIT,CURL,REPO等。具體可參考:http://source.android.com/source/index.html[source.android.com]

*3 在確保環境已准備妥當之後,接下來開始下載 Android 源碼,此文以cm 10.1 源碼為例。

1).創建一個用於存放源碼的目錄,如:jellybean/system

mkdir –p jellybean/system

2).切換到該目錄

cd jellybean/system

3).初始化cm-10.1的分支

repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1

4).同步源碼

repo sync –j30

*4 適配你的Vendor

1).前提條件

* 已root;

* 有boot.img或者recovery.img

2).手動建立Vendor文件夾:device/ZTE/N881F,規則為「device/device_manufacturer_name/device_name」,這里 「device_manufacturer_name」 指的是你要編譯的設備的廠商,「device_name」 指的是你的設備名稱。

mkdir –p device/ZTE/N881F

3).獲取boot.img

adb連接手機狀態下,輸入

adb shell

進入shell模式,保證手機已root,輸入 su,轉入root許可權,輸入

cat /proc/mtd

查看有recovery(和/或)boot路徑,如果存在,分別執行

dd if=/your_boot_partition of=/your_sdcard_if_exists/boot.img
dd if=/your_recovery_partition of=/your_sdcard_if_exists/recovery.img

your_boot_partition 是mtd文件中記載的boot的路徑,your_sdcard_if_exists 是你的sdcard路徑,recovery同理,完成後退出shell,在終端或命令行下執行

adb pull /your_sdcard_if_exists/boot.img d:\boot.img
adb pull /your_sdcard_if_exists/recovery.img d:\recovery.img

這樣就獲取了boot.img和recovery.img文件

如果cat /proc/mtd 提示 No such file or directory,請在adb shell的root許可權下執行

mount

在輸出中查找 system,userdata,cache的路徑,通常情況下,boot,recovery路徑會和他們保持一致,一個可能的輸出是

root@edison:/ # mount
mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/system /system ext3 ro,relatime,barrier=1,data=ordered 0 0
/dev/block/pds /pds ext3 rw,nosuid,nodev,noatime,nodiratime,errors=continue,barrier=1,data=ordered 0 0
/dev/block/preinstall /preinstall ext3 rw,nosuid,nodev,noatime,nodiratime,barrier=1,data=ordered 0 0
/dev/block/userdata /data ext3 rw,relatime,errors=continue,barrier=0,data=ordered 0 0
/dev/block/cache /cache ext3 rw,nosuid,nodev,noatime,nodiratime,errors=continue,barrier=1,data=ordered 0 0
/dev/fuse /mnt/sdcard fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
/dev/block/vold/179:97 /mnt/external1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

分析內容發現,沒有boot,沒有Recovery分區。。。不急,咱們找規律。
/dev/block/cache,/dev/block/userdata,/dev/block/system。。。這樣是不是boot和recovery分區路徑為/dev/block/boot和/dev/block/recovery?

此時查看 /dev/block 目錄

root@edison:/ # ls /dev/block
ls /dev/block
boot
cache
cdrom
cid
...
recovery
...

真有,那麼 boot 和 recovery 即是我們要尋找的文件,接下來,同樣使用 dd 命令導出它們到sdcard,再使用adb pull命令導出到本地磁碟

4).生成vendor

source build/envsetup.sh
make -j4 otatools
build/tools/device/mkvendor.sh device_manufacturer_name device_name /your/path/to/the/boot.img

實際命令如下:

source build/envsetup.sh
make -j4 otatools
build/tools/device/mkvendor.sh ZTE N881F boot.img

上述命令假設你的boot.img存放於源碼目錄下。

5).提取recovery.fstab。經過第4)步驟後,會生成一份默認的recovery.fstab到你的N881F目錄下,這時我們需要獲取一份屬於你機器的掛載點,這時候有兩種辦法:

* 直接查看手機里的「/cache/recovery/last_log」,如果該文件存在,則查找如下內容:

recovery filesystem table

=========================

如果有上述內容,那就將它拷貝粘貼至recovery.fstab。

* 解包recovery.img,解壓後的etc目錄下有此文件,直接拷過來用。文件內容:

mount point fstype device [device2]
/boot emmc /dev/block/mmcblk0p8
/cache ext4 /dev/block/mmcblk0p15
/data ext4 /dev/block/mmcblk0p13
/misc emmc /dev/block/mmcblk0p17
/recovery mtd /dev/block/mmcblk0p16
/sdcard vfat /dev/block/mmcblk1p1 /dev/block/mmcblk1
/system ext4 /dev/block/mmcblk0p12
/sdcard2 vfat /dev/block/mmcblk0p20

6).准備 recovery.rc

import /init.recovery.${ro.hardware}.rc
on early-init
start ueventd
on init
export PATH /sbin
export ANDROID_ROOT /system
export ANDROID_DATA /data
export EXTERNAL_STORAGE /sdcard
symlink /system/etc /etc
mkdir /boot
mkdir /recovery
mkdir /sdcard
mkdir /internal_sd
mkdir /external_sd
mkdir /sd-ext
mkdir /datadata
mkdir /emmc
mkdir /system
mkdir /data
mkdir /cache
mount /tmp /tmp tmpfs
chown root shell /tmp
chmod 0775 /tmp
write /sys/class/android_usb/android0/enable 0

#可能會修改的地方
write /sys/class/android_usb/android0/idVendor 19d2
write /sys/class/android_usb/android0/idProct 1361
write /sys/class/android_usb/android0/functions mass_storage,adb

write /sys/class/android_usb/android0/iManufacturer ${ro.proct.manufacturer}
write /sys/class/android_usb/android0/iProct ${ro.proct.model}
write /sys/class/android_usb/android0/iSerial ${ro.serialno}
on boot
ifup lo
hostname localhost
domainname localdomain
class_start default
service ueventd /sbin/ueventd
critical
service recovery /sbin/recovery
service adbd /sbin/adbd recovery
disabled
# Always start adbd on userdebug and eng builds
on property:ro.debuggable=1
write /sys/class/android_usb/android0/enable 1
start adbd
setprop service.adb.root 1
# Restart adbd so it can run as root
on property:service.adb.root=1
write /sys/class/android_usb/android0/enable 0
restart adbd
write /sys/class/android_usb/android0/enable 1

7).修改 recovery.rc

這份文件大致是通用的,可能需要修改的地方單獨指出來了,如若Recovery編譯完後USB大容量不能正常掛載,則可去手機里查看「/sys/class/android_usb/android0/idVendor」和「/sys/class/android_usb/android0/idProct」這兩個文件的內容,然後依次填入上述可修改處的值(如 idVendor 19d2,把「19d2「換成「/sys/class/android_usb/android0/idVendor」對應的值即可)。

在Ubuntu下還可以用lsusb命令查看這兩個值:

focus@ubuntu:/media/linux/jellybeanplus/system$ lsusb
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:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 064e:d20c Suyin Corp.
Bus 002 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 003 Device 013: ID 19d2:1361 ZTE WCDMA Technologies MSM

最後一行的19d2和1361即為idVendor和idProct。

8).重寫按鍵對應的c文件 recovery_ui.c

9).提取設備的根文件系統的rc或sh文件,如init.qcom.usb.rc,init.qcom.usb.sh。(僅在根文件系統的目錄下有這些文件的情況下成立,如無則忽略)

10).查看內核基址,ramdisk文件的offset偏移量等

11).提取system.prop

adb pull /system/build.prop

從手機里pull過來build.prop後,拷貝到N881F目錄,打開文件,將文件內容拷貝至system.prop,然後將build.prop文件刪除。

*5 開始編譯

1).設置源碼環境變數

gedit ~/.bashrc

添加如下環境變數:

# Android environment
export TARGET_ARCH=arm
export ANDROID_SDK_TOOLS=<YOUR_ANDROID_SDK_DIR>/tools
export ANDROID_TOOLCHAIN=<YOUR_SOURCE_CODE_DIR>/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
export PATH=${ANDROID_SDK_TOOLS}:${ANDROID_TOOLCHAIN}:$PATH

# Java environment
JAVA_HOME=<YOUR_JAVA_SDK_DIR>
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

執行命令使環境變數生效:
source ~/.bashrc

2).編譯你的Vendor

cd <源碼目錄>
source build/envsetup.sh
lunch cm_N881F-eng
make -j4 recoveryimage

閱讀全文

與編譯adbubuntu相關的資料

熱點內容
android開發自己的sdk 瀏覽:447
prim演算法的例題 瀏覽:881
用什麼app才能秒玩所有游戲 瀏覽:845
少兒python教案下載 瀏覽:34
python能建資料庫嗎 瀏覽:154
程序員送飯完整版 瀏覽:834
易語言提取天龍八部素材源碼 瀏覽:345
合買彩票源碼免費下載 瀏覽:764
430單片機看門狗喂狗程序 瀏覽:980
大跨結構pdf 瀏覽:131
jdk沒有exe文件夾 瀏覽:603
ubuntulinux操作系統 瀏覽:392
r7000怎麼壓縮文件夾 瀏覽:10
查看區域網ip的命令 瀏覽:738
android44源代碼 瀏覽:394
銑命令詳解 瀏覽:414
怎麼把多圖片轉成pdf 瀏覽:692
大型游戲網站源碼 瀏覽:79
flink源碼分析 瀏覽:183
adobepdf虛擬列印機安裝 瀏覽:537