7/31/2014

repo 기본 사용법

1. repo란? 

Android에서 Build를 전체하고자 한다면, PDK(Plaform Development Kit) 알아야 할 기본 Tool이 repo이다.
repo는 python program으로 XML의 기반의 manifest를 이용하여 git project를 묶어서 하나의 project로 관리하고 있다.

repo를 정확히 이해하기 위해서 다음과 같은사항을 알아두자.

  1. manifest.xml의 규칙
  2. git 명령

1.1 Repo 설치 및 설정

처음 repo 가 설치가 되어있지 않았다면, 반드시 download하고 환경설정해야 사용하기가 편한다.
그리고 더불어 python은 설치가 되어야 있어야 한다.
  • repo download 

$ sudo apt-get install curl
$ mkdir ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
or
$ curl https://android.git.kernel.org/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

  • repo 환경설정 

$ vi ~/.bashrc or vi ~/.bash_profile or vi ~/.profile  // 가능하면 .profile or .bash_profile 
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

or
$ export PATH=~/bin:${PATH}

  • repo 구성 및 version 확인
repo의 python script를 보고 싶다면, 간단히 vi ~/bin/repo 로 확인.

$ vi ~/bin/repo
....
VERSION = (1, 22)
....

기본설치가 되었다면, repo는 내부적으로 git을 이용하기 때문에 이제 git 설정을 해야한다.

  • Google의 repo 설치 및 Git 기본설정사항
구글 매뉴얼이 볼때마다 업그레이드 되므로, 나중에 이것을 보면 될 것 같다.
  http://source.android.com/source/downloading.html


1.2 Git 기본개념

repo는 위에서 설명했듯이 여러 git를 관리해주는 python script로 기본적으로 정확한 동작을 이해하려면 git의 기본명령을 알아야 하겠다.

GIT의 기본개념 
  https://ahyuo79.blogspot.com/2014/07/git-for-window_20.html

GIT의 기본명령어 
   https://ahyuo79.blogspot.com/2014/07/git.html?zx=2a45dd959990440a

  • Pro-Git 책으로 Git에 관련된 세부사항 
Git에 대해 세부적으로 좀 더 알고 싶다면, 각 사용법을 보자.
  https://git-scm.com/book/en/v2
  https://git-scm.com/docs
  https://git-scm.com/docs/git-fetch


1.3 Gerrit (Git Review) 개념

web-based code를 GIT를 사용하는 system이라고 하며, Google Web Toolkit 이라고 한다. 
GIT의  review 하기위한 tool이라고 하며, Gerrit/Git Review는 GIT의 사용을 집중화시켜준다고 하는데,정확한 용도파악 되지 않았다.

아래의 개념을 보면, remote repository에게 update가 가능한걸로 보여지면, 이것을 어떻게 사용하는지는 정확히 파악을 못하겠다.
GIT의 Remote Repository를  Web base 로 보여주고 이를 관리하는 것으로 보이며, 일단 넘어가자.
Gerrit은 추후 다시 보강 

Github에서 .gitreview 사용법예제 

Git review 사용시 필요한 Package
  http://www.mediawiki.org/wiki/Gerrit/git-review


1.4 Repo 이용한 개발방법 

아래의 기본설명은 repo와 git를 이용한 소스관리방법으로 android에서 소개한 자료이며,
만약 download (git pull) 만 진행을 할 것이면 이부분 까지는 이해 할 필요는 없을 것 같다.



Command Description
repo init Initializes a new client.
repo sync Syncs client to repositories.
repo start Starts a new branch.
repo status Shows status of current branch.
repo upload Uploads changes to the review server.
git add Stages files.
git commit Commits staged files.
git branch Shows current branches.
git branch [branch] Creates new topic branch.
git checkout [branch] Switches HEAD to specified branch
git merge [branch] Merges [branch] into current branch.
git diff Shows diff of unstaged changes.
git diff --cached Shows diff of staged changes.
git log Shows history of current branch.
git log m/[codeline].. Shows commits that are not pushed.

구글메뉴얼 설치 및 개발

구글메뉴얼 repo 사용법
  https://source.android.com/setup/develop/repo


2. Repo의 기본활용 


2.1 Repo 사용방법

Repo프로젝트를 만들기 위해서는 manifest.xml이 필요하다.
하지만, 기존에 있는 존재하던 project의 manifest.xml 있다면, 그 위치로 설정을 하고,
초기화를 진행을 한다.

먼저 사용법을 잘 모를 경우, repo --help or repo init --help 치면 자세한 사용법이
나오며, 각 명령어 마다 --help를 이용하면 된다.

  • repo init     
처음 반드시 실행하여 설정하며, 설정시 .repo 디렉토리 안에 모든 기본구성파일 설정된다.
XML for manifest

repo init -u url [options] 
repo init --help 확인가능

Manifest options Description
-u URL, --manifest-url=URL manifest repository location
-m NAME.xml, --manifest-name=NAME.xml initial manifest file 다른 manifest.xml 지정가능 ( 기본: default.xml)
-b REVISION, --manifest-branch=REVISION manifest branch or revision
  • repo sync
repo init을 한 후 , repo 파일들이 생성된 후 , project 파일들을 받기위해서 각 Server sync 작업을 하는 명령어
처음 실행시에는 git clone과 동일하고,
두번째 실행시에는 아래의 git 명령처럼 remote git repository가 update한 상태를 적용 

$ git remote update
$ git rebase origin/BRANCH

BRANCH 는 현재 checkout 된 local branch 이며 local branch가 remote branch를 tracking 하고 있지 않을 경우 sync 가 이루어지지 않는다.
repo sync 중 git rebase command 에서 conflict 가 발생할 경우 개별적으로 conflict 를 해결하고
git rebase --continue 명령을 실행해야 한다

옵션
-j 작업속도, 동시에 작업을 진행을 한다 (default 4)

  • repo start
소스는 branch와 tag를 만들게 되는데, 이때, 특정 branch 에서 시작할 수 있게 도와준다.

  • repo forall 
소스를 다운받기 위해서 사용한다고 하는데, 정확한 사용용도는 아직파악 못함.
         
repo forall -c git reset --hard 4412_vx.x
     
-c    command도 그 뒤는 argument이다,
       위 실행은 특정 tag를 다운받기 위해서 사용이 되어진다고 한다.

repo download 명령도 있어, 아직 정확한 이해를 못했다.

Android Opensource
  https://android.googlesource.com/platform/
  https://android.googlesource.com/?format=HTML

Repo 사용법
  https://source.android.com/source/using-repo.html
  http://www.dreamy.pe.kr/zbxe/CodeClip/163418

Android Download
  http://source.android.com/source/downloading.html

Android Repo 설정 및 사용법888
  https://source.android.com/setup/build/downloading
  https://source.android.com/setup/develop/index.html


2.2 Repo 사용법 및 구조 

Odroid기반으로 Android 관련소스를 받기 위해서 아래와 같이 설정을 해보며 분석해본다.

// Github 의 GIT 주소 설정한 후 branch 설정하면, 해당 default.xml 로 진행  
$ repo init -u https://github.com/hardkernel/android.git -b 4412_4.4.4_master

//상위에서 설정된 manifest.xml 기반으로 remote 와 project 기반으로 download  
$ repo sync

