《純技術分析阿里雲OS和Android之間的關係》補充

chszs發表於2012-09-18
前面一份投稿的錯誤很抱歉,rom本身就找錯了,用了一個AOSP-like的刷機包。好在這份內容錯誤的投稿多少起到了拋磚引玉的作用,當天晚上,就給出了正確的rom的分析《純技術分析阿里雲OS和Android之間的關係》。這裡想做的事情就是把它的工作進一步展開,辦法很笨,簡單而直觀:找出整個rom中,linuxkernel以上的所有部件各是什麼東西。這樣各位看官就能知道整個rom由什麼組成,至於阿里雲OS到底是什麼,想必能獲得屬於自己的正確判斷。
使用的方法是,通過Binary,動態庫的名字來推測它本質上是什麼,在AOSP Android中有沒有相同或類似的東西。
刷機包的來源是http://bbs.aliyun.com/read.php?tid=22809
.so檔案一般指的是linux下的動態連結用的庫,它的作用類似於windows架構中的dll。簡單地說,原始碼的函式被編譯成二進位制格式,存放在.so庫中。.so庫可以被動態呼叫。在Android中的app如果要使用C,C++程式碼編譯出的二進位制程式,一般都得通過JNI呼叫.so庫的方式。
system/lib/ 中的動態庫
liba2dp         藍芽a2dp協議用的引數
libacc          Android內建的輕量級C編譯器
libAK8975Compass                可能是日本旭化成Electronic的Ak8975指南針相關庫
libaligl2               可能是阿里雲的相關庫
libalipy                可能是阿里雲的相關庫
libalitag               可能是阿里雲的相關庫
libandroid      Android提供的一些API實際執行時呼叫的庫
libandroid_runtime  和Android中實現的JNI的主要庫,由frameworks/base/core/jni/下的程式碼編譯而來
libandroid_services             和Android中實現的JNI有關的庫
libappengine    可能是阿里雲appengine相關庫
libardrv_dynamic                可能是和NVIDIA相關的庫(W700使用了NVIDIA Tegra2作為其AP處理器)
libasound               alsa-lib(Advanced Linux Sound Architecture),linux的音訊系統的中間層,用於Android
libasound               同樣是alsa的庫
libaudioeffect_jni              Android與音效有關的庫,涉及到密集運算,因此用C程式碼實現可能更有效率
libaudioflinger  Android的audio最核心的部分是audioflinger,audioflinger向上處理來自於應用程式的聲音相關的所有請求,向下通過AudioHardwareInterface訪問硬體
libaudiopolicy          audioflinger必需的庫
libbinder               Android用於實現binder機制的庫,binder用於Android的跨程式通訊
libbluedroid            Android中和藍芽(bluetooth)相關的庫
libbluetooth            Android中和藍芽(bluetooth)相關的庫
libbluetoothd           Android中和藍芽(bluetooth)相關的庫
libc                            Android中C執行庫的實現,也就是Bionic
libcalibrate            Android中與觸控式螢幕相關的庫
libcamera                               Android中與攝像頭相關的庫
libcamera_client                Android中與攝像頭相關的庫
libcameraservice                Android中與攝像頭相關的庫
libcgdrv                        可能是與Tegra 2相關的庫
libcloudletevent        可能是阿里云云服務相關庫
libcloudletos           可能是阿里云云服務相關庫
libCommon               Android的相關庫
libcrypto                       Android中所使用的OpenSSL的一部分,包含了所使用到的加密演算法的庫
libctest                C++測試工具,被Android採用
libcutils               Bionic的一部分,是Android中最基礎的庫
libdbus         Dbus,被Android拿來用於程式間通訊
libdiskconfig           Android中與儲存(磁碟)相關的庫
libdl                   Bionic實現的動態連結相關的庫
libdrm1         Android中與drm(電子版權管理)相關的庫
libdrm1_jni     Android中與drm相關的庫
libdvm  Dalvik虛擬機器本體
libeffects              Android中與媒體相關的庫,原始碼在/mdia/libeffects/中
libEGL          Android採用的OpenGL相關庫
libemoji                “絵文字”(顏文字)相關庫
libETC1         OpenGL相關庫
libexif         Android所採用的編輯照片EXIF資訊相關的庫
libexpat                (The Expat XML Parser)一個叫做Expat的XML解析器,可在Android的原始碼目錄/platform/external/下面
libFFTEm                Android使用的一個用於計算FFT(快速傅立葉變換)的庫
libGLESv1_CM            Android採用的OpenGL ES相關庫
libGLESv2                       Android採用的OpenGL ES相關庫
libgui          Android中與使用者介面相關的庫
libhardware             Android中HAL(硬體抽象層)相關庫
libhardware_legacy              Android中HAL(硬體抽象層)相關庫
libicui18n                      ICU(International Component for Unicode),Android中與字元編碼有關的庫,i18n指的是internationalization,也就是國際化,還有一個叫L10n(localization,本地化)的類似概念。
libicuuc                同樣是libicu的一部分
libiprouteutil          Android中與TCP/IP棧相關的庫
libjni_latinime         Android中與拉丁字母輸入法相關的庫
libjni_pinyinime        Android中與中文拼音輸入法相關的庫
libjnigraphics          Android 2.2開始引入的部件,與繪圖有關,對bitmap的訪問進行了封裝。
libjniktouchinner               似乎是和天語(K-touch)觸控式螢幕相關的庫
libjpeg         Libjpeg是被Android拿來用於處理jpeg影像的相關庫
liblame1lib  LAME,是一個著名的mp3編碼器,AOSP中似乎沒有它。LAME本身僅以原始碼形式,按照LGPL釋出以躲避法律問題,發行LAME的可執行程式(包括庫)可能需要MP3專利持有者的授權
liblamelib              LAME
liblog          Android所使用的,有關日誌記錄的庫
libm            Bionic的一部分,與記憶體分配回收有關
libmapview-jni          沒有出現在AOSP中,可能是和阿里雲OS的地圖部件有關的庫
libmedia    Android的MediaPlay架構的一部分,原始碼在/frameworks/base/media/libmedia/中
libmedia-jni    MediaPlayer中負責與JNI通訊的部分
libmediaplayerservice   MediaPlayer架構的一部分,通過繼承libmedia.so的類實現伺服器的功能
libmllite               Android中與感測器相關的庫
libmlplatform           Android中與感測器相關的庫
libmpl          Android中與感測器相關的庫
libnativehelper    Dalvik的一部分,用於註冊JNI呼叫的原生程式碼函式,原始碼在dalviklibnativehelper 裡面
libnetlink              RSVP協議開源實現,被Android採用
libnetutils     Android中有關乙太網(Ethernet)的模組
libnfc_ndef    Android中用於實現nfc的一小部分,主要是實現NDEF訊息的解析,供Framework呼叫,但在這個rom中沒有找到libnfc這個主要模組
libnggame       Samsung GameHub相關庫(這顯然不太可能是AOSP的一部分)
libnodejs               Node.JS,一個伺服器端JavaScript 直譯器,可能用於阿里雲相關服務

