1. 程式人生 > >Mac High Sierra 編譯Android7.1,8.1原始碼填坑記錄

Mac High Sierra 編譯Android7.1,8.1原始碼填坑記錄

在這裡記錄一下在Mac High Sierra編譯Android7.1以後原始碼出現的坑以及解決方法.

坑1:

編譯Android 7.1出現

[  1% 629/33105] Yacc: aidl <= system/tools/aidl/aidl_language_y.yy
FAILED: /bin/bash -c "prebuilts/misc/darwin-x86/bison/bison -d  --defines=out/host/darwin-x86/obj/STATIC_LIBRARIES/libaidl-common_intermediates/aidl_language_y.h -o out/host/darwin-x86/obj/STATIC_LIBRARIES/libaidl-common_intermediates/aidl_language_y.cpp system/tools/aidl/aidl_language_y.yy"
/bin/bash: prebuilts/misc/darwin-x86/bison/bison: No such file or directory [ 1% 629/33105] host SharedLib: libcr...rwin-x86/obj/lib/libcrypto-host.dylib) ld: warning: -read_only_relocs cannot be used with x86_64 [ 1% 629/33105] host Java: guavalib (...RARIES/guavalib_intermediates/classes) 警告: [options] 未與 -source 1.7
一起設定引導類路徑 注: 某些輸入檔案使用或覆蓋了已過時的 API。 注: 有關詳細資訊, 請使用 -Xlint:deprecation 重新編譯。 注: 某些輸入檔案使用了未經檢查或不安全的操作。 注: 有關詳細資訊, 請使用 -Xlint:unchecked 重新編譯。 1 個警告 [ 1% 629/33105] target Java: core-all...RARIES/core-all_intermediates/classes) 注: 某些輸入檔案使用或覆蓋了已過時的 API。 注: 有關詳細資訊, 請使用 -Xlint:deprecation 重新編譯。 注: 某些輸入檔案使用了未經檢查或不安全的操作。 注: 有關詳細資訊, 請使用 -Xlint:unchecked 重新編譯。 ninja:
build stopped: subcommand failed. make: *** [ninja_wrapper] Error 1

Android 8.1是這樣的

[  0% 310/89583] //external/selinux/ch...eckpolicy yacc policy_parse.y [darwin
FAILED: out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h 
BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d  --defines=out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h -o out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c external/selinux/checkpolicy/policy_parse.y
[  0% 317/89583] //system/core/bootstat:bootstat clang++ bootstat.cpp
ninja: build stopped: subcommand failed.
12:58:42 ninja failed with: exit status 1

這兩個錯誤都是由於bison不能正常使用導致的。可以使用

./prebuilts/misc/darwin-x86/bison/bison

檢測一下你的原始碼中的bison是否正常工作。
網上有一些國內複製貼上的解決辦法但我沒有走通,下面是我在谷歌搜尋到的解決方案:

解決辦法:

1、定位到原始碼中external/bison資料夾

cd external/bison

2、在資料夾建立文字檔案patch-high-sierra.patch並把下面程式碼複製進去()

With format string strictness, High Sierra also enforces that %n isn't used
in dynamic format strings, but we should just disable its use on darwin in
general.

--- lib/vasnprintf.c.orig   2017-06-22 15:19:15.000000000 -0700
+++ lib/vasnprintf.c    2017-06-22 15:20:20.000000000 -0700
@@ -4869,7 +4869,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *
 #endif
                   *fbp = dp->conversion;
 #if USE_SNPRINTF
-# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# if !defined(__APPLE__) && !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
                 fbp[1] = '%';
                 fbp[2] = 'n';
                 fbp[3] = '\0';

3、在控制檯(保證當前目錄是external/bison)執行

patch -p0 < patch-high-sierra.patch  

4、返回根目錄

cd ../..  

5、編譯bison

make bison

6、複製bison到AOSP編譯時尋找bison的位置

cp ./out/host/darwin-x86/obj/EXECUTABLES/bison_intermediates/bison ./prebuilts/misc/darwin-x86/bison/bison 

經過我自己的驗證在7.1以後的版本都需要使用這個來解決bison失效的問題,至少現在還是這樣的。報的類似錯誤都可以用這個方式試試

坑2:

編譯到最後報錯

Created filesystem with 39/35200 inodes and 7290/140800 blocks
stat: cannot read file system information for '%z': No such file or directory
/bin/bash: File: "out/target/product/generic/userdata.img"
    ID: 100000a00000017 Namelen: ?       Type: hfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 80212992   Free: 50854175   Available: 50854175
