PC上開發一個安卓模擬器,至少需要搭配怎樣的團隊,做到夜神、海馬、逍遙的程度有多大?

從底層開發估計太貴了,如何能利用開源、商用版之類的快速開發;

補充一下,主要目的是為了適配輸入設備(特殊鍵盤、攝像頭等),多謝了!

有北京的的高人,我請客,求賜教!


大多數商業性的Android模擬器也是基於 VirtualBox 的(且無視開源協議),據我所知你在題目中提到的某個就是。

如果是這種模擬器,你也需要無視開源協議的東西的話,大概一個水平中上游的高中生就能做。

(不過沒進入社會的高中生們還充滿對正義的信任,還相信開源協議在我大天朝有啥法律效應呢【笑】,大概不會去做這種違背良心的事。)


安卓模擬器方面我有些許研究,好多人也說了安卓模擬器核心還是用的vbox虛擬機,另一個核心就是Android x86這個項目,再進一步呢就是intel開發的arm指令轉x86指令的模塊。你說的鍵盤滑鼠外圍設備不用擔心,vbox都有的。可以這麼說如果沒有Intel的這個庫,模擬器不會這麼火熱。不是說沒有人能開發出這個指令轉換的模塊,只是願不願意搞,以及開發後的穩定性和效率,雖然intel的這個庫效率方面肯定有損耗,這都不是問題,pc機處理器和手機處理器沒有可比性。下面再說說vbox的架構,vbox是分層設計,其他你可以不管,你只需要熟悉vbox的sdk,vbox是有sdk的!sdk介面是com組件(只說win系統),你必須能熟練使用com組件,並且對sdk的介面非常熟悉然後才能靈活運用開發。基於vbox開發說簡單一點就是給vbox重新開發個前端界面而已。他自帶的qt開發的界面也是用的sdk介面,裡面還有用sdl開發的前端界面。

如果你有追求不想用vbox,畢竟是虛擬機里運行和本機運行還是有差別的。你如果想在win上直接運行?!可以嗎?也是可以的!你用虛擬機跑安卓系統其實是想運行某個apk程序,如果apk可以在win上運行不用vbox,想想是不是有點小激動呢?

好吧,先說一下你需要學習的東西,精通win系統底層開發,內核模塊要會開發吧,就是所謂的驅動開發,深入解析Windows操作系統這本書就不說了。

熟悉Linux系統開發,各種系統api瞭然於胸。精通Android系統,特別是native層。好了,說這麼多下面要乾的事情就是安卓系統的裁剪,把Linux內核砍掉,把其他部分移植到win系統,這個說的簡單,做起來就難多了。這裡又有兩種方案選擇。

第一,用mingw編譯器編譯安卓native的模塊,來移植大部分模塊,剩下的可是難啃的骨頭!這個編譯器是gcc的win版本,可以把Linux下的程序在win下編譯運行,他處理了一部分API轉換,Linux下某些api用win下的api替代,有不少api他是處理不了的,需要自己來處理,主要就是模擬這個api,但是裡面坑有不少!

用mingw這個有兩個好處,編譯後的文件是pe文件不是elf,也就是模塊是dll不是so。第二,處理兩個系統之間的api差異,其實就是用win api來替代linux的api,但是它只能處理一部分。這個搞完後,需要搞定安卓的專有驅動,好像3個左右,其中binder這個最重要!你要在win這邊搞定,可以在應用層,也可以在內核。這個驅動主要是進程間通信,數據0拷貝,物理內存直接映射到進程的虛擬地址。安卓的Java層其實最簡單,把java虛擬機移植出來就行了。下一步你要知道安卓的包管理器,apk安裝後有哪些動作,你要運行apk,相當於你這個apk已經安裝,不過你也可以不管這些但是要砍掉一些東西。下面你要把apk的啟動流程搞清楚,然後就可以運行這個apk了。apk運行都是zygote進程fork出來的,這個進程名字還會變,Java虛擬機就泡在這裡面。