//일반적으로 repo sync까지 만 사용하며, 이는 별도의 branch 를 생성하기 위해서 실행  
$ repo start 4412_4.4.4_master --all

2.3 repo init 분석  

  • ODROID의 default.xml 과 비교하면서 분석 (repo init 설정) 
아래의 default.xml 분석
<?xml version="1.0" encoding="UTF-8"?>
<manifest>

//구글에서 제공하는 remote AOSP로 다양한 project들이 존재하며, GIT fetch 가능
  <remote  name="aosp"
           fetch="https://android.googlesource.com" />

//Hard Kernel에서 제공하는 remote로 들이 존재하며, Git fetch/push 가능
  <remote  name="origin"
           fetch="https://github.com/codewalkerster"
           push="https://github.com/codewalkerster" />

//CyanogenMod로 Android Community 다양한 Android Project 제공 fetch/review 제공
  <remote  name="github"
           fetch="https://github.com/CyanogenMod"
           review="review.cyanogenmod.org" />

/*
      - 기본 remote를 aosp로 설정 
      - 기본 project들의 revision을  refs/tags/android-4.4.2_r2 설정적용 
      - 아래의 project들은 이 기본 값으로 설정됨
*/
  <default revision="refs/tags/android-4.4.2_r2"
           remote="aosp"
           sync-j="4" />