##以下一長串libnv開頭的都是和NVIDIA Tegra2有關的庫,nv是NVIDIA的慣用縮寫。也就是說,也可以在別的使用Tegra晶片的手機中找到類似的內容
libnvddk_2d             ddk指的可能是Driver Development Kit
libnvddk_2d_v2
libnvddk_audiofx
libnvddk_vmr
libnvdispmgr_d
libnvec
libnvmm
libnvmm_audio
libnvmm_camera
libnvmm_contentpipe
libnvmm_image
libnvmm_manager
libnvmm_misc
libnvmm_parser
libnvmm_service
libnvmm_tracklist
libnvmm_utils
libnvmm_video
libnvmm_videorenderer
libnvmm_vp6_video
libnvmm_writer
libnvodm_dtvtuner
libnvodm_imager
libnvodm_query
libnvomx
libnvomxilclient
libnvos
libnvrm
libnvrm_channel
libnvrm_graphics
libnvsm
libnvtestio
libnvtestresults
libnvwinsys
libnvwsi
##
libopensl_audio 與OpenGL ES的音訊部分相關的庫
libOpenSLES             與OpenGL ES的音訊部分相關的庫
libpixelflinger         Pixelflinger是Android系統中為OpenGLES引擎提供的一套軟體渲染器
libpmstatus             可能是阿里雲郵的庫
libqqsecure             和騰訊QQ有關的庫
libreference-cdma-sms           Android中與CDMA這種蜂窩網路制式相關的庫
libreference-ril
Android中的ril庫,負責與基帶(baseband)晶片的驅動(經常會被稱作‘基帶’,‘radio’等)通訊的部分
libRS                   Android中與使用者介面有關的庫,和launcher有關
librs_jni               Android中與使用者介面有關的庫,和launcher有關
librtp_jni              Android中和RTP協議相關的庫
libsensors.mpl          Android中和感測器有關的庫
libsensorservice        Android中和感測器有關的庫
libsinautility          和新浪微博有關的庫
libskia         Android所採用的SKIA圖形引擎
libskia         Android所採用的SKIA圖形引擎
libskyeye               SkyEye(天目)硬體模擬平臺相關庫,可能是阿里雲OS所使用的庫
libsmsChecker           可能是QQ管家的元件
libsonivox      一個電子聲音合成器,原始碼在/external/sonivox/ 中
libsoundpool            Android中和聲音回放有關的庫
libsqlite               Android所使用的Sqlite的相關庫
libsqlite_jni   Sqlite的相關庫,用於JNI通訊
libSR_AudioIn           和Tegra 2有關的庫
libsrec_jni             原始碼在/external/srec/ 中,
libssl                  OpenSSL模組主體
libstagefright          FFmpeg(現在叫libav)的模組
libstagefright_amrnb_common             FFmpeg(現在叫libav)的模組
libstagefright_avc_common                       FFmpeg(現在叫libav)的模組
libstagefright_color_conversion         FFmpeg(現在叫libav)的模組
libstagefright_enc_common                       FFmpeg(現在叫libav)的模組
libstagefright_foundation                       FFmpeg(現在叫libav)的模組
libstagefright_omx    FFmpeg(現在叫libav)的模組
libstagefrighthw    FFmpeg(現在叫libav)的模組
libstdc++                       Bionic的C++庫
libstlport                      Bionic的C++的STL模版庫
libstorageservice               可能是阿里雲OS的庫
libsurfaceflinger               Android顯示系統的部件相關庫
libsurfaceflinger_client                Android顯示系統的部件相關庫
libsystem_server                Android中和系統服務有關的庫
libsysutils    Android的核心模組,這裡的一個(可能是曾經的)漏洞和zergrush的提權有關
libthread_db            Android採用的與多執行緒除錯有關的庫
libttspico                      Android採用的TTS語音相關庫
libttssynthproxy                Android採用的TTS語音相關庫
libtyidservice                  可能是阿里雲OS的庫
libui                   Android的GUI(圖形使用者介面)的中樞
libutils    Android的底層庫,這個庫以C++實現,它提供的API也是C++的。Android的層次的C語言程式和庫,大都基於libutils開發。
libVideoCtrl            和視訊控制相關的庫
libvmkid_clibs          阿里雲OS的lemur虛擬機器
libvmkid_lemur  阿里雲OS的lemur虛擬機器
libvorbisidec           Android採用的Vorbis解碼器(如ogg等)
libwebcore              Android中的Webkit網頁渲染引擎
libwpa_client           Android中和無線區域網wpa加密相關的部分
libxgold-ril            也是一個Ril模組
libz                    Android所使用的Zlib
node_compress   node.js所使用的流壓縮器擴充套件,應該是阿里雲OS的部件
node_zipfile            node.js管理zip壓縮檔案的擴充套件,應該是阿里雲OS的部件
omxplayer               omxplayer是Android所使用的一個媒體播放器
system/bin 中的可執行檔案,linux的原生可執行檔案不需要,通常也沒有副檔名
akmd8975                W700所使用的指南針有關
am                              Android所使用的命令列工具
app_process             Android中啟動java程式的途徑
applypatch              原始碼在tools/applypatch/
應該是和.patch差分補丁有關的工具,可能與OTA更新有關
auth.cgi                        可能是阿里雲OS的部件
bootanimation   Android負責渲染啟動動畫的
BqTool                  可能是阿里雲OS的部件
brcm_patchram_plus              Android中與藍芽相關的模組
bugreport               Android的除錯工具,可以通過adb啟動
chpasswd.cgi            可能是阿里雲OS的部件
cyttsp_fwloader 似乎是一個Android的硬體校正工具
dalvikvm                        Dalvik虛擬機器的執行檔案
dbus-daemon             Android採用的Dbus的看守程式
debuggerd               一個Android的守護程式,他會把出問題的程式資訊列印到檔案裡面
dexopt          Android中執行odex相反動作的程式
dhcpcd                  Android負責進行DHCP的守護程式,可能用於wifi熱點模式
dnsmasq                 Android使用的一個域名解析伺服器,用於提供DNS 快取和DHCP 服務功能
dumpstate               Android的命令列除錯工具
dumpsys                 Android的命令列除錯工具
dyz                             Android的命令列除錯工具,和Dalvik虛擬機器的Zygote機制有關
fsck_msdos              Android使用的磁碟檢查工具
FWHelper                可能是阿里雲OS的部件
glgps           Android使用的負責GPS晶片與上層通訊的守護程式
gyrotest                與陀螺儀有關的
gzip                    gzip壓縮工具,在Andoid上都能見到
hciattach               Android上用於藍芽晶片初始化,協議繫結等功能的程式
ime                     Android的一個部件,原始碼在/frameworks/base/cmds/ime/
input           Android的一個部件,提供一種在終端輸入命令來控制系統的方式
installd                安裝apk時相關的服務
iptables                iptables防火牆,AOSP原始碼中德/external/ipdables/ 裡可以找到
keystore                Android採用的金鑰/數字證照管理工具
lemur           阿里雲OS的虛擬機器程式
lexopt          阿里雲OS的虛擬機器的“dexopt”
linker          Android用於共享庫的載入,連結
logcat          Android的除錯工具,用於輸出日誌
logmodule               Android的除錯工具,和日誌有關
logwrapper              Android的除錯工具,和日誌有關
mediaserver             Android的mediaserver
monkey          Android的壓力測試工具,向系統傳送偽隨機的使用者事件流(鍵盤輸入、觸控式螢幕輸入、手勢輸入等)
mtpd            Android中和VPN有關的守護程式
ndc                     Android中和網路有關的工具
netcfg          Android中獲取網路資訊的工具
netd                    Android中和網路有關的工具
nv_hciattach            NVIDIA相關的內容
nvtest                  NVIDIA相關的內容
omx_tests               Android的測試工具
pand    Android中和建立wifi熱點有關的工具
phoneService.cgi                可能是阿里雲OS的元件
ping    這個就不用說了吧,除了ping以外還有什麼
pm      Android用於包管理的指令碼(顯然pm就是package manager的縮寫)
pppd    Android中用於Point-to-Point Protocol的守護程式
progress.cgi                            可能是阿里雲OS的元件
recoveryd               可能與recovery有關的內容
rild    Android的RIL模組的守護程式
rilsyscmd       可能是和RIL模組有關的命令列工具
run-as  Android的一個命令
schedtest       Android的一個除錯工具
screencap       Android的截圖工具
sdcard  Android的和磁碟相關的工具
sdptool Android的一個管理工具
service Android的Service元件的工具
servicemanager          Android的Service元件的工具
sh      這個就不用說了吧
surfaceflinger                  Android顯示部件的守護程式
svc             Android的Service元件的工具
system_server           Android的Service元件的工具
tc      Android的一個工具
tegrastats      NVIDIA的Tegra晶片有關的工具
toolbox Android的一個工具
upload.cgi      可能是阿里雲OS的元件
v8shell Google的V8虛擬機器,用於快速執行javascript
vdc     Android的一個工具
vold    (Volume Daemon) 負責大容量儲存裝置掛載和刪除的守護程式
wl      Android的一個工具
wpa_supplicant  Android中用於處理無線區域網的WPA(2)安全措施的守護程式
xgold-mux       可能是阿里雲OS的元件或是W700手機的元件

