android的vendor
A. Android版本2.3.6怎麼升級
一、在刷此ROM前請先刷入官方4.0 B926底包(詳見官方升級指導書---官方壓縮包內有),
步驟1. 通拆衡冊過電腦下載官方發攔碰布的軟體升級包。
步驟2. 准備一張2G以上容量的SD卡,建議使用Sandisk, Kingstone, 或Kingmax,並旅宏保
證此外置SD卡上的可用空間大於1G。
步驟3. 在該外置SD卡根目錄下建立一個新目錄,目錄名為:dload。拷貝升級包目錄:
dload路徑下的一個文件: 「UPDATE.APP」到SD卡的「dload」目錄下;同
時拷貝升級包目錄:vendor路徑下的一個文件:「UPDATE.APP」改名為
「UPDATE_CUST.APP」到SD卡的「dload」目錄下。
步驟4. 在Home(待機桌面)上,點擊菜單鍵選擇 「設置」>存儲>軟體升級>SD卡升級>
選擇「確認」,執行升級操作。
二、正式刷第三方rom前需要先刷入G大的Recovery、root和解鎖 Bootloader
操作步驟:
[刷機三部曲,ROOT/解鎖/Recovery,一氣呵成]
1、手機上開啟ADB調試,並確認ADB驅動正確安裝【小白可以開啟豌豆莢一次就會自動安裝驅動】
2、運行解鎖工具,先ROOT手機,重新運行工具,再解鎖手機
3、刷入Recovery
刷入recovery的方法:
1、下載附件recovery5.0.2.8_u8818.exe
2、斷開USB連接,關閉手機的快速關機,關閉手機
3、按音量下+開機鍵不放,6秒後進入fastboot模式[停留在聯通界面]
4、將手機通過USB線連接到電腦
5、運行下載的附件,按提示完成
6、繼續進行下一步就會刷入recovery,然後會重啟
7、進入recovery的方法:按住音量上+開機鍵開機,並按住兩鍵不放,直到進入新recovery
recovery中,音量上鍵--向上移動,音量下鍵/菜單鍵--向下移動,電源鍵/小房子鍵--確認,返回鍵--返回上一級菜單
三、開始刷第三方rom
刷機方法:
1. 將下載下來的 zip 刷機包(不要解壓),直接放到 SD 卡上
2. 一直按住音量上+電源按鈕開機,不要松開,直到進入 recovery模式
3. 選擇「清空所有數據」
4. 選擇「從SD卡選擇刷機包」
5. 再選「從SD卡選擇ZIP文件」
6. 再找到剛下載的zip刷機包確認
7. 確認後,稍等1分鍾左右,完成。
8. 刷完後,返回首菜單,選擇「立即重啟」
9.然後就耐心等待一會,第一次啟動會比較慢的。
B. 如何編譯lineage不支持的機型
首先整理相應的機型MK文件
device文件,android_device_$your-device-name
kernel文件,android_kernel_$your-device-name
vendor文件,android_vendor_$your-device-name
收集或者製作或者修改,完成,你的機型文件後
同步下載lineage的源碼:
清華鏡像源,打開看教程(同步出錯有問題就網路,一般都有答案,系統最好在linux和他的各種分支中選擇>經常用Windows-覺得Mac很反人類-不過開發商好像很喜歡-可能是蘋果給出的條件太好-沒人能拒絕,我覺得Ubuntu不錯,也很喜歡Deepin-適合新手-國內維護挺不錯的)
然後整理MK文件:
也可以點這里,去官網找一下相關機型或品牌文件作為參考
比如我的手機是ZUK EDGE
##ZUKEDGE
#我的機型代號-z2x,這個是開發用的代號;
#我的內部機型-z2151,這個是從官方下載開源部分需要的型號;
#ZUK特殊部分其他機型不一定會有一般就是三個:device、kernel、vendor(非必有)
#<類型name="倉庫名"path="文件路徑"/>
<android
name="lineage"
path="~/bin/lineage"/>
<device
name="android_device_zuk_z2"
path="$android/device/zuk/z2x"/>
<device
name="android_device_zuk_msm8996-common"
path="$android/device/zuk/msm8996-common"/>#ZUK特殊部分
<kernel
name="android_kernel_zuk_msm8996"
path="$android/kernel/zuk/msm8996"/>#這個命名比較特別,打包開發的
<!--附加部分,vendor一般有生成腳本或者需要額外編寫-->
<vendor
name="android_vendor_z2x"
path="$android/vendor/zuk/z2x"/>
<vendor
name="android_vendor_msm8996-common"
path="$android/vendor/zuk/msm8996-common"/>#ZUK特殊部分
#end
######錯誤部分,可以查閱,幫助理解,最好跳過,跳過
把上面的文件解包放置到相應文件夾下
device文件,android_device_$your-device-name
kernel文件,android_kernel_$your-device-name
vendor文件,android_vendor_$your-device-name"_"對應是一個文件夾分層,比如device就是在「android源碼「文件夾下(看你怎麼起名字,就是清華網站中提示你的「WORKING_DIRECTORY」文件夾,可以是『android』、『lineage』等等)的device文件夾下,你的機子品牌文件夾下,你的機型里(比如我的手機是ZUK EDGE-我是窮逼,沒錢換機,我的相應機型代號就是z2x-根據代號搞開發,內部機型z2151-根據內部型號找官方開源代碼,以下示例)
示例:
device:android_device_zuk_z2x
倉庫文件就在:~/bin/lineageOS/device/zuk/z2x
kernel:android_kernel_zuk_msm8996#為什麼這個忽然變成msm8996了呢,哈哈|
倉庫文件就在:~/bin/lineageOS/kernel/zuk/msm8996#因為機型特別
vendor:android_vendor_zuk_z2x#一般是不提供這個倉庫部分的,
#會有比如「extract-files.sh」等腳本
#需要連接你的手機,生成這些文件
以上引號部分是由網路自動保存編寫錯誤部分
最後是編譯:
sourcebuild/envsetup.sh
lunchlineage_z2x-userdebug#這條命令去查看機型文件夾下的lineage_*.mk文件,把z2x換成你的
cddevice/zuk/z2x#這條應該是你的機型文件夾,和下一條命令看情況找找你的vendor擴展腳本
./extract-files.sh#這個看情況,找找你的腳本
croot#返回lineage根目錄
make-j8#開始編譯ROM,後面的-j*是線程,看你的CPU而定
#看輸出log,編譯完成ROM在out文件夾下
這樣就完成了:
看似簡單,實則簡單,但是肯定會出錯,因為你是在學習,好好學,好好問問,學會用網路,別跟個愣頭B一樣,張嘴就是:我是小白,這個怎麼弄,我不會啊,你教教我唄,這個什麼意思;崽種不會自己學
# 好了,結束,加油
C. 如何移植android2.1源代碼到自己的手機上
一,准備好android2.1源碼編譯環境以及手機USB調試環境。
二,將手機上硬體驅動程序以及相關的配置文件通過ADB命令保存好。
三,針對不同的手機機型,製作相應的vendor配置文件。
四,編譯源碼。
五,通過手機提供的bootloader刷機或者直接以recovery的方式更新ROM。
在以上五個步驟中,其中最難處理的便是第2個步驟,這個步驟需要熟悉每個手機機型的硬體參數,並且能夠在手機上找到相關的驅動程序以及了解他們如何配置。而CyanogenMod團隊公布的源碼當中,己經將相關的工作做好了,編譯源碼之前僅僅需要執行相應的shell命令,便可順利的下載相應的手機驅動程序以及配置文件。
下面是移植步驟,供參考:
一,首先需要下載CyanogenMod 5.0.8的源碼:
$ mkdir android-cm5
$ cd android-cm5
$ repo init -u git://github.com/CyanogenMod/android.git -b eclair
$ repo sync
二,下載CyanogenMod需要的一些共同文件,如果想最終版本中不需要這些APK,也可以通過配置/vendor/cyanogen/cyanogen.mk文件將這些需要的APK COPY命令注釋掉。
$ cd vendor/cyanogen/
$ ./get-rommanager #下載一個RomManager.apk包,主要是刷ROM用的。我沒用過。
$ ./get-google-files #其它的一些google開發的android apk包,我也沒有用過!
三,下載針對htc legend(g6)的vendor.
$ cd ../../vendor/htc
$ git clone git://github.com/aleho/android_vendor_htc_legend.git #下載針對htc legend(g6)手機的vendor,裡麵包括相關的配置參數,以及從手機上下載驅動程序的SHELL命令。
$ mv android_vendor_htc_legend/ legend
$ cd legend
$ ./extract-files.sh #確保這個命令執行將你的手機連接好電腦並且開了手機USB調試,adb命令可以連接手機。這個過程主要是下載htc legend(g6)驅動程序以及配置文件。
四,針對CyanogenMod 5.0.8源碼打上htc legend(g6)的補丁包,這個補丁包主要是wifi和觸摸屏的,如果不做,觸摸屏將無法觸摸以及wifi功能無法啟動。
D. Android學習之Build環境介紹
這里略過對android在手機上的文件系統框架的闡述(google或者都能幫助你找到對應的信息),主要看google是如何把生成合適的rootfs的工作整合到它的build體系當中,同時,會順帶看一下CyanogenMod中對應各種機型的build機制。
首先,來看一下Android的build系統中,使用到的編譯選項和相關工具
具體的目錄在:mydroid/build/tools/下
|-- acp
這是一個稍微改良的cp命令,用來應付在windows/MAC/Linux下的cp命令的缺陷,其中的README很值得一看!
|-- adbs
這是一個用來查看crash問題的工具,詳細請看《Android調試工具之adbs》
|-- Android.mk
|-- apicheck
用來進行發布前的API檢查(參見mydroid/build/core/tasks/apicheck.mk),是否新編譯的系統中有破壞API兼容性或是非法的API
這里的代碼是用java寫的用來檢查編譯時生成的API相關信息的xml文件(mydroid/framework/base/api/中),可以參考裡面對於xml文件解析的代碼
|-- apriori
實現prelink的工具,簡單介紹參見(mydroid/bionic/linker/README.TXT)
|-- atree
為android SDK服務的一個工具,用來按照指定xxx.atree文件中的內容進行一些文件操作
|-- bin2asm
不太明白具體的用處,應該是用來應付mac上編譯android一些與gcc相關的問題
|-- buildinfo.sh
生成target中的各種xxx.prop文件,如system.prop, build.prop等
|-- check_builds.sh
包裝了diff,用來看2個發布版本之間變化
|-- check_prereq
device上進行ota升級時的工具之一
|-- compare_fileslist.py
與check_builds.sh配合完成版本比較的腳本
|-- droiddoc
Android更具javadoc的一些移植
|-- mp-package-stats
簡單的查看一個jar/apk文件內的dex和其它文件的大小信息
|-- event_log_tags.py
處理event-log-tags的內容,關於event-log-tags文件的意義參見《Android學習之event-log-tags是神馬》
|-- fileslist.py
簡化的列出指定目錄下所有文件及大小的腳本 -- 可以放入自己的工具庫了使用:)
|-- findleaves.py
在指定目錄中(可多個)找指定文件的腳本 -- 可以放入自己的工具庫了使用:)
|-- fixlinebreaks.sh
把windows中的換行改為linux下的 -- 可以放入自己的工具庫了使用:大散蘆)
|-- fs_config
列出指定文件夾滾帶及文件的許可權
|-- fs_get_stats
得到指定文件夾下文件的簡單stats信息
|-- iself
判斷文件是否是ELF格式
|-- isprelinked
判斷文件是否是prelink過的
|-- java-event-log-tags.py
處理event-log-tags的內容,關於event-log-tags文件的意義參見《Android學習之event-log-tags是神馬》
|-- kcm
key character map的工具, 相關資料參照:
|-- lsd
!!!!!! ???
|-- merge-event-log-tags.py
處理event-log-tags的內容,關於event-log-tags文件的意掘野義參見《Android學習之event-log-tags是神馬》
|-- mktarball.sh
與fs_get_stats配合而執行的打包工具
|-- print_mole_licenses.sh
顯示當前目錄下所有mole信息
|-- releasetools
-- check_target_files_signatures
|-- common.py
|-- edify_generator.py
|-- img_from_target_files
|-- ota_from_target_files
`-- sign_target_files_apks
|-- rgb2565
rgb轉換工具
|-- signapk
命令行下對jar包簽名的工具
|-- soslim
Android定製的編譯工具之一,簡單介紹參見(mydroid/bionic/linker/README.TXT)
|-- warn.py
解析Android系統編譯log的工具
`-- zipalign
zipfile的對齊工具,參見該文件夾下的README.TXT
#p#副標題#e#
在來看看Android編譯系統中定義的一些通用XXX.mk文件
mydroid/build/core/
|-- armelflib.x
|-- armelf.x
|-- armelf.xsc
|-- base_rules.mk
|-- binary.mk
|-- build_id.mk
|-- build-system.html
|-- checktree
|-- cleanbuild.mk
|-- cleanspec.mk
|-- clear_vars.mk
|-- combo
|-- config.mk
|-- _headers.mk
|-- definitions.mk
|-- device.mk
|-- dex_preopt.mk
|-- distdir.mk
|-- droiddoc.mk
|-- mpvar.mk
|-- dynamic_binary.mk
|-- envsetup.mk
|-- executable.mk
|-- filter_symbols.sh
|-- find-jdk-tools-jar.sh
|-- help.mk
|-- host_executable.mk
|-- host_java_library.mk
|-- host_native_test.mk
|-- host_prebuilt.mk
|-- host_shared_library.mk
|-- host_static_library.mk
|-- java_library.mk
|-- java.mk
|-- legacy_prebuilts.mk
|-- main.mk
|-- Makefile
|-- multi_prebuilt.mk
|-- native_test.mk
|-- node_fns.mk
|-- notice_files.mk
|-- package.mk
|-- pathmap.mk |-- phony_package.mk
|-- prebuilt.mk
|-- process_wrapper_gdb.cmds
|-- process_wrapper_gdb.sh
|-- process_wrapper.sh
|-- proct_config.mk
|-- proct.mk
|-- proguard.flags
|-- proguard_tests.flags
|-- raw_executable.mk
|-- raw_static_library.mk
|-- root.mk
|-- shared_library.mk
|-- static_java_library.mk
|-- static_library.mk
|-- tasks
|-- user_tags.mk
`-- version_defaults.mk
#p#副標題#e#
這里,目錄在mydroid/build/core/tasks/有一些特別的task
|-- apicheck.mk, 判斷api是否符合AOSP的規范
|-- cts.mk cts測試, 可以在代碼根目錄, make cts, 編譯結束之後,進入out/host/linux-x86/bin/下,執行cts命令
|-- ide.mk IDE開發環境
|-- proct-graph.mk
`-- sdk-addon.mk
NDK的build環境沒有包含在標注難得AOSP的/build/目錄下
而是在mydroid/ndk/build下
$ cd ndk/build/tools
$ export ANDROID_NDK_ROOT=aosp-root/ndk
$ ./make-release --help
一些小技巧
如何顯示每次編譯所包含的所有xxx.mk文件
找到build/core/main.mk
把include $(subdir_makefiles)替換為
[plain] view plain $(foreach subdir_makefile, $(subdir_makefiles),
$(info Including $(subdir_makefile))
$(eval include $(subdir_makefile)))
subdir_makefile :=
如果遇見API相關的PACKAGING/checkapi-current-timestamp] Error 38
需要執行:make update-api
如何在AOSP代碼目錄之外編譯
[plain] view plain # Paths and settings
TARGET_PRODUCT = generic
ANDROID_ROOT = /home/karim/android/aosp-2.3.x
BIONIC_LIBC = $(ANDROID_ROOT)/bionic/libc
PRODUCT_OUT = $(ANDROID_ROOT)/out/target/proct/$(TARGET_PRODUCT)
CROSS_COMPILE =
$(ANDROID_ROOT)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
# Tool names
AS = $(CROSS_COMPILE)as
AR = $(CROSS_COMPILE)ar
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
LD = $(CROSS_COMPILE)ld
NM = $(CROSS_COMPILE)nm
OBJCOPY = $(CROSS_COMPILE)obj
OBJDUMP = $(CROSS_COMPILE)objmp
RANLIB = $(CROSS_COMPILE)ranlib
READELF = $(CROSS_COMPILE)readelf
SIZE = $(CROSS_COMPILE)size
STRINGS = $(CROSS_COMPILE)strings
STRIP = $(CROSS_COMPILE)strip
export AS AR CC CPP LD NM OBJCOPY OBJDUMP RANLIB READELF
SIZE STRINGS STRIP
# Build settings
CFLAGS = -O2 -Wall -fno-short-enums
HEADER_OPS = -I$(BIONIC_LIBC)/arch-arm/include
-I$(BIONIC_LIBC)/kernel/common
-I$(BIONIC_LIBC)/kernel/arch-arm
LDFLAGS = -nostdlib -Wl,-dynamic-linker,/system/bin/linker
$(PRODUCT_OUT)/obj/lib/crtbegin_dynamic.o
$(PRODUCT_OUT)/obj/lib/crtend_android.o
-L$(PRODUCT_OUT)/obj/lib -lc -ldl
# Installation variables
EXEC_NAME = example-app
INSTALL = install
INSTALL_DIR = $(PRODUCT_OUT)/system/bin
# Files needed for the build
OBJS = example-app.o
# Make rules
all: example-app
.c.o:
$(CC) $(CFLAGS) $(HEADER_OPS) -c {1}lt;
example-app: ${OBJS}
$(CC) -o $(EXEC_NAME) ${OBJS} $(LDFLAGS)
install: example-app
test -d $(INSTALL_DIR) || $(INSTALL) -d -m 755 $(INSTALL_DIR)
$(INSTALL) -m 755 $(EXEC_NAME) $(INSTALL_DIR)
clean:
rm -f *.o $(EXEC_NAME) core
distclean:
rm -f *~
rm -f *.o $(EXEC_NAME) core
如何增加一個新的設備
[plain] view plain $ cd ~/android/aosp-2.3.x
$ . build/envsetup.sh
$ mkdir -p device/acme/coyotepad
$ cd device/acme/coyotepad
進入AndroidProcts.mk
PRODUCT_MAKEFILES :=
$(LOCAL_DIR)/full_coyotepad.mk
對於full_coyotepad.mk
$(call inherit-proct, $(SRC_TARGET_DIR)/proct/languages_full.mk)
$(call inherit-proct, $(SRC_TARGET_DIR)/proct/full.mk)
DEVICE_PACKAGE_OVERLAYS :=
PRODUCT_PACKAGES +=
PRODUCT_COPY_FILES +=
PRODUCT_NAME := full_coyotepad
PRODUCT_DEVICE := coyotepad
PRODUCT_MODEL := Full Android on CoyotePad, meep-meep
在BoardConfig.mk中
TARGET_NO_KERNEL := true
TARGET_NO_BOOTLOADER := true
TARGET_CPU_ABI := armeabi
BOARD_USES_GENERIC_AUDIO := true
USE_CAMERA_STUB := true
打開vendorsetup.sh
add_lunch_combo full_coyotepad-eng
#p#副標題#e#