/*
    상위 remote fetch 내부의  Git project (*.git) 모두 download 함 
    아래의 project name과 동일한 것들을 이제 실제 project path와 함께 적용 (project name은 반드시 unique) 
    revision을 설정으로 추가 tag or branch를 설정가능하며 기본은 상위 default 값에 정의  
    
    1. Google의 경우 Git의 Project Name을 보면 platform/xx/xx  이런식으로 관리를 하므로 쉽게 구분이 가능. 
    2. CyanogenMod 의 경우 Github 이다보니 Google 같은 구성이 되지 않으며,   (e.g android_bionic )
    3. Hardkernel 의 경우 Github 이다보니  동일하게구성  (e.g android_hardware_amlogic_wifi) 
*/

  <project path="build" name="android_build" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" >
    <copyfile src="core/root.mk" dest="Makefile" />
  </project>
  <project path="abi/cpp" name="platform/abi/cpp" groups="pdk" />
  <project path="art" name="platform/art" />
  <project path="bionic" name="android_bionic" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="bootable/bootloader/legacy" name="platform/bootable/bootloader/legacy" />
  <project path="bootable/diskinstaller" name="platform/bootable/diskinstaller" />
  <project path="bootable/recovery" name="platform/bootable/recovery" groups="pdk" />
  <project path="cts" name="platform/cts" groups="cts" />
  <project path="dalvik" name="platform/dalvik" />
  <project path="developers/build" name="platform/developers/build" />
  <project path="developers/demos" name="platform/developers/demos" />
  <project path="developers/docs" name="platform/developers/docs" />
  <project path="developers/samples/android" name="platform/developers/samples/android" />
  <project path="development" name="platform/development" />
  <project path="device/asus/deb" name="device/asus/deb" groups="device,flo" />
  <project path="device/asus/flo" name="device/asus/flo" groups="device,flo" />
  <project path="device/asus/flo-kernel" name="device/asus/flo-kernel" groups="device,flo" />
  <project path="device/asus/grouper" name="device/asus/grouper" groups="device,grouper" />
  <project path="device/asus/tilapia" name="device/asus/tilapia" groups="device,grouper" />
  <project path="device/common" name="device/common" />
  <project path="device/generic/armv7-a-neon" name="device/generic/armv7-a-neon" groups="pdk" />
  <project path="device/generic/common" name="device/generic/common" groups="pdk" />
  <project path="device/generic/goldfish" name="device/generic/goldfish" groups="pdk" />
  <project path="device/generic/mips" name="device/generic/mips" groups="pdk" />
  <project path="device/generic/mini-emulator-armv7-a-neon" name="device/generic/mini-emulator-armv7-a-neon" groups="pdk" />
  <project path="device/generic/mini-emulator-mips" name="device/generic/mini-emulator-mips" groups="pdk" />
  <project path="device/generic/mini-emulator-x86" name="device/generic/mini-emulator-x86" groups="pdk" />
  <project path="device/generic/x86" name="device/generic/x86" groups="pdk" />
  <project path="device/google/accessory/arduino" name="device/google/accessory/arduino" groups="device" />
  <project path="device/google/accessory/demokit" name="device/google/accessory/demokit" groups="device" />
  <project path="device/lge/hammerhead" name="device/lge/hammerhead" groups="device,hammerhead" />
  <project path="device/lge/hammerhead-kernel" name="device/lge/hammerhead-kernel" groups="device,hammerhead" />
  <project path="device/lge/mako" name="device/lge/mako" groups="device,mako" />
  <project path="device/lge/mako-kernel" name="device/lge/mako-kernel" groups="device,mako" />
  <project path="device/sample" name="device/sample" groups="pdk" />
  <project path="device/samsung/manta" name="device/samsung/manta" groups="device,manta" />
  <project path="device/hardkernel/odroidu" name="android_device_hardkernel_odroidu" remote="origin" revision="refs/heads/odroid_4412_master" groups="device" />
  <project path="device/hardkernel/odroidx" name="android_device_hardkernel_odroidx" remote="origin" revision="refs/heads/odroid_4412_master" groups="device" />
  <project path="device/hardkernel/odroidx2" name="android_device_hardkernel_odroidx2" remote="origin" revision="refs/heads/odroid_4412_master" groups="device" />
  <project path="device/hardkernel/proprietary" name="android_device_hardkernel_proprietary" remote="origin" revision="refs/heads/odroid_4412_master" groups="device" >
    <copyfile src="build_android.sh" dest="build_android.sh" />
  </project>
  <project path="docs/source.android.com" name="platform/docs/source.android.com" />
  <project path="external/aac" name="platform/external/aac" groups="pdk" />
  <project path="external/android-clat" name="platform/external/android-clat" />
  <project path="external/android-mock" name="platform/external/android-mock" />
  <project path="external/ant-glob" name="platform/external/ant-glob" />
  <project path="external/antlr" name="platform/external/antlr" />
  <project path="external/apache-harmony" name="platform/external/apache-harmony" />
  <project path="external/apache-http" name="platform/external/apache-http" />
  <project path="external/apache-qp" name="platform/external/apache-qp" />
  <project path="external/apache-xml" name="platform/external/apache-xml" />
  <project path="external/arduino" name="platform/external/arduino" />
  <project path="external/bison" name="platform/external/bison" groups="pdk" />
  <project path="external/blktrace" name="platform/external/blktrace" />
  <project path="external/bluetooth/bluedroid" name="platform/external/bluetooth/bluedroid" groups="pdk" />
  <project path="external/bouncycastle" name="platform/external/bouncycastle" />
  <project path="external/bsdiff" name="platform/external/bsdiff" groups="pdk" />
  <project path="external/bzip2" name="platform/external/bzip2" groups="pdk" />
  <project path="external/busybox" name="android_external_busybox" remote="github" revision="refs/heads/stable/cm-11.0" />
  <project path="external/ceres-solver" name="platform/external/ceres-solver" />
  <project path="external/checkpolicy" name="platform/external/checkpolicy" groups="pdk" />
  <project path="external/chromium" name="platform/external/chromium" />
  <project path="external/chromium-libpac" name="platform/external/chromium-libpac" />
  <project path="external/chromium-trace" name="platform/external/chromium-trace" groups="pdk" />
  <project path="external/chromium_org" name="platform/external/chromium_org" />
  <project path="external/chromium_org/sdch/open-vcdiff" name="platform/external/chromium_org/sdch/open-vcdiff" />
  <project path="external/chromium_org/testing/gtest" name="platform/external/chromium_org/testing/gtest" />
  <project path="external/chromium_org/third_party/WebKit" name="platform/external/chromium_org/third_party/WebKit" />
  <project path="external/chromium_org/third_party/angle_dx11" name="platform/external/chromium_org/third_party/angle_dx11" />
  <project path="external/chromium_org/third_party/eyesfree/src/android/java/src/com/googlecode/eyesfree/braille" name="platform/external/chromium_org/third_party/eyesfree/src/android/java/src/com/googlecode/eyesfree/braille" />
  <project path="external/chromium_org/third_party/freetype" name="platform/external/chromium_org/third_party/freetype" />
  <project path="external/chromium_org/third_party/icu" name="platform/external/chromium_org/third_party/icu" />
  <project path="external/chromium_org/third_party/leveldatabase/src" name="platform/external/chromium_org/third_party/leveldatabase/src" />
  <project path="external/chromium_org/third_party/libjingle/source/talk" name="platform/external/chromium_org/third_party/libjingle/source/talk" />
  <project path="external/chromium_org/third_party/libphonenumber/src/phonenumbers" name="platform/external/chromium_org/third_party/libphonenumber/src/phonenumbers" />
  <project path="external/chromium_org/third_party/libphonenumber/src/resources" name="platform/external/chromium_org/third_party/libphonenumber/src/resources" />
  <project path="external/chromium_org/third_party/mesa/src" name="platform/external/chromium_org/third_party/mesa/src" />
  <project path="external/chromium_org/third_party/openssl" name="platform/external/chromium_org/third_party/openssl" />
  <project path="external/chromium_org/third_party/opus/src" name="platform/external/chromium_org/third_party/opus/src" />
  <project path="external/chromium_org/third_party/ots" name="platform/external/chromium_org/third_party/ots" />
  <project path="external/chromium_org/third_party/skia/gyp" name="platform/external/chromium_org/third_party/skia/gyp" />
  <project path="external/chromium_org/third_party/skia/include" name="platform/external/chromium_org/third_party/skia/include" />
  <project path="external/chromium_org/third_party/skia/src" name="platform/external/chromium_org/third_party/skia/src" />
  <project path="external/chromium_org/third_party/smhasher/src" name="platform/external/chromium_org/third_party/smhasher/src" />
  <project path="external/chromium_org/third_party/yasm/source/patched-yasm" name="platform/external/chromium_org/third_party/yasm/source/patched-yasm" />
  <project path="external/chromium_org/tools/grit" name="platform/external/chromium_org/tools/grit" />
  <project path="external/chromium_org/tools/gyp" name="platform/external/chromium_org/tools/gyp" />
  <project path="external/chromium_org/v8" name="platform/external/chromium_org/v8" />
  <project path="external/clang" name="platform/external/clang" groups="pdk" />
  <project path="external/compiler-rt" name="platform/external/compiler-rt" groups="pdk" />
  <project path="external/dexmaker" name="platform/external/dexmaker" />
  <project path="external/dhcpcd" name="platform/external/dhcpcd" />
  <project path="external/dnsmasq" name="platform/external/dnsmasq" groups="pdk" />
  <project path="external/doclava" name="platform/external/doclava" />
  <project path="external/dropbear" name="platform/external/dropbear" />
  <project path="external/droiddriver" name="platform/external/droiddriver" />
  <project path="external/e2fsprogs" name="android_external_e2fsprogs" groups="pdk" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/easymock" name="platform/external/easymock" />
  <project path="external/eclipse-basebuilder" name="platform/external/eclipse-basebuilder" />
  <project path="external/eclipse-windowbuilder" name="platform/external/eclipse-windowbuilder" />
  <project path="external/eigen" name="platform/external/eigen" />
  <project path="external/elfutils" name="platform/external/elfutils" />
  <project path="external/embunit" name="platform/external/embunit" />
  <project path="external/emma" name="platform/external/emma" />
  <project path="external/esd" name="platform/external/esd" />
  <project path="external/exfat" name="android_external_exfat" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/expat" name="platform/external/expat" groups="pdk" />
  <project path="external/eyes-free" name="platform/external/eyes-free" />
  <project path="external/fdlibm" name="platform/external/fdlibm" />
  <project path="external/flac" name="platform/external/flac" groups="pdk" />
  <project path="external/freetype" name="platform/external/freetype" groups="pdk" />
  <project path="external/fsck_msdos" name="android_external_fsck_msdos" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/fuse" name="android_external_fuse" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/ganymed-ssh2" name="platform/external/ganymed-ssh2" />
  <project path="external/gcc-demangle" name="platform/external/gcc-demangle" groups="pdk" />
  <project path="external/genext2fs" name="platform/external/genext2fs" />
  <project path="external/giflib" name="platform/external/giflib" />
  <project path="external/google-diff-match-patch" name="platform/external/google-diff-match-patch" />
  <project path="external/grub" name="platform/external/grub" />
  <project path="external/gtest" name="platform/external/gtest" groups="pdk" />
  <project path="external/guava" name="platform/external/guava" />
  <project path="external/hamcrest" name="platform/external/hamcrest" />
  <project path="external/harfbuzz" name="platform/external/harfbuzz" />
  <project path="external/harfbuzz_ng" name="platform/external/harfbuzz_ng" />
  <project path="external/hyphenation" name="platform/external/hyphenation" />
  <project path="external/icu4c" name="platform/external/icu4c" groups="pdk" />
  <project path="external/iproute2" name="platform/external/iproute2" groups="pdk" />
  <project path="external/ipsec-tools" name="platform/external/ipsec-tools" />
  <project path="external/iptables" name="platform/external/iptables" />
  <project path="external/iputils" name="platform/external/iputils" />
  <project path="external/jack" name="platform/external/jack" />
  <project path="external/javasqlite" name="platform/external/javasqlite" />
  <project path="external/javassist" name="platform/external/javassist" />
  <project path="external/jdiff" name="platform/external/jdiff" />
  <project path="external/jhead" name="platform/external/jhead" groups="pdk" />
  <project path="external/jmdns" name="platform/external/jmdns" />
  <project path="external/jmonkeyengine" name="platform/external/jmonkeyengine" />
  <project path="external/jpeg" name="platform/external/jpeg" groups="pdk" />
  <project path="external/jsilver" name="platform/external/jsilver" />
  <project path="external/jsr305" name="platform/external/jsr305" />
  <project path="external/junit" name="platform/external/junit" />
  <project path="external/kernel-headers" name="platform/external/kernel-headers" />
  <project path="external/koush/Superuser" name="Superuser" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="external/koush/Widgets" name="Widgets" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/libcap-ng" name="platform/external/libcap-ng" />
  <project path="external/libffi" name="platform/external/libffi" />
  <project path="external/libgsm" name="platform/external/libgsm" groups="pdk" />
  <project path="external/liblzf" name="platform/external/liblzf" groups="pdk" />
  <project path="external/libmtp" name="platform/external/libmtp" />
  <project path="external/libncurses" name="android_external_libncurses" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/libnfc-nci" name="platform/external/libnfc-nci" groups="pdk" />
  <project path="external/libnfc-nxp" name="platform/external/libnfc-nxp" groups="pdk" />
  <project path="external/libnl-headers" name="platform/external/libnl-headers" groups="pdk" />
  <project path="external/libogg" name="platform/external/libogg" />
  <project path="external/libpcap" name="platform/external/libpcap" />
  <project path="external/libphonenumber" name="platform/external/libphonenumber" />
  <project path="external/libpng" name="platform/external/libpng" groups="pdk" />
  <project path="external/libppp" name="platform/external/libppp" />
  <project path="external/libselinux" name="platform/external/libselinux" groups="pdk" />
  <project path="external/libsepol" name="platform/external/libsepol" groups="pdk" />
  <project path="external/libusb" name="platform/external/libusb" />
  <project path="external/libusb-compat" name="platform/external/libusb-compat" />
  <project path="external/libvorbis" name="platform/external/libvorbis" />
  <project path="external/libvpx" name="platform/external/libvpx" groups="pdk" />
  <project path="external/libxml2" name="platform/external/libxml2" />
  <project path="external/libxslt" name="platform/external/libxslt" />
  <project path="external/libyuv" name="platform/external/libyuv" groups="libyuv" />
  <project path="external/linux-tools-perf" name="platform/external/linux-tools-perf" />
  <project path="external/littlemock" name="platform/external/littlemock" />
  <project path="external/llvm" name="platform/external/llvm" groups="pdk" />
  <project path="external/lzma" name="platform/external/lzma" />
  <project path="external/marisa-trie" name="platform/external/marisa-trie" />
  <project path="external/markdown" name="platform/external/markdown" />
  <project path="external/mdnsresponder" name="platform/external/mdnsresponder" groups="pdk" />
  <project path="external/mesa3d" name="platform/external/mesa3d" />
  <project path="external/mksh" name="platform/external/mksh" groups="pdk" />
  <project path="external/mockito" name="platform/external/mockito" />
  <project path="external/mockwebserver" name="platform/external/mockwebserver" />
  <project path="external/mp4parser" name="platform/external/mp4parser" />
  <project path="external/mtpd" name="platform/external/mtpd" />
  <project path="external/naver-fonts" name="platform/external/naver-fonts" />
  <project path="external/netcat" name="platform/external/netcat" />
  <project path="external/netperf" name="platform/external/netperf" />
  <project path="external/neven" name="platform/external/neven" />
  <project path="external/nist-pkits" name="platform/external/nist-pkits" />
  <project path="external/nist-sip" name="platform/external/nist-sip" />
  <project path="external/noto-fonts" name="platform/external/noto-fonts" />
  <project path="external/ntfs-3g" name="android_external_ntfs-3g" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/oauth" name="platform/external/oauth" />
  <project path="external/objenesis" name="platform/external/objenesis" />
  <project path="external/okhttp" name="platform/external/okhttp" />
  <project path="external/open-vcdiff" name="platform/external/open-vcdiff" />
  <project path="external/opencv" name="platform/external/opencv" />
  <project path="external/openfst" name="platform/external/openfst" />
  <project path="external/openssh" name="platform/external/openssh" />
  <project path="external/openssl" name="platform/external/openssl" groups="pdk" />
  <project path="external/oprofile" name="platform/external/oprofile" />
  <project path="external/pixman" name="platform/external/pixman" />
  <project path="external/ppp" name="platform/external/ppp" />
  <project path="external/proguard" name="platform/external/proguard" groups="pdk-java" />
  <project path="external/protobuf" name="platform/external/protobuf" groups="pdk" />
  <project path="external/qemu" name="platform/external/qemu" />
  <project path="external/qemu-pc-bios" name="platform/external/qemu-pc-bios" />
  <project path="external/regex-re2" name="platform/external/regex-re2" />
  <project path="external/replicaisland" name="platform/external/replicaisland" />
  <project path="external/robolectric" name="platform/external/robolectric" />
  <project path="external/safe-iop" name="platform/external/safe-iop" groups="pdk" />
  <project path="external/scrypt" name="platform/external/scrypt" groups="pdk" />
  <project path="external/sepolicy" name="platform/external/sepolicy" groups="pdk" />
  <project path="external/sfntly" name="platform/external/sfntly" />
  <project path="external/sil-fonts" name="platform/external/sil-fonts" />
  <project path="external/skia" name="platform/external/skia" />
  <project path="external/smack" name="platform/external/smack" />
  <project path="external/smali" name="platform/external/smali" />
  <project path="external/sonivox" name="platform/external/sonivox" groups="pdk" />
  <project path="external/speex" name="platform/external/speex" groups="pdk" />
  <project path="external/sqlite" name="platform/external/sqlite" groups="pdk" />
  <project path="external/srec" name="platform/external/srec" />
  <project path="external/srtp" name="platform/external/srtp" />
  <project path="external/stlport" name="platform/external/stlport" groups="pdk" />
  <project path="external/strace" name="platform/external/strace" />
  <project path="external/stressapptest" name="platform/external/stressapptest" />
  <project path="external/svox" name="platform/external/svox" />
  <project path="external/tagsoup" name="platform/external/tagsoup" />
  <project path="external/tcpdump" name="platform/external/tcpdump" />
  <project path="external/timezonepicker-support" name="platform/external/timezonepicker-support" />
  <project path="external/tinyalsa" name="platform/external/tinyalsa" groups="pdk" />
  <project path="external/tinycompress" name="platform/external/tinycompress" groups="pdk" />
  <project path="external/tinyxml" name="platform/external/tinyxml" groups="pdk" />
  <project path="external/tinyxml2" name="platform/external/tinyxml2" groups="pdk" />
  <project path="external/tremolo" name="platform/external/tremolo" groups="pdk" />
  <project path="external/v8" name="platform/external/v8" />
  <project path="external/valgrind" name="platform/external/valgrind" groups="pdk" />
  <project path="external/vim" name="android_external_vim" remote="github" revision="refs/heads/cm-11.0" />
  <project path="external/webp" name="platform/external/webp" />
  <project path="external/webrtc" name="platform/external/webrtc" groups="pdk" />
  <project path="external/wpa_supplicant_8" name="android_external_wpa_supplicant_8" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="external/xmlwriter" name="platform/external/xmlwriter" />
  <project path="external/xmp_toolkit" name="platform/external/xmp_toolkit" />
  <project path="external/yaffs2" name="platform/external/yaffs2" groups="pdk" />
  <project path="external/zlib" name="platform/external/zlib" groups="pdk" />
  <project path="external/zxing" name="platform/external/zxing" />
  <project path="frameworks/av" name="android_frameworks_av" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="frameworks/base" name="android_frameworks_base" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="frameworks/compile/libbcc" name="platform/frameworks/compile/libbcc" groups="pdk" />
  <project path="frameworks/compile/mclinker" name="platform/frameworks/compile/mclinker" groups="pdk" />
  <project path="frameworks/compile/slang" name="platform/frameworks/compile/slang" groups="pdk" />
  <project path="frameworks/ex" name="platform/frameworks/ex" />
  <project path="frameworks/mff" name="platform/frameworks/mff" />
  <project path="frameworks/ml" name="platform/frameworks/ml" />
  <project path="frameworks/native" name="android_frameworks_native" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="frameworks/opt/calendar" name="platform/frameworks/opt/calendar" />
  <project path="frameworks/opt/carddav" name="platform/frameworks/opt/carddav" />
  <project path="frameworks/opt/colorpicker" name="platform/frameworks/opt/colorpicker" />
  <project path="frameworks/opt/datetimepicker" name="platform/frameworks/opt/datetimepicker" />
  <project path="frameworks/opt/emoji" name="platform/frameworks/opt/emoji" />
  <project path="frameworks/opt/inputmethodcommon" name="platform/frameworks/opt/inputmethodcommon" />
  <project path="frameworks/opt/mailcommon" name="platform/frameworks/opt/mailcommon" />
  <project path="frameworks/opt/mms" name="platform/frameworks/opt/mms" />
  <project path="frameworks/opt/net/voip" name="platform/frameworks/opt/net/voip" />
  <project path="frameworks/opt/photoviewer" name="platform/frameworks/opt/photoviewer" />
  <project path="frameworks/opt/timezonepicker" name="platform/frameworks/opt/timezonepicker" />
  <project path="frameworks/opt/telephony" name="platform/frameworks/opt/telephony" groups="pdk" />
  <project path="frameworks/opt/vcard" name="platform/frameworks/opt/vcard" />
  <project path="frameworks/rs" name="platform/frameworks/rs" groups="pdk" />
  <project path="frameworks/support" name="platform/frameworks/support" />
  <project path="frameworks/testing" name="platform/frameworks/testing" />
  <project path="frameworks/uiautomator" name="platform/frameworks/uiautomator" />
  <project path="frameworks/volley" name="platform/frameworks/volley" />
  <project path="frameworks/webview" name="platform/frameworks/webview" />
  <project path="frameworks/wilhelm" name="platform/frameworks/wilhelm" />
  <project path="hardware/akm" name="platform/hardware/akm" />
  <project path="hardware/broadcom/libbt" name="platform/hardware/broadcom/libbt" groups="pdk" />
  <project path="hardware/broadcom/wlan" name="platform/hardware/broadcom/wlan" groups="broadcom_wlan" />
  <project path="hardware/hardkernel" name="android_hardware_hardkernel" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="hardware/invensense" name="platform/hardware/invensense" groups="invensense" />
  <project path="hardware/libhardware" name="android_hardware_libhardware" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="hardware/libhardware_legacy" name="android_hardware_libhardware_legacy" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="hardware/qcom/audio" name="platform/hardware/qcom/audio" groups="qcom" />
  <project path="hardware/qcom/bt" name="platform/hardware/qcom/bt" groups="qcom" />
  <project path="hardware/qcom/camera" name="platform/hardware/qcom/camera" groups="qcom" />
  <project path="hardware/qcom/display" name="platform/hardware/qcom/display" groups="qcom" />
  <project path="hardware/qcom/keymaster" name="platform/hardware/qcom/keymaster" groups="qcom" />
  <project path="hardware/qcom/media" name="platform/hardware/qcom/media" groups="qcom" />
  <project path="hardware/qcom/msm8960" name="platform/hardware/qcom/msm8960" groups="qcom_msm8960" />
  <project path="hardware/qcom/msm8x74" name="platform/hardware/qcom/msm8x74" groups="qcom_msm8x74" />
  <project path="hardware/qcom/power" name="platform/hardware/qcom/power" groups="qcom" />
  <project path="hardware/qcom/sensors" name="platform/hardware/qcom/sensors" groups="qcom" />
  <project path="hardware/qcom/wlan" name="platform/hardware/qcom/wlan" groups="qcom_wlan" />
  <project path="hardware/realtek" name="android_hardware_realtek" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="hardware/ril" name="platform/hardware/ril" groups="pdk" />
  <project path="hardware/samsung_slsi/exynos4" name="android_hardware_samsung_slsi_exynos4" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="hardware/samsung_slsi/exynos5" name="platform/hardware/samsung_slsi/exynos5" groups="exynos5" />
  <project path="hardware/ti/omap3" name="platform/hardware/ti/omap3" />
  <project path="hardware/ti/omap4xxx" name="platform/hardware/ti/omap4xxx" groups="omap4" />
  <project path="hardware/ti/wlan" name="platform/hardware/ti/wlan" />
  <project path="hardware/ti/wpan" name="platform/hardware/ti/wpan" />
  <project path="libcore" name="platform/libcore" />
  <project path="libnativehelper" name="platform/libnativehelper" groups="pdk-java" />
  <project path="ndk" name="platform/ndk" />
  <project path="packages/apps/BasicSmsReceiver" name="platform/packages/apps/BasicSmsReceiver" />
  <project path="packages/apps/Bluetooth" name="platform/packages/apps/Bluetooth" />
  <project path="packages/apps/Browser" name="platform/packages/apps/Browser" />
  <project path="packages/apps/Calculator" name="platform/packages/apps/Calculator" />
  <project path="packages/apps/Calendar" name="platform/packages/apps/Calendar" />
  <project path="packages/apps/Camera" name="platform/packages/apps/Camera" />
  <project path="packages/apps/Camera2" name="platform/packages/apps/Camera2" />
  <project path="packages/apps/CellBroadcastReceiver" name="platform/packages/apps/CellBroadcastReceiver" />
  <project path="packages/apps/CertInstaller" name="platform/packages/apps/CertInstaller" />
  <project path="packages/apps/Contacts" name="platform/packages/apps/Contacts" />
  <project path="packages/apps/ContactsCommon" name="platform/packages/apps/ContactsCommon" />
  <project path="packages/apps/DeskClock" name="platform/packages/apps/DeskClock" />
  <project path="packages/apps/Dialer" name="platform/packages/apps/Dialer" />
  <project path="packages/apps/Email" name="platform/packages/apps/Email" />
  <project path="packages/apps/Exchange" name="platform/packages/apps/Exchange" />
  <project path="packages/apps/Gallery" name="platform/packages/apps/Gallery" />
  <project path="packages/apps/Gallery2" name="platform/packages/apps/Gallery2" />
  <project path="packages/apps/HTMLViewer" name="platform/packages/apps/HTMLViewer" />
  <project path="packages/apps/InCallUI" name="platform/packages/apps/InCallUI" />
  <project path="packages/apps/KeyChain" name="platform/packages/apps/KeyChain" />
  <project path="packages/apps/Launcher2" name="platform/packages/apps/Launcher2" />
  <project path="packages/apps/Launcher3" name="platform/packages/apps/Launcher3" />
  <project path="packages/apps/LegacyCamera" name="platform/packages/apps/LegacyCamera" />
  <project path="packages/apps/Mms" name="platform/packages/apps/Mms" />
  <project path="packages/apps/Music" name="platform/packages/apps/Music" />
  <project path="packages/apps/MusicFX" name="platform/packages/apps/MusicFX" />
  <project path="packages/apps/Nfc" name="platform/packages/apps/Nfc" />
  <project path="packages/apps/OdroidUpdater" name="android_packages_apps_OdroidUpdater" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="packages/apps/OneTimeInitializer" name="platform/packages/apps/OneTimeInitializer" />
  <project path="packages/apps/PackageInstaller" name="platform/packages/apps/PackageInstaller" />
  <project path="packages/apps/Phone" name="platform/packages/apps/Phone" />
  <project path="packages/apps/PhoneCommon" name="platform/packages/apps/PhoneCommon" />
  <project path="packages/apps/Protips" name="platform/packages/apps/Protips" />
  <project path="packages/apps/Provision" name="platform/packages/apps/Provision" />
  <project path="packages/apps/QuickSearchBox" name="platform/packages/apps/QuickSearchBox" />
  <project path="packages/apps/Settings" name="android_packages_apps_Settings" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="packages/apps/SmartCardService" name="platform/packages/apps/SmartCardService" />
  <project path="packages/apps/SoundRecorder" name="android_packages_apps_SoundRecorder" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="packages/apps/SpareParts" name="platform/packages/apps/SpareParts" />
  <project path="packages/apps/SpeechRecorder" name="platform/packages/apps/SpeechRecorder" />
  <project path="packages/apps/Stk" name="platform/packages/apps/Stk" />
  <project path="packages/apps/Tag" name="platform/packages/apps/Tag" />
  <project path="packages/apps/UnifiedEmail" name="platform/packages/apps/UnifiedEmail" />
  <project path="packages/apps/Utility" name="android_packages_apps_Utility" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="packages/apps/VideoEditor" name="platform/packages/apps/VideoEditor" />
  <project path="packages/apps/VoiceDialer" name="platform/packages/apps/VoiceDialer" />
  <project path="packages/experimental" name="platform/packages/experimental" />
  <project path="packages/inputmethods/LatinIME" name="platform/packages/inputmethods/LatinIME" />
  <project path="packages/inputmethods/OpenWnn" name="platform/packages/inputmethods/OpenWnn" />
  <project path="packages/inputmethods/PinyinIME" name="platform/packages/inputmethods/PinyinIME" />
  <project path="packages/providers/ApplicationsProvider" name="platform/packages/providers/ApplicationsProvider" />
  <project path="packages/providers/CalendarProvider" name="platform/packages/providers/CalendarProvider" />
  <project path="packages/providers/ContactsProvider" name="platform/packages/providers/ContactsProvider" />
  <project path="packages/providers/DownloadProvider" name="platform/packages/providers/DownloadProvider" />
  <project path="packages/providers/MediaProvider" name="platform/packages/providers/MediaProvider" />
  <project path="packages/providers/PartnerBookmarksProvider" name="platform/packages/providers/PartnerBookmarksProvider" />
  <project path="packages/providers/TelephonyProvider" name="platform/packages/providers/TelephonyProvider" />
  <project path="packages/providers/UserDictionaryProvider" name="platform/packages/providers/UserDictionaryProvider" />
  <project path="packages/screensavers/Basic" name="platform/packages/screensavers/Basic" />
  <project path="packages/screensavers/PhotoTable" name="platform/packages/screensavers/PhotoTable" />
  <project path="packages/screensavers/WebView" name="platform/packages/screensavers/WebView" />
  <project path="packages/services/Telephony" name="platform/packages/services/Telephony" />
  <project path="packages/wallpapers/Basic" name="platform/packages/wallpapers/Basic" />
  <project path="packages/wallpapers/Galaxy4" name="platform/packages/wallpapers/Galaxy4" />
  <project path="packages/wallpapers/HoloSpiral" name="platform/packages/wallpapers/HoloSpiral" />
  <project path="packages/wallpapers/LivePicker" name="platform/packages/wallpapers/LivePicker" />
  <project path="packages/wallpapers/MagicSmoke" name="platform/packages/wallpapers/MagicSmoke" />
  <project path="packages/wallpapers/MusicVisualization" name="platform/packages/wallpapers/MusicVisualization" />
  <project path="packages/wallpapers/NoiseField" name="platform/packages/wallpapers/NoiseField" />
  <project path="packages/wallpapers/PhaseBeam" name="platform/packages/wallpapers/PhaseBeam" />
  <project path="pdk" name="platform/pdk" groups="pdk" />
  <project path="prebuilts/clang/darwin-x86/3.1" name="platform/prebuilts/clang/darwin-x86/3.1" groups="pdk,darwin" />
  <project path="prebuilts/clang/darwin-x86/3.2" name="platform/prebuilts/clang/darwin-x86/3.2" groups="pdk,darwin" />
  <project path="prebuilts/clang/darwin-x86/arm/3.3" name="platform/prebuilts/clang/darwin-x86/arm/3.3" groups="darwin,arm" />
  <project path="prebuilts/clang/darwin-x86/host/3.3" name="platform/prebuilts/clang/darwin-x86/host/3.3" groups="darwin" />
  <project path="prebuilts/clang/darwin-x86/mips/3.3" name="platform/prebuilts/clang/darwin-x86/mips/3.3" groups="darwin,mips" />
  <project path="prebuilts/clang/darwin-x86/x86/3.3" name="platform/prebuilts/clang/darwin-x86/x86/3.3" groups="darwin,x86" />
  <project path="prebuilts/clang/linux-x86/3.1" name="platform/prebuilts/clang/linux-x86/3.1" groups="pdk,linux" />
  <project path="prebuilts/clang/linux-x86/3.2" name="platform/prebuilts/clang/linux-x86/3.2" groups="pdk,linux" />
  <project path="prebuilts/clang/linux-x86/arm/3.3" name="platform/prebuilts/clang/linux-x86/arm/3.3" groups="linux,arm" />
  <project path="prebuilts/clang/linux-x86/host/3.3" name="platform/prebuilts/clang/linux-x86/host/3.3" groups="linux" />
  <project path="prebuilts/clang/linux-x86/mips/3.3" name="platform/prebuilts/clang/linux-x86/mips/3.3" groups="linux,mips" />
  <project path="prebuilts/clang/linux-x86/x86/3.3" name="platform/prebuilts/clang/linux-x86/x86/3.3" groups="linux,x86" />
  <project path="prebuilts/devtools" name="platform/prebuilts/devtools" />
  <project path="prebuilts/eclipse" name="platform/prebuilts/eclipse" groups="pdk" />
  <project path="prebuilts/eclipse-build-deps" name="platform/prebuilts/eclipse-build-deps" groups="notdefault,eclipse" />
  <project path="prebuilts/eclipse-build-deps-sources" name="platform/prebuilts/eclipse-build-deps-sources" groups="notdefault,eclipse" />
  <project path="prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6" name="platform/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6" groups="pdk,darwin,arm" />
  <project path="prebuilts/gcc/darwin-x86/arm/arm-eabi-4.7" name="platform/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.7" groups="pdk,darwin,arm" />
  <project path="prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.6" name="platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.6" groups="pdk,darwin,arm" />
  <project path="prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.7" name="platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.7" groups="pdk,darwin,arm" />
  <project path="prebuilts/gcc/darwin-x86/host/headers" name="platform/prebuilts/gcc/darwin-x86/host/headers" groups="pdk,darwin" />
  <project path="prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1" name="platform/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1" groups="pdk,darwin" />
  <project path="prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.6" name="platform/prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.6" groups="pdk,darwin,mips" />
  <project path="prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.7" name="platform/prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.7" groups="pdk,darwin,mips" />
  <project path="prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.6" name="platform/prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.6" groups="pdk,darwin,x86" />
  <project path="prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.7" name="platform/prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.7" groups="pdk,darwin,x86" />
  <project path="prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.7" name="platform/prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.7" groups="pdk,darwin,x86" />
  <project path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.6" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6" groups="pdk,linux,arm" />
  <project path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" groups="pdk,linux,arm" />
  <project path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6" groups="pdk,linux,arm" />
  <project path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" groups="pdk,linux,arm" />
  <project path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.4.3" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.4.3" groups="pdk,linux" />
  <project path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" groups="pdk,linux" />
  <project path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" groups="pdk,linux" />
  <project path="prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.6" name="platform/prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.6" groups="pdk,linux,mips" />
  <project path="prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.7" name="platform/prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.7" groups="pdk,linux,mips" />
  <project path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.6" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.6" groups="pdk,linux,x86" />
  <project path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" groups="pdk,linux,x86" />
  <project path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.7" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.7" groups="pdk,linux,x86" />
  <project path="prebuilts/misc" name="platform/prebuilts/misc" groups="pdk" />
  <project path="prebuilts/ndk" name="platform/prebuilts/ndk" groups="pdk" />
  <project path="prebuilts/python/darwin-x86/2.7.5" name="platform/prebuilts/python/darwin-x86/2.7.5" groups="darwin" />
  <project path="prebuilts/python/linux-x86/2.7.5" name="platform/prebuilts/python/linux-x86/2.7.5" groups="linux" />
  <project path="prebuilts/qemu-kernel" name="platform/prebuilts/qemu-kernel" groups="pdk" />
  <project path="prebuilts/runtime" name="platform/prebuilts/runtime" />
  <project path="prebuilts/sdk" name="platform/prebuilts/sdk" groups="pdk" />
  <project path="prebuilts/tools" name="platform/prebuilts/tools" groups="pdk,tools" />
  <project path="sdk" name="platform/sdk" />
  <project path="system/core" name="android_system_core" remote= "origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="system/extras" name="android_system_extras" remote="origin" revision="refs/heads/odroid_4412_master" groups="pdk" />
  <project path="system/media" name="platform/system/media" groups="pdk" />
  <project path="system/netd" name="platform/system/netd" groups="pdk" />
  <project path="system/security" name="platform/system/security" groups="pdk" />
  <project path="system/vold" name="android_system_vold" groups="pdk" remote="origin" revision="refs/heads/odroid_4412_master" />
  <project path="tools/adt/eclipse" name="platform/tools/adt/eclipse" groups="notdefault,tools" />
  <project path="tools/adt/idea" name="platform/tools/adt/idea" groups="notdefault,tools" />
  <project path="tools/base" name="platform/tools/base" groups="notdefault,tools" />
  <project path="tools/build" name="platform/tools/build" groups="notdefault,tools" />
  <project path="tools/emulator" name="platform/tools/emulator" groups="notdefault,tools" />
  <project path="tools/external/fat32lib" name="platform/tools/external/fat32lib" groups="tools" />
  <project path="tools/external/gradle" name="platform/tools/external/gradle" groups="tools" />
  <project path="tools/idea" name="platform/tools/idea" groups="notdefault,tools" />
  <project path="tools/motodev" name="platform/tools/motodev" groups="notdefault,motodev" />
  <project path="tools/studio/cloud" name="platform/tools/studio/cloud" groups="notdefault,tools" />
  <project path="tools/swt" name="platform/tools/swt" groups="notdefault,tools" />
  <project path="vendor/ralink" name="android_vendor_ralink" remote="origin" revision="refs/heads/odroid_4412_master" />
</manifest>

관련소스 

  • repo init 설정 및 확인  
repo init -u  했을 경우, .repo 디렉토리 및 manifest.xml 생성된다. 
그리고, 정보 입력을 요구하는데 Name, E-Mail, Path  확인하자,
아래와 같이, branch 및 tag 정보 확인이 가능하다.

Get https://github.com/hardkernel/android.git  // default.xml로 동작 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
curl: (22) The requested URL returned error: 404
Server does not provide clone.bundle; ignoring.
remote: Counting objects: 1097, done.
remote: Compressing objects: 100% (456/456), done.
remote: Total 1097 (delta 446), reused 1097 (delta 446)
Receiving objects: 100% (1097/1097), 434.98 KiB | 181 KiB/s, done.
Resolving deltas: 100% (446/446), done.
From https://github.com/hardkernel/android
 * [new branch]      4412_4.1.2_master -> origin/4412_4.1.2_master
 * [new branch]      4412_4.4.3_master -> origin/4412_4.4.3_master
 * [new branch]      4412_4.4.4_master -> origin/4412_4.4.4_master
 * [new branch]      4412_L_master -> origin/4412_L_master
 * [new branch]      5410_4.2.2_master -> origin/5410_4.2.2_master
 * [new branch]      odroid_4412_master -> origin/odroid_4412_master
 * [new branch]      odroid_5410_master -> origin/odroid_5410_master 
