Android下的配置管理之道之安装gerrit代码服务器
gerrit代码服务器的安装下面我们介绍另外一种安装方式。
就是native installers tools的安装方式。也就是 使用.deb 或者.rpm 包来安装。
1234We are pleased to announce the general availability of RPM and Debian native distributions for Gerrit Ver. 2.10. They have been packaged from the original Gerrit WAR using the new native installers tools developed and contributed back to the Gerrit community.
12gerrit在2.10版本的时候发布了另外格式的安装包,也就是 rpm/deb 格式的安装包。
为什么需要另外格式的安装包?
123456789101112131415161718Why yet another packaging format?Gerrit Code Review has al ...
Android下的配置管理之道之高通拆仓
Android下的配置管理之道之高通拆仓高通芯片平台的代码,一般可以分为android部分和amss部分。android部分很简单就谷歌那一整套的代码的。amss部分的代码属于高通自己的代码,算是私有代码。 不过这一部分代码仓库组织的很烂很烂。
amss这一部分 高通是把好多模块的代码分不同目录存放到一个git仓库里面了。导致这个git仓库十几GB的大小。这个仓库的垃圾之处还在于有些不该加到git仓库里面的文件都加入了,例如一些编译生成的中间文件,一些python执行的中间文件,每次编译这些文件都会被重新修改,真的很垃圾!!!shit~~~
再来说这个amss的仓库,如下列出了某个amss仓库的目录结构,基本上一个目录就是一个模块啦。其中还有2个单独的文件about.html 和 contents.xml,这两个文件还是很重要的,about.html记录高通每个模块的版本信息的,非常重要的。contents.xml和编译各个模块有关系,也是比较重要的一个文件。其中还有一个比较特殊的目录LINUX/,这个是高通android侧的私有代码。应该放到android代码目录顶层 ...
Android下的配置管理之道之基线升级
基线升级介绍 基线升级一般有如下几种方式
git rebase的方式
git cherry-pick 的方式(这个效果和git rebase 类似)
git merge的方式
几种方式的优缺点不同的公司可能采取不同的方式。
两种各有优缺点git rebase的方式 其中的git log历史会是一条直线走下去的,不会有分叉。git merge的方式 其中的git log 历史中会有分叉,有自己公司的提交,和其他公司(比如高通)的提交相互穿插的。
git rebase方式 一般最后会采用强制 git push -f的方式推送到服务器上。之前的历史会冲掉,所以一般会先做个备份分支。git merge 来说安全一些,不会强制git push到服务器,冲掉之前的git log历史。merge一般是不会改变之前的历史提交的。(rebase是会改变之前历史的)
git rebase 会稍微的复杂一些。git merge 相对于来说简单一些。(一般我们看很多的开源项目都比较喜欢git merge的方式,例如kernel,我们通过git log能看到很多 Merge 打头的提交)
基 ...
Android下的配置管理之道之apk签名相关
如何生成apk的签名key文件1234567# 建key方法:sub='/C=CN/ST=ShangHai/L=ShangHai/O=example/OU=CM/CN=example/emailAddress=test@example.com'for key in platform shared media testkey;do ./development/tools/make_key $key "$sub"done
怎么给某个apk重签名命令如下:
1java -Xmx2048m -jar signapk.jar xxx.x509.pem xxx.pk8 unsigned.apk signed.apk
pem和pk8文件 ,对于是userdebug、eng 这些使用的 是代码里面的key文件。可以在build/target/product/security这个路径下面得到。
如何获取签名key的sha1值解压apk文件得到RSA文件
APK以zip文件方式打开,在\META-INF\目录中存在一个.R ...
Android下的配置管理之道之git的使用
Android下的配置管理之道之git的使用git helpgit help 命令用来显示任何命令的 Git 自带文档。
对于每一个命令的完整的可选项及标志列表,你可以随时运行 git help <command> 命令来了解。
git config/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。
1git config --system
~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。
1git config --global
当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。
12git config --local
每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖~/.gitconfig, /etc/gitconfig 中的同名变量。
12345$ git config --global user.name "马 ...
Android下的配置管理之道之git相关的常见问题
这里是一些常见问题的总结,可能关于git,repo,gerrit,ubuntu等
FAQ : fatal: ‘xxxxx/bbbbbbbbbb/platform/manifest.git’: not a Gerrit project
80%是因为没有权限,可以尝试访问http://gerrit.xxx.com:8080/#/admin/projects/ 搜索一下有没有这个project, 在下面的filter框里面输入project的名称,可以只输入最后的一个单词,会过滤出来的。
如果project的list里面看不到任何东西,表明没有gerrit的权限。
当然还有20%是因为project的名字打错了,同样去上面的地址搜下,找到正确的project名字即可
FAQ :Permission denied (publickey).
本地的ssh key和服务器上不匹配或者本地的key有问题,可以重新把key在gerrit上贴一遍cat ~/.ssh/id_rsa.pub 命令的输出结果贴到http://gerrit.xxxx.c ...
Android下的配置管理之道之sign_target_files_apks分析总结
整个流程 大概分为下面几步
先编译出来一个完整的 xxxx-target_files-eng.magesfc.zip 文件。
执行./build/tools/releasetools/sign_target_files_apks -v -o -d build/target/product/security xxx-target_files-eng.magesfc.zip sign-xxx-target_files-eng.magesfc.zip
执行 ./build/tools/releasetools/ota_from_target_files -v --path Bins/linux-x86 -kreleasekey sign-xxxx-target_files-eng.magesfc.zip sign-xxx-ota-eng.magesfc.zip 生成ota全包。
其中涉及到的代码都在 ./build/tools/releasetools 下面, 主要有2个文件 sign_target_files_apks和 ota_from_tar ...
repo系列之manifest文件详解
Android使用repo来管理多个Git项目。它需要一个manifest XML文件来指示这些git项目的属性。
这里对manifest 做个介绍:
1.manifest: 最顶层的XML元素。
123456789101112131415<?xml version="1.0" encoding="UTF-8"?>可以包含的子元素<!DOCTYPE manifest [ <!ELEMENT manifest (notice?, remote*, default?, manifest-server?, remove-project*, project*, extend-project*, repo-hooks?, ...
repo系列之repo-sync源码分析
repo sync 子命令源码分析使用的repo 版本是 v1.13.2
源码文件在subcmds/sync.py
从 repo sync -cdj1 abl/tianocore/edk2 执行开始开始说起TODO 后续再讲一下 -c -d -j 这几个参数作用,在源码里面是如何影响repo sync的行为的。
1.第1步:1234def _Main(argv): 入口在这里的,main.py 的 _Main 方法这里, ...... result = repo._Run(argv) or 0 然后调用到这里的 _Run 方法。
repo 对象是 class _Repo(object) 类的一个实例,在 main.py 里面定义的。
repo 里面有2个成员变量 self.repodir 和 self.commands
self.repodir 值是 ‘xxxx/.repo’ 目录
self.commands 是一个字典,每个key都是 repo 子命令,例如 init,sync 这些。对应的value是 subcmds ...
repo系列之repo支持多线程去checkout的
repo 支持 多线程去 checkout的repo 支持 多线程去 checkout的第一次 提出 _Checkout 方法
3663 * 745be2e * Add support for partial clone. [2019-06-03 11:24 2019-07-16 00:23] (tag: v1.13.4)| 2715 * 5a03308 * sync: try to checkout repos across sync failures [2019-09-23 19:21 2020-02-05 21:37]| 2715 * 5a03308 * sync: try to checkout repos across sync failures [2019-09-23 19:21 2020-02-05 21:37]| 884 * ebf04a4 * sync: switch local checkout to multiprocessing ...
repo系列之仓库下面的commit-msg是怎么生成
为什么有的 仓库 没有 hook commit-msg1repo forall -c 'a=$(file .git/hooks/commit-msg); echo $a=$REPO_PATH'
初步来看 和 xml 中的 remote 那里配置的review 有关系。
123456789101112131415161718192021222324252627282930313233343536def _InitHooks(self): hooks = platform_utils.realpath(self._gitdir_path('hooks')) if not os.path.exists(hooks): os.makedirs(hooks) for stock_hook in _ProjectHooks(): name = os.path.basename(stock_hook) if name in ('commit-msg',) and not self.remote.review \ ...
repo系列之repo-diffmanifests源码分析
repo diffmanifests 子命令源码分析这个命令的作用是比较2个 manifest xml 文件的差异的,比较里面每个仓库的git log差异,一般用来对比2个构建版本之间的提交差异,生成 changelog 使用的。
效果如下:
123456789101112131415161718repo diffmanifests old.xml new.xmlchanged projects : git-repo changed from 3bbbcaf99d6137b3ca88dd8bb0acc8733cf1e6be to 13f323b2c221db4e69e3f5a671455954b65f1fb3 [+] 13f323b event_log: turn id generation from a generator to a func call [+] 12ee544 init: Remove -c short option for --current-branch [+] e158e38 Merge "README: link in new bug tra ...