Nexus 7에 대해 빌드하는 방법에 대해 정리를 해보았습니다.
그리고 WiFi 전용 모델 입니다.
우선 환경은 Ubuntu 12.04 64bit 환경 입니다.
1. 작업 디렉터리 설정하기
~$mkdir Android_Nexus
~$mkdir Android_Nexus/bin
~$mkdir Android_Nexus/src
2.필수 패키지 설치
~/Andorid_Nexus$sudo apt-get update // Package 최신으로 Update
~/Andorid_Nexus$sudo apt-get upgrade // 최신 Package 설치
~/Andorid_Nexus$sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev:i386 g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
~/Andorid_Nexus$sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
3.JDK 6 설치
~/Andorid_Nexus$wget https://raw.github.com/flexiondotorg/oab-java6/master/oab-java.sh
~/Andorid_Nexus$chmod a+x oab-java.sh
~/Andorid_Nexus$sudo ./oab-java.sh
~/Andorid_Nexus$sudo apt-get install sun-java6-jdk
~/Andorid_Nexus$sudo update-alternatives --config java
4.Android 4.2 Source Download
~/Andorid_Nexus$curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ./bin/repo
~/Andorid_Nexus$chmod u+x ./bin/repo
~/Andorid_Nexus$gedit ~/.bashrc
[내용 입력]
- export PATH=${PATH}:~/Andorid_Nexus/src/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=~/Andorid_Nexus/src/out/target/product/grouper
~/Andorid_Nexus$source ~/.bashrc
~/Andorid_Nexus$cd src
~/Andorid_Nexus/src$repo init -u https://android.googlesource.com/platform/manifest -b android-4.2_r1
~/Andorid_Nexus/src$repo sync
5. Android 4.2 Binary Driver Download
https://developers.google.com/android/nexus/drivers#grouperjop40c 로 접속 후,
해당 드라이버 바이너리들을 Android_Nexus/src/안에 저장.
Nexus 7 (Wi-Fi) binaries for Android 4.2 (JOP40C)
Hardware Component | Company | Download | MD5 Checksum | SHA-1 Checksum |
---|---|---|---|---|
Wi-Fi, Bluetooth, GPS | Broadcom | Link | 2860929996827f53d38e5432c9dc7dc7 | 40b15ad807e1cbddca36fd64f60691cc8d621c07 |
Touch Panel | ELAN | Link | 6c2b4c4f5301c25ff6982b909ba838f1 | 1de7a664e4bf53a5427e31363ae9024c762ab20f |
Orientation Sensor | Invensense | Link | d31fdd0513cf91fbc8aebd8a0a8205f2 | 95a5a4b2d35bfcdb4ec5f88487f41bef75d04757 |
Graphics | NVIDIA | Link | bc8c6e082925f642562688b2abebf617 | 38383f75dfa5fd1573a8b6501940af848b983a2b |
NFC | NXP | Link | 436654fa7b2d688f6b332dcf0d053eed | b006a2f1e828af068a6c48a8af87b05dd27ab28b |
DRM | Widevine/Google | Link | fc4acdc2ccb17b8e9abd8c14957eab49 | 2916b2ab791fcc07f1a53802e02860136354ae36 |
위와 같이 다 받았다면, 아래의 명령어 들을 실행합니다.
~/Andorid_Nexus/src$for i in *.tgz; do tar -xvzf "./$i"; done
위의 명령어를 실행하였으면 sh 파일들이 생성되는 것을 확인할 수 있습니다.
여기서 해당 파일들을 하나씩 터미널로 실행시킵니다.
그러면 라이센스가 나오게 되는데 이때, 라이센스틑 반드시 다 읽고 마지막에 "I AGREEDED" [확실치 않음.] 라고 입력해 주고 엔터를 입력해야 정상적으로 바이너리가 설치가 됩니다.
이런 방식으로 나머지 드라이버 바이너리 sh 파일들을 실행시켜 줍니다.
6. Build.
~/Andorid_Nexus/src$source build/envsetup.sh
~/Andorid_Nexus/src$lunch
lunch 명령을 입력하면 빌드할 명령어를 적어달라고 합니다.
여기서 엔지니어로 처리하고 싶으면, 출력된 예제대로 출력해주면 되고,
저는 grouper 빌드 방법에서 userdebug가 아닌 eng로 변경하여 설정하였습니다.
~/Andorid_Nexus/src$make -j4
여기서 -j4라는 옵션은 Thread를 4개 돌린다는 말로 만약 듀얼코어이면 -j2 이런식으로 처리하면
됩니다.
7. udev 설치.
~/Andorid_Nexus/src$sudo bash
~/Andorid_Nexus/src#echo SUBSYSTEM==\"USB\", ATTR{idVendor}==\"04e8\", MODE=\"0666\", GROUP=\"plugdev\" >> /etc/udev/rules.d/90-android.rules
~/Andorid_Nexus/src#chmod a+r /etc/udev/rules.d/90-android.rules
~/Andorid_Nexus/src#service udev restart
8. 바이너리 올리기
~/Andorid_Nexus/src$ sudo bash
~/Andorid_Nexus/src#adb reboot bootloader
[기기 upload 모드로 변환]
~/Andorid_Nexus/src#fastboot oem unlock
~/Andorid_Nexus/src#fastboot erase cache
~/Andorid_Nexus/src#fastboot erase userdata
~/Andorid_Nexus/src#fastboot flashall
여기서 flashall은 환경 변수에서 설정한 ANDROID_PRODUCT_OUT의 경로를 통해서 자동으로 image 파일들을 추출 후 연결된 기기로 자동으로 업로드 해주는 명령어 입니다.
[Fastboot 관련 명령어 참고 : http://www.androidpub.com/3633]
위와 같은 작업을 함으로써 정상적으로 바이너리가 올라가는 것을 확인하였습니다.
===================================================================================
Google Apps를 올리는 방법
1. [전제조건 : 루팅이 되어 있어야 함.]
우선 gapps를 검색하여 다운로드 받습니다.
[http://goo.im/devs/KonstantinKeller/mako/gapps/gapps-4.2-JOP40C-121116.zip]
다운로드 받았으면, gapps를 기기의 sdcard에 다운로드 받습니다.
adb shell 상에서 unzip 명령을 사용하기 위해서는 다음의 파일을 다운로드 받아서 설치합니다.
설치 방법은 다음과 같습니다.
1) 위의 파일을 컴퓨터에 다운 받습니다. 그리고 터미널을 이용하여 다운받은 위치로 이동 후 다음과
같은 명령어로 압축을 풀어줍니다.
tar -xvf busybox.tar
2) adb remount 란 명령어를 이용하여 기기를 remount 시켜줍니다.
그리고 해당 파일을 adb push를 이용하여 /data/busybox 란 위치에 올려줍니다.
adb push busybox /data/busybox
3) adb shell 명령어를 이용하여 기기의 shell로 접속 합니다.
4) 업로드한 busybox 위치로 이동합니다.
cd /data/busybox
5) 해당 경로로 이동하였다면, 다음과 같이 명령어를 입력하여 설치합니다.
chmod 777 busybox
./busybox --install -s /data/busybox
export PATH=/data/busybox:$PATH
6) 위와 같이 처리하였다면, unzip 명령이 먹힐 것입니다.
여기까지 작업을 하였다면, 이 전에 기기에 올린 gapps의 zip 파일을 다음의 명령어를 통해서
설치합니다.
./unzip -o /sdcard/gapps-4.2-JOP40C-121116.zip -x "META-INF*" -d /
위의 명령어를 통해서 설치를 완료하였다면, 기기를 재부팅 합니다.
그러면 셋업 위자드가 뜨면서 Google App 들이 설치되어 있는 것을 확인 할 수 있습니다.
2. [빌드시 적용 방법.]
아래의 주소는 어렵게 구한 Gapps가 존재하는 소스 입니다.
[넥서스 7 Wifi (구글 apk 및 기타 apk들 포함.):
https://github.com/rpcraig/grouper_gapps/downloads]
[구글 apk :
https://github.com/rpcraig/android_vendor_google_gapps]
일단 넥서스 7 WIFI에 포함된 Google Apps 및 깉타 앱들이 포함된 소스를 빌드하는 방법을
설명해드리겠습니다.
우선은 위의 소스를 전달 받게 되시면 아래와 같이 몇가지 작업을 하셔야 합니다.
1. 먼저 위에서 풀소스 및 드라이버 바이너리를 다운받아서 설치를 했기 때문에 전달 받은 파일들의
mk 파일에서 수정을 해야 합니다.
수정 내역은 다음과 같습니다.
1. vendor/asus/grouper/bin/Android.mk 파일에서 glgps 파트 주석 처리.
2. vendor/asus/grouper/lib/Android.mk 파일에서 gps.tegra3 파트 주석 처리.
3. vendor/asus/grouper/vendor/Android.mk 파일에서 libpn544_fw 파트 주석 처리.
위와 같이 수정을 하였다면, 이제 두번째 작업을 시작해야 합니다.
우선 인터넷에서 gapps-4.2-JOP40C-121116.zip 명으로 검색하여 파일을 다운로드 합니다.
다운이 완료되면 다운 받은 파일과 방금 다운 받은 넥서스 7 Wifi (구글 apk 및 기타 apk들 포함.)
압축파일 들을 압축 해제 합니다.
압축을 풀었다면, 이제 gapps-4.2-JOP40C-121116의 파일들을 잘라내서 그대로 넥서스 7 Wifi
(구글 apk 및 기타 apk들 포함.)를 압축 푼 폴더에 붙여넣기 합니다.
이는 인터넷에서 받은 버전은 허니컴버전이기 때문에 App 실행에 있어서 원활하게 실행을 할 수
가 없다.
복사가 완료되었다면, 이제 Android 폴더에서 vendor/asus/grouper/에 복사합니다.
예제)
그리고 빌드를 돌려주시면 됩니다.
만약 넥서스 7 이 아닌 구글 apk만 설치하겠다면, vendor폴더에서 google이라는 폴더를 생성 후
그 안에 넣어서 빌드를 돌려주면 됩니다.
감사합니다.