用最新的Ubuntu 16.04,請首先確保自己已經安裝了Git.沒安裝的同學可以通過以下命令進行安裝:
sudo apt-get install git git config –global user.email 「[email protected]」 git config –global user.name 「test」
其中[email protected]為你自己的郵箱.
簡要說明
android源碼編譯的四個流程:1.源碼下載;2.構建編譯環境;3.編譯源碼;4運行.下文也將按照該流程講述.
源碼下載
由於某牆的原因,這里我們採用國內的鏡像源進行下載.
目前,可用的鏡像源一般是科大和清華的,具體使用差不多,這里我選擇清華大學鏡像進行說明.(參考:科大源,清華源)
repo工具下載及安裝
通過執行以下命令實現repo工具的下載和安裝
mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo
補充說明
這里,我來簡單的介紹下repo工具,我們知道AOSP項目由不同的子項目組成,為了方便進行管理,Google採用Git對AOSP項目進行多倉庫管理.在聊repo工具之前,我先帶你來聊聊多倉庫項目:
我們有個非常龐大的項目Pre,該項目由很多個子項目R1,R2,...Rn等組成,為了方便管理和協同開發,我們為每個子項目創立自己的倉庫,整個項目的結構如下:
這里寫圖片描述
執行完該命令後,再使用make命令繼續編譯.某些情況下,當你執行jack-admin kill-server時可能提示你命令不存在,此時去你去out/host/linux-x86/bin/目錄下會發現不存在jack-admin文件.如果我是你,我就會重新repo sync下,然後從頭來過.
錯誤三:使用emulator時,虛擬機停在黑屏界面,點擊無任何響應.此時,可能是kerner內核問題,解決方法如下:
執行如下命令:
通過使用kernel-qemu-armv7內核 解決模擬器等待黑屏問題.而-partition-size 1024 則是解決警告: system partion siez adjusted to match image file (163 MB >66 MB)
如果你一開始編譯的版本是aosp_arm-eng,使用上述命令仍然不能解決等待黑屏問題時,不妨編譯aosp_arm64-eng試試.
結束吧
到現在為止,你已經了解了整個android編譯的流程.除此之外,我也簡單的說明android源碼的多倉庫管理機制.下面,不妨自己動手嘗試一下.
B. 如何解除對谷歌網的限制
糾正一下,谷歌沒有被限制,是谷歌列出的鏈接目標被限制了。
C. 為什麼谷歌依然可以單方面禁止使用安卓
安卓系統是開源的,是全球程序員的共同勞動成果,為什麼總有人認為谷歌可以禁用安卓?
安卓是基於Linux系統開發的,而Linux是一款免費的操作系統(有GNU GPL授權證約束,要求免費),任何人可以免費獲得,並參與修改,從這個角度說Linux是全球程序員的共同勞動成果沒錯,但這么說安卓就不對。
於是谷歌決定不走蘋果的產業鏈通吃的商業模式,改學微軟的橫吃整個市場,為迅速佔領市場,手機廠商可以免費使用安卓系統。不花錢,大家自然願意用,加上谷歌不斷推出新版本消除BUG,安卓很快就打敗塞班,超越iOS,成為市場份額最大的手機操作系統。
從這里可以看出,安卓的開源和Linux的開源有本質不同:Linux允許修改底層代碼,所以版本眾多,而安卓沒有達到這個程度,更多的是改良,即聯合手機廠商優化軟硬體,最核心的東西還是掌握在谷歌手中,所以安卓系統才會每隔一段時間推出新版本。
D. 安卓SDK配環境 沒法連到谷歌 網上很多方式都試了(改hosts等)都沒用
二個方法
1.直接下開發集成環境 裡面都集成好了adt sdk都有,搜就行,很多的
2.自己更新,去下 《自由門 》fan牆軟體 然後
E. 谷歌限制華為,安卓系統受影響嗎
額,國內的基本都是深度定製的,基本都用不到谷歌框架,可能沒什麼影響
F. 華為公布的方舟編譯器到底對安卓軟體會有多大影響
安卓7.0之後,谷歌也意識到了程序佔地方、開機慢的問題,怎麼辦?谷歌發現,人們使用一個程序,不可能用所有的功能。那麼只編譯一部分常用的是不是就效率高了呢?所以這時候其實是把JIT又拉回到安卓上來,並且安裝的時候也不用全編譯,直接裝就是了,速度當然快了。這其實就是中間層、JIT、AOT一起來,並且根據用戶的習慣,把它常用的程序的常用功能代碼解釋好了存起來,用戶再用也飛快。
現在安卓手機的一大特色就是內存越來越大,6GB都是老人機的配置了。這除了程序大以外還有安卓的程序運行產生垃圾多有關系。那麼清理垃圾呢?則需要暫停程序,也就會頓一下,即所謂的「卡」。華為方舟編譯器則是利用程序多線程運行的特點。打個比方,您現在正在用的「中關村在線」這個APP用了AB兩個線程,在華為的P30手機中,那麼線程A運行的時候,B在清理垃圾,然後A線程清理垃圾的時候B線程在運行,程序運行不中斷,垃圾處理不停,做到了又連貫、又節約系統資源。
G. 安卓系統怎麼控制對linux的驅動程序,比如對I/O口的控制
安卓系統貌似刪除了部分遵從GPL協議的linux驅動,自己實現的很多底層控制,我這個了解不多,不好意思,幫不到你了
H. 如何制定android交叉編譯工具鏈
經常搞嵌入式開發的朋友對於交叉編譯環境應該並不陌生,說白了,就是一組運行在x86 PC機的編譯工具,可以讓你在PC機上編譯出目標平台(例如ARM)可識別的二進制文件。Android平台也提供了這樣的交叉編譯工具鏈,就放在Android的NDK開發包的toolchains目錄下,因此,我們的Makefile文件中,只需給出相應的編譯工具即可。
廢話就先說到這,直接上例子,我們目標是把下面這個math.c文件編譯成一個靜態庫文件:
#include <stdio.h>
int add( int a , int b ) {
return a+b;
}
你需要編寫一個Makefile文件,這里假設你的Android ndk被安裝在 /opt/android/ndk 目錄下,當然,你可以根據自己的實際情況修改Makefile中相關路徑的定義,Makefile文件示例如下:
# Makefile Written by ticktick
# Show how to cross-compile c/c++ code for android platform
.PHONY: clean
NDKROOT=/opt/android/ndk
PLATFORM=$(NDKROOT)/platforms/android-14/arch-arm
CROSS_COMPILE=$(NDKROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-
CC=$(CROSS_COMPILE)gcc
AR=$(CROSS_COMPILE)ar
LD=$(CROSS_COMPILE)ld
CFLAGS = -I$(PWD) -I$(PLATFORM)/usr/include -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp
LDFLAGS =
TARGET = libmath.a
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
all: $(OBJS)
$(AR) -rc $(TARGET) $(OBJS)
clean:
rm -f *.o *.a *.so
這里不講Makefile文件的基本原理,只說明一下針對Android環境的Makefile文件編寫的注意事項。
(1) CROSS_COMPILE
必須正確給出Android NDK編譯工具鏈的路徑,當在目錄中執行make命令的時候,編譯系統會根據 CROSS_COMPILE 前綴尋找對應的編譯命令。
(2) -I$(PLATFORM)/usr/include
由於Android平台沒有使用傳統的c語言庫libc,而是自己編寫了一套更加高效更適合嵌入式平台的c語言庫,所以系統頭文件目錄不能再使用默認的路徑,必須直到Android平台的頭文件目錄
(3) -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp
這些參數的意義網上基本上都有介紹,我就不一一解釋了,並不都是必須添加的,但比較常用。
編譯方法:
寫好makefile文件,並且保存之後,就可以直接在當前目錄下執行make命令,編譯完成後,當前目錄下會生成 libmath.a ,即可直接拿到Android的jni工程中和使用了。
I. 安卓系統不支持谷歌框架
支持的,安卓系統是谷歌公司開發的客戶端操作系統,谷歌框架可以在安卓系統中運行
J. 安卓11無法訪問data文件限制
因谷歌許可權限制原因,將Android/data目錄進行了隱藏,第三方應用無法訪問,所以通過文件管理不能查看該目錄下的文件。後期我們會推出新的文件管理版本,升級後訪問這個目錄時,會跳轉到谷歌原生文件管理界面查看其中內容,請後續留意文件管理版本升級提醒。