您的位置:首页 > 移动开发 > Android开发

Android环境搭建及git使用

2014-12-05 16:49 176 查看
环境搭建1、安装ubuntu linux 10.10 64位

sudo apt-get update

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev openssh-server vim)

2、安装sun-java6-jdk

sudo apt-get update

sudo apt-get install sun-java6-jdk

(版本中已经有open-java6-jdk,但是根据高通文档需求,需要安装sunjdk,不过openjdk也能编过....为了避免不必要的编译错误出现,还是换sunjdk)

3、切换java和javac版本,到sun-java6-jdk

update-alternatives --config java

update-alternatives --config javac

4、(可选)安装source insight,

sudo apt-get install wine

5、安装eclipse开发工具

sudo apt-get install eclipse

6、编译服务器的使用

定制版中有一个bug , ssh协议不能用其他用户链接本机,原因是/etc/ssh/中少了几个key,

运行 sudo ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N ""

sudo ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""

sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""

安装openssh-server

sudo apt-get install openssh-server (定制版不需要安装)
代码下载1、安装curl

在终端输入命令行:sudo apt-get install curl

2、下载repo

sudo curl http://xxxx:8080/static/repo > /usr/local/bin/repo

下载repo脚本文件到/usr/local/bin目录下,并保存在文件repo中。

给repo文件可执行权限

sudo chmod +x /usr/local/bin/repo

(若无法下载repo,需要切换root用户执行,有时候sudo也会失败...)

3、如果是第一次下载继续此步。否则跳过此步。

(a)首先,拷贝id文件到任意目录下,执行sh xxx.id (id文件由付江提供)

(b)登陆到xxxx:8080,输入用户名,密码。点右上角setting->SSH Pubilc Keys

(d)点Add Key,然后在终端下运行sudo gedit ~/.ssh/id_rsa.pub打开文件,将内容粘贴到网页编辑框中。

4、获取Android代码:

创建一个存放代码的目录:

mkdir sourcecode

cd sourcecode

在当前目录下中指定服务器分支等信息:

命令行输入:repo init -u gerrit_host:manifest.git

-u :url gerrit服务器地址

每次 repo init -u gerrit_host:manifest.git时,都可以在信息中查看到目前的git分支情况

• [new branch] OS/4022 -> origin/OS/4022

此分支为Qcom4022版本代码,为代码基础版本

• [new branch] OS/4022forOS -> origin/OS/4022forOS

此分支为Qcom4022版本代码,为目前代码修改调试版本

• [new branch] OS/4022forWNC -> origin/OS/4022forWNC

此分支为WNC4022版本代码,为代码修改调试版本

• [new branch] OS/4030 -> origin/OS/4030

此分支为Qcom4030版本代码,为代码修改调试版本

此时 repo init -u gerrit_host:manifest.git -b xxxx-SDV001 就可以下到指定分支的代码

-b:branch git 服务器中代码的分支

repo init -u kratos:manifest.git -b ICS/QC8064_1030

5、repo init结束后,我们会在当前目录看到隐藏文件.repo,然后开始同步代码:

命令行输入:repo sync (把所指定的分支代码同步到本地)
下载代码# repo init -u kratos:manifest.git -b JB/QC8064_xxxx

# repo sync -j4
代码编译下载代码完成后,可以开始进行编译操作:

编译命令(代码根目录下执行)

(1)source build/envsetup.sh

(2)choosecombo

1.devices

2.debug

7.msm8660_surf

3.eng

以上为设置环境变量,工具链,参数,编译选项

每次编译前都需要进行以上操作,若执行过编译操作的终端端口未关闭则不需要重新配置

(3) make -j4

-j* 为线程数,视pc cpu核心数而定

SDK编译

需要在4020基础上编译

#make sdk for 4020

cd android

source build/envsetup.sh

lunch sdk-eng

make sdk

出现错误时:

cp vendor/qcom/proprietary/webkit-bin/msm8660/libwebkitaccel.so out/target/product/generic/obj/lib/

cp vendor/qcom/proprietary/webkit-bin/msm8660/libwebkitaccel.so out/target/product/generic/system/lib/

make sdk

等到完成后

out/host/linux-x86/sdk/android-sdk_eng.xxx_linux-x86.zip 就是编译出的SDK

解压后需要把GOOGLE SDK 中的tools/emulator 文件复制到我们的sdk/tools/中

需要在xxxx分支上编译

#make NDK for 4030 ndk

#需要安装android-ndk-r6

source build/envsetup.sh

choosecombo Device release msm8660_surf eng

make

#make 完成后,执行下面到步骤

./build/tools/build-ndk-sysroot.sh

./build/tools/build-platforms.sh

cp -af ndk/build/platforms/android-3 ../android-ndk-r6/platforms/

