1. 程式人生 > >搭建瑞芯微rk3128本地android程式碼伺服器

搭建瑞芯微rk3128本地android程式碼伺服器

從供應商那裡拿到的rk3128android 4.4的原始碼包。解壓前壓縮包大概5G,通過命令解壓後發現只有一個隱藏的.repo 目錄大小4096。
然後執行命令 repo sync -l

這裡寫圖片描述
意思是從本地工作樹跟新程式碼。
完成 後。所有的程式碼都已經在伺服器端。
在 程式碼伺服器端新建rks這個目錄用於存放純程式碼庫。
進入伺服器端的程式碼庫路徑 rk/.repo/project-objects
這裡面存放的是遠端程式碼庫在本地的對映。projects存放的是原生代碼庫,每次repo sync 時候。都是project-objects的程式碼庫和projects程式碼庫比較。然後更新原生代碼, 所以我們遠端也要建立相關的程式碼庫。通過命令 find -name “*.git” > src_git.txt
顯示所以git程式碼庫:
這裡寫圖片描述


太多了擷取一段顯示。
然後將檔案 src_git.txt 拷貝到伺服器端。
在rk程式碼庫根目錄執行work2mirror.py獲取mirror的指令碼獲得本地所以的git程式碼庫
work2mirror.py內容:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os, sys, shutil

cwd = os.path.abspath( os.path.dirname( __file__ ) )
repodir = os.path.join( cwd, '.repo' )
S_repo = 'repo'
TRASHDIR = 'old_work_tree'
if not os.path.exists( os.path.join(repodir, S_repo) ): print >> sys.stderr, "Must run under repo work_dir root." sys.exit(1) sys.path.insert( 0, os.path.join(repodir, S_repo) ) from manifest_xml import XmlManifest manifest = XmlManifest( repodir ) if manifest.IsMirror: print >> sys.stderr, "Already mirror, exit."
sys.exit(1) trash = os.path.join( cwd, TRASHDIR ) for project in manifest.projects: # 移動舊的版本庫路徑到映象模式下新的版本庫路徑 newgitdir = os.path.join( cwd, '%s.git' % project.name ) if os.path.exists( project.gitdir ) and project.gitdir != newgitdir: if not os.path.exists( os.path.dirname(newgitdir) ): os.makedirs( os.path.dirname(newgitdir) ) print "Rename %s to %s." % (project.gitdir, newgitdir) os.rename( project.gitdir, newgitdir ) # 移動工作區到待刪除目錄 if project.worktree and os.path.exists( project.worktree ): newworktree = os.path.join( trash, project.relpath ) if not os.path.exists( os.path.dirname(newworktree) ): os.makedirs( os.path.dirname(newworktree) ) print "Move old worktree %s to %s." % (project.worktree, newworktree ) os.rename( project.worktree, newworktree ) if os.path.exists ( os.path.join( newgitdir, 'config' ) ): # 修改版本庫的配置 os.chdir( newgitdir ) os.system( "git config core.bare true" ) os.system( "git config remote.korg.fetch '+refs/heads/*:refs/heads/*'" ) # 刪除 remotes 分支,因為作為版本庫映象不需要 remote 分支 if os.path.exists ( os.path.join( newgitdir, 'refs', 'remotes' ) ): print "Delete " + os.path.join( newgitdir, 'refs', 'remotes' ) shutil.rmtree( os.path.join( newgitdir, 'refs', 'remotes' ) ) # 設定 menifest 為映象 mp = manifest.manifestProject mp.config.SetString('repo.mirror', 'true')

主要內容是把rk/.repo/projects目錄中的程式碼庫根據project-objects對映關係拷貝到相應的目錄下。
這裡寫圖片描述
結果所有的git原始碼庫都放入到devices rk 和 platform 下。
platform內容:
這裡寫圖片描述
然後在devices rk 和 platform 三個目錄拷貝到 home/git/repositories/rks下。
至此 伺服器端的程式碼庫已經建好。
在伺服器端 home/git/repositories/ 新建 manifest.git 程式碼庫用於存放default.xml。
git init –bare manifest.git
default.xml內容:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch=".." name="rks" />
  <remote fetch=".." name="rk" />

  <default remote="rks" revision="master" sync-c="true" sync-j="4" />

<project name="rks/device/common" path="device/common"/>
<project name="rks/platform/abi/cpp" path="abi/cpp"/>
<project name="rks/platform/art" path="art"/>
<project name="rks/platform/bionic" path="bionic"/>
<project name="rks/platform/bootable/bootloader/legacy" path="bootable/bootloader/legacy"/>
<project name="rks/platform/bootable/diskinstaller" path="bootable/diskinstaller"/>
<project name="rks/platform/bootable/recovery" path="bootable/recovery"/>
<project name="rks/platform/build" path="build" >
    <copyfile dest="Makefile" src="core/root.mk" />
 </project>
<project name="rks/platform/cts" path="cts"/>
<project name="rks/platform/dalvik" path="dalvik"/>
<project name="rks/platform/developers/build" path="developers/build"/>
<project name="rks/platform/developers/demos" path="developers/demos"/>
<project name="rks/platform/developers/docs" path="developers/docs"/>
<project name="rks/platform/developers/samples/android" path="developers/samples/android"/>
<project name="rks/platform/development" path="development"/>
<project name="rks/platform/docs/source.android.com" path="docs/source.android.com"/>
<project name="rks/platform/external/aac" path="external/aac"/>
<project name="rks/platform/external/alsa-lib" path="external/alsa-lib"/>
<project name="rks/platform/external/alsa-utils" path="external/alsa-utils"/>
<project name="rks/platform/external/android-clat" path="external/android-clat"/>
<project name="rks/platform/external/android-mock" path="external/android-mock"/>
<project name="rks/platform/external/ant-glob" path="external/ant-glob"/>
<project name="rks/platform/external/antlr" path="external/antlr"/>
<project name="rks/platform/external/apache-harmony" path="external/apache-harmony"/>
<project name="rks/platform/external/apache-http" path="external/apache-http"/>                                                       

擷取一段顯示。主要用於 repo sync 更新原生代碼庫使用。
在客戶端:
git clone [email protected]:manifest.git manifest
把 default.xml 放入 manifest 目錄中
git add default.xml
git commit -m”新增 default.xml”

然後 新建測試目錄rk_test
repo init -u git://192.168.1.27/manifest.git
repo sync
測試可以正常下載所以程式碼。並編譯通過