MacOS X 다운로드 Android 4.4.4 소스 컴파일(아래)
코드를 동기화한 후에 우리는 원본 디렉터리
.repo
를 삭제할 수 있다. 그 안에는git 동기화 원본 때 다운로드한 420여 개 항목의 압축 패키지와 임시 데이터가 있는데 삭제하는 것도 뒤에 원본 코드를 컴파일할 때 충분한 공간을 남기기 위해서이다.rm -rf .repo
rm -rf
명령은 강제 삭제 명령입니다. 조심스럽게 사용하십시오. 파일이 너무 많아서 여기서 삭제하는 데 시간이 좀 걸릴 수 있습니다. 기다려 주십시오. 10G의 안드로이드 4.4.4r2의 원본 코드가 진면목을 드러냈다. 우리는 분리된 하드디스크에 50G의 용량을 분배하는 것이 가장 좋다. 왜냐하면 내가 번역을 끝낸 후에 전체 공정의 크기가 40G에 가깝기 때문이다.소스 루트 디렉토리에 들어가서 명령을 입력하여 컴파일 환경을 초기화합니다.
source build/envsetup.sh
이것은 스크립트를 로드한 것입니다. 다음 명령은 다음과 같습니다.
-Pro:AndroidSource yellcat$ source build/envsetup.sh including device/asus/deb/vendorsetup.sh including device/asus/flo/vendorsetup.sh including device/asus/grouper/vendorsetup.sh including device/asus/tilapia/vendorsetup.sh including device/generic/armv7-a-neon/vendorsetup.sh including device/generic/mips/vendorsetup.sh including device/generic/x86/vendorsetup.sh including device/lge/hammerhead/vendorsetup.sh including device/lge/mako/vendorsetup.sh including device/samsung/manta/vendorsetup.sh including sdk/bash_completion/adb.bash
마찬가지로 Android 4.4.4를 컴파일하여 서로 다른 기계에서 서로 다른 버전을 구분해야 하기 때문에 여기서 버전을 한 번 더 선택하여 입력해야 한다.
lunch
만약 여기에 오답이 있다면 다음 섹션의 문제로 이동해서 답을 찾으십시오. 해결된 후에 다시 실행하면 결과는 다음과 같습니다.
-Pro:AndroidSource yellcat$ lunch You're building on Darwin Lunch menu... pick a combo: 1. aosp_arm-eng 2. aosp_x86-eng 3. aosp_mips-eng 4. vbox_x86-eng 5. aosp_deb-userdebug 6. aosp_flo-userdebug 7. aosp_grouper-userdebug 8. aosp_tilapia-userdebug 9. mini_armv7a_neon-userdebug 10. mini_mips-userdebug 11. mini_x86-userdebug 12. aosp_hammerhead-userdebug 13. aosp_mako-userdebug 14. aosp_manta-userdebug Which would you like? [aosp_arm-eng]
AOSP는 14가지 버전을 보여줍니다. 여기에는
1.aosp_arm-eng
를 예로 들어 의미를 설명합니다.명칭은 두 부분BUILD-BUILDTYPE
으로 나눌 수 있는데 그 중에서BUILD
즉aosp_arm
는 특정한 기능 조합 번호일 뿐이다. 일반적으로 버전에 맞는 하드웨어를 나타내는 것이다BUILDTYPE
. 즉eng
는 구축 유형을 뜻하는데 주로 당신이 컴파일한 시스템의 권한을 결정한다. 다음과 같은 세 가지가 있다.| BUILDTYPE | 역할 | - | | | user| 제한된 접근 권한으로 생산 환경 | userdebug |
user
과 유사하지만 루트와 debug 권한이 있고 디버깅 |eng | 추가 디버깅 도구와 debug 도구가 있습니다여기서 우리는
1
또는 aosp_arm-eng
를 직접 입력하면 이 버전의 기본 정보 목록을 얻을 수 있는데 실행 결과는 다음과 같다.Which would you like? [aosp_arm-eng] 1 PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.4.4 TARGET_PRODUCT=aosp_arm TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a TARGET_CPU_VARIANT=generic HOST_ARCH=x86 HOST_OS=darwin HOST_OS_EXTRA=Darwin-16.3.0-x86_64-i386-64bit HOST_BUILD_TYPE=release BUILD_ID=KTU84Q OUT_DIR=out
우리는 안에 있는 시스템 버전 번호
4.4.4
가 있고 목표 cpuarm
가 있으며 컴파일된 ROM 출력 디렉터리out
와 우리의Mac시스템의 정보를 볼 수 있다. 다른 버전이 어떤 차이가 있는지 여러분은 직접 시도해 보셔도 됩니다. 아무리 구체적이어도 잘 모르겠습니다.마지막으로 우리는
make j4
명령을 실행하고 컴파일하기 시작했다. 이곳의 숫자4
는 모두가Mac의 성능에 따라 조정할 수 있다. 예를 들어dual-E5520기계는 2개의 cpu가 있고 각 cpu는 4개의 핵이 있으며 각 핵은 2개의 라인이 있다. 그러면 가장 빠른 컴파일 속도는 make -j16
부터make -j32
사이에 컴파일링이 끝난 후에 실행emulator
명령을 실행하면 가상 컴퓨터를 실행할 수 있다.컴파일을 시작한 후 여러 가지 이상이 발생하여 컴파일을 중지할 수 있습니다. 문제를 해결한 후에 다시 입력
make -j4
한 후에 계속 컴파일을 할 수 있습니다. 앞에서 컴파일한 모듈은 컴파일을 반복하지 않습니다. 이 때문에 0부터 컴파일을 시작하려면 임시 파일을 제거하기 위해 make clean
명령을 실행해야 합니다.지금부터 우리는 Mac에서 안드로이드 원본을 컴파일하는 일부 구덩이를 속속 만나게 될 것이다. 아래의 문제들은 대부분 상황에서 선후 순서로 발생한다. 여기서 문제를 하나하나 해결해야 한다. 오류가 발생하면 첫 번째 error에 나타난 로그를 찾아서 번호를 맞추어 자리에 앉으세요.
문제 0
You are attempting to build with the incorrect version of java.
Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.
혹은
You are building on a case-insensitive filesystem.
Please move your source tree to a case-sensitive filesystem.
JDK 버전의 설치가 정확하지 않고 하드디스크의 구역이 정확하지 않습니다. 을 옮겨서 환경 구축을 열심히 공부하고 환경 구축이 정확한지 확인한 후에 명령 단말기를 다시 켜서
java -version
로 자신의 JDK가 맞는지 확인하세요OracleJdk6
.문제 1
Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk
이것은 XCode 버전이 너무 높아서
에서 XCode.app
의 패키지 내용을 열었는데 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
에 들어가면 없는 것을 발견할 수 있다MacOSX10.6.sdk
. 해결 방법은 낮은 버전의 XCode를 설치한 후에 프로필을 수정하는 것이다. 어떤 게시물은 프로필만 수정하고 나중에 문제가 발생하면 낮은 버전의 XCode를 설치해야 한다는 것을 보여준다.XCode 6.4를 설치하고 구성 파일을 수정했습니다.//
// /build/core/combo/HOST_darwin-x86.mk , sublime XCode vim
// mac_sdk_versions_supported := 10.6 10.7 10.8
//
//mac_sdk_versions_supported := 10.9
문제 3
system/core/include/log/log.h:38:20: error: stdarg.h: No such file or directory
원본 루트 디렉터리에서
/build/core/combo/HOST_darwin-x86.mk
를 찾으면 83줄 근처에서 찾을 수 있습니다ifeq ($(mac_sdk_version),10.8)
# Mac SDK 10.8 no longer has stdarg.h, etc
다음으로 변경
ifeq ($(mac_sdk_version),10.9)
# Mac SDK 10.8 or later no longer has stdarg.h, etc
문제 4
SyntaxError: Unable to find any JNI methods for org/chromium/ui/Clipboard.
원본 루트 디렉터리에서
/external/chromium_org/base/android/jni_generator/jni_generator.py
찾으면github에 해결 방안이 있으면 그대로 하면 됩니다.문제 5
external/qemu/distrib/sdl-1.2.15/src/video/quartz/SDL_QuartzVideo.h:95: error: expected specifier-qualifier-list before ‘CGDirectPaletteRef’
external/qemu/distrib/sdl-1.2.15/src/video/quartz/SDL_QuartzWM.m: In function ‘QZ_CreateWMCursor’:
external/qemu/distrib/sdl-1.2.15/src/video/quartz/SDL_QuartzWM.m:66: error: ‘struct SDL_PrivateVideoData’ has no member named ‘system_version’
원본 루트 디렉터리에서 찾기
/external/qemu/distrib/sdl-1.2.15/src/video/quartz/SDL_QuartzVideo.h
, 열고 94줄 근처에서 찾기CGDirectPaletteRef palette; /* palette of an 8-bit display */
다음으로 변경
#if (MAC_OS_X_VERSION_MIN_REQUIRED < 1070)
CGDirectPaletteRef palette; /* palette of an 8-bit display */
#endif
문제 6
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/QTKit.framework/Headers/QTMovieModernizer.h:156: error: expected identifier or ‘(’ before ‘!’ token
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/QTKit.framework/Headers/QTMovieModernizer.h:162: error: expected a property attribute before ‘atomic’
XCode의 패키지 컨텐트에서
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/QTKit.framework/Versions/A/Headers/QTMovieModernizer.h
를 찾으면 156줄과 163줄 근처의@property (atomic, readonly) NSError * error AVAILABLE_QTKIT_VERSION_7_7_3_AND_LATER;
및
@property (atomic, assign) QTMovieModernizerStatus status AVAILABLE_QTKIT_VERSION_7_7_3_AND_LATER;
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.