這麼移植出來對apk來說是透明的,它不知道運行在哪裡,只要api能正常工作就行。上面只是粗淺的說了一下,裡面坑非常多,這個移植需要深厚的功底,win,linux,android,這三個系統最好精通,至少也得非常熟悉,

這個方案有個弊端,如果apk里有ndk開發的so模塊,且只有arm架構的,那麼這個apk跑不起來,因為intel的指令轉換庫不開源,只有elf格式的so,而且還不少。當初Intel搞這個的初衷是想進攻移動市場,市場也有過幾款x86平台的手機,聯想就有一款。要想手機廠商用你的處理器你要保整現有的apk可以用啊,要不誰買啊,所以Intel搞了這個東西給他硬體來鋪路。

這個方案國內已經有公司實現。

如果你想完美?!可以的!不能用mingw編譯器了,你要把android x86系統里的so直接拿出來用,其中libc的源代碼要好好修改一下,把Linux系統調用全部修改調用到你的代理模塊,代理模塊實現所有的api,libc里用到的Linuxapi貌似有200個左右,自己實現這麼多不現實,下面就另一個東西上場,cygwin,紅帽子開發維護,開源,實現了很多api,代理模塊直接中轉過去,不過cygwin要初始化一些東西,自己去看。還有一個問題就是文件格式的問題,你要寫個elf載入器來運行。這樣是可以利用intel這個庫運行帶有arm架構的so模塊apk程序。上面只是大概說了一下,有不少細節沒有說,一下也說不完。如果感興趣自己順著這個可以慢慢研究。漏了一個事情,Google的chrome瀏覽器運行apk就是這個方案大同小異,指令轉換是自己開發的,但不是轉換到x86他轉換成瀏覽器沙箱虛擬機位元組碼,也是指令。後面也可能有變動,好長時間沒有看了,這個插件叫arc,app runtime for chrome。

歡迎各位大神拍磚。


據我所知, 夜神團隊是X86的模板製作的。

而雷電是 完全在夜神的模板之上進行的微型調整,談不上版權問題 更談不上技術支持。

主要是你開發一個安卓模擬器之後, 你要有一個 強大的運營團隊幫你 做到拉新 推廣 呢。

這倆點 才是重中之重, 除此之外 關於維護的 技術團隊 你要自己甄別 挑選的,成熟的團隊不好找 稚嫩的新人 又不好培養。

如果沒有自己 一個成熟的技術團隊,建議樓主 還是放棄這個想法的好。。。

畢竟理想很豐滿 現實確實異常的骨感


前兩年研究過,最早的起源是andriod x86項目,可以用virtualbox跑Android,後來有人在這個基礎上合併了google的一部分模擬器代碼來支持OpenGL,發布了開源的androVM項目,後來項目開發者意識到了這個項目的商業價值,於是刪除了開源代碼,變成了genemotion這個商業模擬器產品。國內的一些人在androVM的基礎上繼續修改,推出了一大波諸如海馬,逍遙等等的模擬器。目前最大的障礙是把arm轉換成x86的庫是用的Intel的huodini,這個庫是不開源的,而且Intel也不再維護了,所以目前模擬器支持的Android版本始終停留在4.x,後續要繼續發展技術上有較大的障礙。


海馬已經不做模擬器了,模擬器團隊的人都走了


我想團隊至少也得有幾個軟體開發的工程師,幾個客服人員,幾個營銷人員,幾個銷售人員,幾個後勤包括出納,財會,還得租一間辦公室。所以還是安心的玩夜神,海馬,逍遙吧!!!


我也想搞個android模擬器,不過我是萌新


你懂的,這種東西靠的不是技術而是宣傳啊


推薦閱讀:

零基礎如何學習安卓應用開發?
BAT之類的大公司的android程序員跟普通公司的android程序員的技術差距在哪?
安卓的進程管理軟體是否科學?
如何解決安卓系統吃內存、侵佔ram的問題?
Android 開發時,如何實現和伺服器的數據同步 ?

TAG:Android開發 | Android | 安卓模擬器 |