Inodes: Total: 4294967279 Free: 4294163940
+
0 : syntax error in expression (error token is ": "out/target/product/generic/userdata.img"
    ID: 100000a00000017 Namelen: ?       Type: hfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 80212992   Free: 50854175   Available: 50854175
Inodes: Total: 4294967279 Free: 4294163940
+
0 ")
[ 84% 27299/32477] target Package: Set...PS/Settings_intermediates/package.apk)
nothing matches overlay file suw_navbar_ic_back.xml, for flavor anydpi-v21
nothing matches overlay file suw_navbar_ic_more.xml, for flavor anydpi-v21
nothing matches overlay file suw_navbar_ic_next.xml, for flavor anydpi-v21
nothing matches overlay file suw_progress_bar.xml, for flavor v21
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1

解決辦法:

修改檔案:

build/core/combo/HOST_darwin-x86.mk

Mac需要把最後替換為:

# $(1): The file to check
define get-file-size
GSTAT=$(which gstat) ; \
if [ ! -z "$GSTAT" ]; then \
gstat -c "%s" $(1) ; \
else \
stat -f "%z" $(1) ; \
fi
endef

其他坑自行百度,我沒有遇到,不過我已經把Xcode降級到8.1了。

切換分支

切換分支:
1, 檢視可切換的分支
在AOSP目錄下

cd .repo/manifests
git branch -a | cut -d / -f 3

2,切換分支(以android-8.1.0_r15為例)

repo init -b android-8.1.0_r15

3,同步程式碼
repo sync

因為原生代碼在Mac下編譯需要改動,所以出現下面類似錯誤:
error: Cannot remove project “build”: uncommitted changes are present
commit changes, then run sync again
這裡我使用網上的”repo forall platform/docs/source.android.com -c ‘git reset –hard ;
git clean -fdx’”是沒有用的,所以我進入build目錄用Git提交了一下,重新repo sync就好了。

相關推薦

Mac High Sierra 編譯Android7.18.1原始碼記錄

在這裡記錄一下在Mac High Sierra編譯Android7.1以後原始碼出現的坑以及解決方法. 坑1: 編譯Android 7.1出現 [ 1% 629/33105] Yacc: aidl <= system/tools/aidl/

windows Visual Studio 2017 編譯 HEVC cmake-3.8.1-win64-x64.msi 下載

color 找到 style des 當前 pen span 分享 自動 ttps://github.com/OpenHEVC/openHEVC 下載一 直接下載源碼(可選)或下載源碼包,我這裏下載的是源碼 打開 Visual Studio () 去 github

Mac High Sierra + pyCharm + py3.5 + Moviepy 工廠式視訊合成測試

近日接觸手機端小視訊合成業務,發現現有的主流視訊合成APP中,能實現“單張圖片 + 指定語音”型別的APP屈指可數,ios自帶APP“Clips”僅能合成正方形圖片,超出正方形部分會自動進行黑色背景補齊。 於是需要一個能在手機端完成的、實現“單張圖片 + 指定語音”、視訊畫面尺寸可自

Mac high sierra執行pip時報錯command not found和ImportError: cannot import name ContextualZipFile

