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 명령을 사용하기 위해서는 다음의 파일을 다운로드 받아서 설치합니다.
[busybox.tar]
설치 방법은 다음과 같습니다.
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이라는 폴더를 생성 후
그 안에 넣어서 빌드를 돌려주면 됩니다.
감사합니다.