我的判斷是,W700用的阿里雲OS從頭到尾用的了和AOSP Android一樣的東西:Linux核心,rom中幾乎所有的二進位制部件(/bin目錄下的可執行程式,/lib目錄下的動態庫)都是和AOSP Android相同的,僅僅多出了兩個模組:lemur虛擬機器(而且這個東西的本質可能是和Dalvik沒什麼區別的)以及雲app用的一些客戶端程式,庫,框架。
到這裡為止,很明顯阿里雲OS的雲app部分是一個Android的補丁,如果按照人們通常不會把Windows 7 rtm當作windows 7 sp1升級包的補丁這樣的標準來看的話。
而lemur更像是一個Dalvik的補丁,或者不妨說,是外掛(plugin):
有一個蹊蹺的地方,在framework/目錄下的所有jar庫中的java中間程式碼全部是以lex結尾的,包括那些明顯是android framework的部分。android本身的java API都是封裝在framework/下面的庫中,包括dex格式在內應用執行的時候會直接呼叫這些jar庫中的lex格式所包含的物件(雖說實際上是經過lemur檢測/優化後的”olex”):這意味著lemur有可能和Dalvik幾乎完全相同,或者lemur就是Dalvik的一部分。
有可能lemur被寫出來的唯一目的是用於製造不相容性。退一步,lemur和Dalvik之間的區別顯然遠小於J2ME與Dalvik的差異。
Google施壓的物件是受到OHA限制的Acer,至少字面上阿里雲和這事情沒有直接關係。選擇不願意發售手機的是Acer。
所以,阿里雲公司:這個很丟人的話題,我們已經聽了很多,到這裡就可以了。不要再把你的傷口扯開了,已經夠了。


相關文章