1、找不到pip命令li:~ S-Li$ pip -bash: pip: command not found2、執行sudo easy_install pip報錯li:~ S-Li$ sudo easy_install pip Password: Traceback (mos

Mac 開啟 HIDPI 設定各種解析度 HIDPI mac high sierra 2k

首先我的外接顯示器是 2560*1440 第一步 進入恢復模式,然後進入終端 csrutil diable , 這個命令可以讓你修改系統的檔案。 第二部 修改解析度 通過 SwitchResX Control - > CustomerResolu

Mac High Sierra 配置永久靜態路由

最近系統升級到最新的Sierra後,網上找到配置永久靜態路由的方法沒有一個成功的。。。開機後全部失效~~ 下面介紹今天的主角 networksetup 使用 networksetup的使用方式也很簡單,networksetup –help 可以檢視具體

在CentOS 6.4中編譯安裝GCC 4.8.1 + GDB 7.6.1

在CentOS 6.4中編譯安裝GCC 4.8.1 + GDB 7.6.1  一、編譯安裝gcc 4.8.1 1. 安裝gcc和g++ 新安裝的CentOS缺少編譯環境,必須先安裝舊版本的gcc, 然後再進行自舉編譯 yum -y install gcc  yum -y i

Python實現groupBy函數。grpby = groupBy(lambda x: x%2 is 1)grpby([1, 2, 3])的結果為{True: [1, 3], False: [2]}

結果 false n) pen als 不存在 def lam nbsp def groupBy(fn): def go(lst): m = {} for v in lst: m[fn(v)].append(v) if m.get(fn(v

2.15.16.17.1

我對音響一直是小有興趣的,(離發燒友還遠)以前中學時候就喜歡拿家裡的錄音機搗鼓來搗鼓去,只是當時沒有錢,玩來玩去都那幾件東西,後來有了自己的電腦,覺得在電腦上玩玩音訊也蠻不錯的,關鍵比那些發燒級的音訊裝置來說,投資算是少的了。最近我購買了一塊Audigy2 ZS音效卡,型號SB0350,連帶一塊子卡,

訊息 8134級別 16狀態 11 行 遇到以零作除數錯誤

  這兩天遇到一個非常奇怪的問題,給人的感覺有點匪夷所思,如下所示,在更新一個表的統計資訊時,會遇到“遇到以零作除數錯誤”,本來這個錯誤是屬於數學錯誤,但是居然出現在更新統計資訊的SQL語句裡面 UPDATE STATISTICS [dbo].[FIInspectFabric] SAMPLE 20 PERC

Kaldi編譯安裝過程記錄-2017.1.10

Centos7下安裝記錄 1.安裝步驟按照kaldi source code路徑下的install和readme配置安裝即可。需要配置好網路連線,需要能夠訪問國外網站。 2. gcc版本不能為gcc4.8.1和gcc4.8.2. 否則安裝會報錯,重新選擇

根級別上的資料無效。 行 1位置 1 web.config

錯誤資訊錯誤1根級別上的資料無效。 行 1,位置 1。c:\inetpub\wwwroot\et3000\_vti_cnf\web.config1解決方案1 使用記事本開啟,重新存為ANSI格式2 把這個_vti_cnf目錄刪除了

錯誤 2 無效的 Resx 檔案。根級別上的資料無效。 行 1位置 1

這兩天與到了這個問題VC#2010隨便建立一個新的視窗程式編譯就報錯: 錯誤1 無效的 Resx 檔案。根級別上的資料無效。 行 1,位置 1。E:\Work\Example_Project\WindowsFormsApplication4\WindowsFormsAppl

MSSQL刪除欄位時出現 伺服器: 訊息 5074級別 16狀態 11 的解決辦法

有的朋友在做使用者維護欄位的介面時,肯定發現一個問題,當用指令碼:    ALTER TABLE 表名  DROP COLUMN  欄位名進行刪除欄位的操作時,會出現“伺服器: 訊息 5074,級別 16,狀態 1,行 1 ”的錯誤,這是因為欄位有了預設值,不過可以通過清除掉

Android版本 (1.0~8.1) 與API Level (SDK版本1~27) 對應表

什麼是 API 級別? API 級別是一個對 Android 平臺版本提供的框架 API 修訂版進行唯一標識的整數值。 Android 平臺提供了一種框架 API,應用可利用它與底層 Android 系統進行互動。 該框架 API 由以下部分組成: 一組

XML 根級別上的資料無效。 行 1位置 1

  上午:        將XML資料保持到資料中,從資料庫提取XML 順利通過 下午:        一鍵還原電腦,重新開啟VS2010執行程式,從資料庫提取XML報錯“根級別上的資料無效。 行 1,位置 1” Why???  baidu了很久,網上的解決方案有:    

概率p輸出1概率1-p輸出0等概率輸出0和1

有個輸出0和1的BIASED RANDOM,它以概率p輸出1,以概率1-p輸出0,以此RANDOM函式為基礎,生成另一個RANDOM函式,該函式以1/2的概率輸出1,以1/2的概率輸出0 題目解答: 兩次呼叫該RANDOM函式,如果其概率為P(x),呼叫2次 P(1

SQL執行分散式查詢錯誤“伺服器: 訊息 7411級別 16狀態 11

伺服器: 訊息 7411,級別 16,狀態 1,行 1伺服器 'ERPSysSoluctions' 沒有為 RPC 的目的而配置。 解決方法: (1) exec   sp_serveroption   'srv_lnk','rpc out','true'     exec 

在Windows系統下Jenkins安裝配置過程記錄

一、Jenkins安裝完之後,預設是用本地系統賬戶登入,查了下這個賬戶的名字是LocalSystem,並且這個賬戶沒有密碼 因為是用的本地系統賬戶,導致當前windows的登入賬戶Administrator下的很多配置失效,例如 1、C:\Users\Administ

老司機實戰Windows Server Docker:1 初體驗之各種

前言 Windows Server 2016正式版釋出已經有近半年時間了,除了看到攜程的同學分享了一些Windows Server Docker的實踐經驗,網上比較深入的資料,不管是中文或英文的,都還不太多。工作中對Windows Server 2016下的Docker,也評估了一段時間了,特此做一些分享,幫