...........

repo init을 한후 .repo를 보면 다음과 같이 구성 

$ tree .repo
.repo
├── manifest.xml -> manifests/default.xml
├── manifests
│   ├── default.xml
│   └── .git  // 아래의 manifests.git link로 구성
├── manifests.git        // 상위 default.xml GIT download 했기 때문에 Git 정보
│   ├── FETCH_HEAD
│   ├── HEAD
│   ├── branches
│   ├── config
│   ├── description
│   ├── hooks
│   │   ├── applypatch-msg.sample
│   │   ├── commit-msg -> ../../repo/hooks/commit-msg
│   │   ├── commit-msg.sample
│   │   ├── post-update.sample
│   │   ├── pre-applypatch.sample
│   │   ├── pre-auto-gc -> ../../repo/hooks/pre-auto-gc
│   │   ├── pre-commit.sample
│   │   ├── pre-rebase.sample
│   │   ├── prepare-commit-msg.sample
│   │   └── update.sample
│   ├── info
│   │   └── exclude
│   ├── logs
│   │   └── refs
│   │       └── remotes
│   │           └── origin
│   │               ├── 4412_4.1.2_master
│   │               ├── 4412_4.4.3_master
│   │               ├── 4412_4.4.4_master
│   │               ├── 4412_L_master
│   │               ├── 5410_4.2.2_master
│   │               ├── 5422_4.2.2_master
│   │               ├── 5422_4.4.2_master
│   │               ├── 5422_4.4.4_master
│   │               ├── odroid_4412_master
│   │               ├── odroid_5410_master
│   │               ├── s805_4.4.2_master
│   │               └── s905_5.1.1_master
│   ├── objects
│   │   ├── info
│   │   └── pack
│   │       ├── pack-156a343f25e111fb8e411eb1d779fe669997e79d.idx
│   │       └── pack-156a343f25e111fb8e411eb1d779fe669997e79d.pack
│   ├── packed-refs
│   ├── refs
│   │   ├── heads
│   │   │   └── default
│   │   ├── remotes
│   │   └── tags
│   ├── rr-cache
│   └── svn
└── repo           // repo 관련된 phython program 
    ├── COPYING
    ├── SUBMITTING_PATCHES
    ├── color.py
    ├── color.pyc
    ├── command.py
    ├── command.pyc
    ├── docs
    │   └── manifest-format.txt  // manifest-format.xml 문법설명 및 사용법 
    ├── editor.py
    ├── editor.pyc
    ├── error.py
    ├── error.pyc
    ├── git_command.py
    ├── git_command.pyc
    ├── git_config.py
    ├── git_config.pyc
    ├── git_refs.py
    ├── git_refs.pyc
    ├── git_ssh
    ├── gitc_utils.py
    ├── gitc_utils.pyc
    ├── hooks
    │   ├── commit-msg
    │   └── pre-auto-gc
    ├── main.py
    ├── manifest_xml.py
    ├── manifest_xml.pyc
    ├── pager.py
    ├── pager.pyc
    ├── progress.py
    ├── progress.pyc
    ├── project.py
    ├── project.pyc
    ├── pyversion.py
    ├── pyversion.pyc
    ├── repo
    ├── repoc
    ├── subcmds
    │   ├── __init__.py
    │   ├── __init__.pyc
    │   ├── abandon.py
    │   ├── abandon.pyc
    │   ├── branches.py
    │   ├── branches.pyc
    │   ├── checkout.py
    │   ├── checkout.pyc
    │   ├── cherry_pick.py
    │   ├── cherry_pick.pyc
    │   ├── diff.py
    │   ├── diff.pyc
    │   ├── diffmanifests.py
    │   ├── diffmanifests.pyc
    │   ├── download.py
    │   ├── download.pyc
    │   ├── forall.py
    │   ├── forall.pyc
    │   ├── gitc_delete.py
    │   ├── gitc_delete.pyc
    │   ├── gitc_init.py
    │   ├── gitc_init.pyc
    │   ├── grep.py
    │   ├── grep.pyc
    │   ├── help.py
    │   ├── help.pyc
    │   ├── info.py
    │   ├── info.pyc
    │   ├── init.py
    │   ├── init.pyc
    │   ├── list.py
    │   ├── list.pyc
    │   ├── manifest.py
    │   ├── manifest.pyc
    │   ├── overview.py
    │   ├── overview.pyc
    │   ├── prune.py
    │   ├── prune.pyc
    │   ├── rebase.py
    │   ├── rebase.pyc
    │   ├── selfupdate.py
    │   ├── selfupdate.pyc
    │   ├── smartsync.py
    │   ├── smartsync.pyc
    │   ├── stage.py
    │   ├── stage.pyc
    │   ├── start.py
    │   ├── start.pyc
    │   ├── status.py
    │   ├── status.pyc
    │   ├── sync.py
    │   ├── sync.pyc
    │   ├── upload.py
    │   ├── upload.pyc
    │   ├── version.py
    │   └── version.pyc
    ├── tests
    │   ├── fixtures
    │   │   ├── gitc_config
    │   │   └── test.gitconfig
    │   ├── test_git_config.py
    │   └── test_wrapper.py
    ├── trace.py
    ├── trace.pyc
    ├── wrapper.py
    └── wrapper.pyc

2.4 repo sync 분석  

  • repo sync 동작 후 구조파악     
project-object 와 project 그리고, project.list 기반으로 분석
  1. project-object : source를 미제공하며 *.so 로 제공 및 module로 제공 
  2. project: 소스형태로 제공  

상위 default.xml의 project에 존재하지 않는 것을 가지고 있는 것으로 보아 remote를 전체를 download 한 것으로 보인다. 
아래 상위 default.xml의 project name에 없는 것들은 주로 CyanogenMod 와 Hardkernel 검색가능

$ tree -t -L 2 --charset unicode .repo/  
.repo/
|-- repo // repo 관련된 phython program 이므로 sub는 삭제 
|
|-- manifests
|   `-- default.xml         
|-- manifest.xml    // -> manifests/default.xml (repo init -u 의 정보)  
|-- manifests.git   // 상위 default.xml 저장된 곳의 GIT 정보 
|   |-- branches
|   |-- description
|   |-- HEAD
|   |-- hooks
|   |-- info
|   |-- objects
|   |-- logs
|   |-- refs
|   |-- config
|   |-- packed-refs
|   |-- rr-cache
|   |-- svn
|   `-- FETCH_HEAD
|-- project-objects     // project의 name 기반으로 GIT 구성 (아래 다시세부분석)  
|   |-- android_hardware_libhardware.git
|   |-- android_hardware_backports.git   //project name 없음, HardKernel 존재 
|   |-- android_system_extras.git
|   |-- android_frameworks_native.git
|   |-- android_device_hardkernel_odroidu.git
|   |-- android_frameworks_av.git
|   |-- android_device_hardkernel_odroidx.git
|   |-- android_external_ntfs-3g.git
|   |-- android_packages_apps_SoundRecorder.git
|   |-- android_device_hardkernel_proprietary.git
|   |-- android_build.git
|   |-- android_hardware_hardkernel.git
|   |-- android_external_ppp.git     //project name 없음, CyanogenMod 존재 
|   |-- android_hardware_ril.git     //project name 없음, CyanogenMod 존재 
|   |-- android_hardware_wifi_realtek_drivers_8192cu.git  //project name 없음, HardKernel 존재 
|   |-- android_system_core.git
|   |-- android_external_wpa_supplicant_8.git
|   |-- android_hardware_libhardware_legacy.git
|   |-- android_external_exfat.git
|   |-- android_external_libusb.git  //project name 없음, CyanogenMod 존재
|   |-- android_device_rockchip.git  //project name 없음, HardKernel 존재
|   |-- android_external_vim.git
|   |-- android_frameworks_base.git
|   |-- android_packages_apps_OdroidUpdater.git
|   |-- android_bionic.git
|   |-- android_external_busybox.git
|   |-- device               // Git directory 
|   |-- Superuser.git
|   |-- android_external_fsck_msdos.git
|   |-- android_external_fuse.git
|   |-- android_hardware_amlogic_wifi.git   //project name 없음, CyanogenMod 존재 
|   |-- android_external_bluetooth_bluedroid.git //project name 없음, HardKernel 존재
|   |-- Widgets.git
|   |-- android_device_hardkernel_odroidx2.git
|   |-- android_hardware_broadcom_libbt.git  //project name 없음, HardKernel 존재
|   |-- android_external_libncurses.git
|   |-- android_packages_apps_Bluetooth.git  //project name 없음, HardKernel 존재
|   |-- android_packages_apps_Settings.git
|   |-- android_vendor_ralink.git
|   |-- android_frameworks_opt_vcard.git   //project name 없음, HardKernel 존재
|   |-- android_packages_apps_Utility.git
|   |-- linux.git                   //project name 없음, HardKernel 존재 
|   |-- android_dalvik.git          //project name 없음, HardKernel 존재 
|   |-- android_hardware_samsung_slsi_exynos4.git
|   |-- android_external_e2fsprogs.git
|   |-- android_system_vold.git
|   `-- platform                    // Git directory 
|-- projects   // project의 source 형태 
|   |-- tools
|   |-- docs
|   |-- device
|   |-- abi
|   |-- packages
|   |-- bootable
|   |-- vendor
|   |-- hardware
|   |-- developers
|   |-- frameworks
|   |-- prebuilts
|   |-- system
|   |-- external
|   |-- art.git
|   |-- bionic.git
|   |-- build.git
|   |-- cts.git
|   |-- dalvik.git
|   |-- development.git
|   |-- kernel.git
|   |-- libcore.git
|   |-- libnativehelper.git
|   |-- ndk.git
|   |-- pdk.git
|   `-- sdk.git
`-- project.list  // project의 name 의 list 확인가능   


댓글 없음 :