cp -af prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/*

../android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/

cp prebuilt/android-arm/gdbserver/gdbserver

../android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/

最后:android-ndk-r6目录就是4030的NDK

(如果你是32位操作系统

编译时候出现:

build/core/main.mk:73: You are attempting to build on a 32-bit system.

build/core/main.mk:74: Only 64-bit build environments are supported

请编辑/build/core/main.mk

vim /build/core/main.mk

注释掉ifneq (64,$(findstring 64,$(build_arch)))

添加ifneq (i686,$(findstring i686,$(build_arch)))

)
adb connect在$(androidsource)/system/core/rootdir/init.rc 中找到

on property: ro.kernel.qemu=1

#setprop service.adb.tcp.port 5555

start adbd

on property: persist.service.adb.enable=1

#setprop service.adb.tcp.port 5555

start adbd

取消红色代码部分的#注释

重新编译,烧写 boot.img
烧录adb reboot bootloader

./fastboot erase boot

./fastboot erase system

./fastboot erase userdata

./fastboot erase persist

./fastboot flash boot boot.img

./fastboot flash system system.img

./fastboot flash userdata userdata.img

./fastboot flash persist persist.img

./fastboot reboot
提交代码git push gnu HEAD:refs/for/ICS/30150_temp
提交代码1.修改提交过程

(1)执行repo start branchname --all

创建本地所有git的branchname

此命令是为所有的.git仓库设置git branch(branchname可以是任意名字,若不想在本地同时使用多个分支则可跳过)

完成后可在包含.git的目录下,使用git branch看到新建的branchname

(如果实在找不到.git文件....可以查看代码根目录下的.repo/manifest.xml文件,

如 <project name="platform/frameworks/base" path="frameworks/base" />

project name="platform/frameworks/base" 后为git服务器端代码地址,

path="frameworks/base" 这个为本地代码路径,说明frameworks/base/下包含.git,可以进行git命令操作)

(2)cd project 进入修改的代码所在模块,(有.git的隐藏文件的目录)

(3)git status 进入目录后执行,查看代码的状态,如修改删除(修改过代码后,执行此操作,会看到修改过的文件为红色)

(4)git add files files为具体要提交的单个文件,

如果文件较多则执行

git add . 提交当前目录模块下.git的所有文件

(5)git commit -m “message by user” 将INDEX中的修改提交到本地仓库, message为change的标题 , by user 则是修改人Idcode

( 此时执行git status,会看到修改过的文件已经被添加,文件名路径名为绿色)

以上的所有操作都是本地操作,不会影响到服务器上的代码,真正的修改提交是git push操作,将你前面添加的文件push到服务器端,以完成修改提交:

(6)git push nebula HEAD:refs/for/xxxx-SDV001 将所有修改提交到OS/4022分支,命令执行完以后,会在服务器上生成一个change, 此方法是通过gerrit审核

git push nebula HEAD:refs/heads/xxxx-SDV001 直接push修改到git 服务器

2.更新

如果以前提交的change还没有关闭,或者提交的代码审查未通过,需要更新.

cd project

git status

git add files



git add .

git commit --amend -m “message” 将INDEX中的修改提交到本地仓库,替换一个已经发布的提交,message为change的标题

git push nebula HEAD:refs/for/xxxx-SDV001

git push gnu HEAD:refs/for/ ICS/30150_temp

3.合并分支

首先切换到想要合并到的分支下,运行'git merge'命令,例如将experiment分支合并到master分支,切换到master分支后运行:

$git merge --no-commit --no-ff experiment

如 果合并没有顺利完成,需要进行冲突处理,这种情形下,可以通过下面的方式来解决:

(1)打开提示冲突的文件,会看到冲突标记,修改完成之后,运行'git add'重新载入(re-stage)文件,然后运行'git commit'提交;

(2)如果想用一个有图形界面的工具来解决这些问题,不妨运行 git mergetool,它会调用一个可视化的合并工具并引导解决所有冲突,同样在所有冲突解决后,需要运行'git add'重新载入(re-stage)文件,然后运行'git commit'提交

4.需要用到的功能

(1)git log:

命令行输入:$git log -p 显示代码详细修改信息

获取某个文件的历史修改信息

命令行输入:git log test.java

命令行输入:git log commit id

(2)git pull:

repo sync 可以同步git服务器的代码,与本地做更新操作,但是如果需要单个projects

可以使用

git pull

对于repo工具创建的git project要使用命令:git pull nebula <remote分支名>

(3)git branch:

git branch 可以查看当前 git 分支

git branch newbranchname 可以新建分支

(4)git checkout:

git checkout branch 可以在多个branch切换

git checkout -b newbranchname 可以新建分支,且直接切换到新建的分支上

(5)git reset :

git reset HEAD^ 回退 commit 的信息(撤销最近的一次commit,只保留working tree的源代码级的修改,而index file和commit都会恢复到上一次commit的状态,“mixed”是git reset的默认选项)

如:git add test.java 添加test.java到INDEX中

git reset test.java 取消test.java的添加

恢复到原始代码:

git reset --hard 恢复到原始代码,之前所有的add和commit操作都被恢复

reset的一系列功能只能对git add和git commit进行操作,当代码已经提交给服务器分支时,请进行“更新change”操作

(6)git diff:

git diff experimental mybranch experimental和mybranch为分支名

(7)如何回退到一个历史版本

git log 查看需要所有的commit

git reset commitID 回退到历史版本

git diff 可以看见源代码变为了历史版本

git reset --hard 回退到以上的操作

制作patch

修改代码后,

git status 查看修改

git add file 添加修改后的文件 (如果文件较多,用git add . 添加当前目录下的所有修改

git commit -m `pwd` commit信息为路径名,方便分辨patch路径

git format-patch -1
恢复版本git reset --hard

git rebase branch-name
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: