duang duang duang ……
各位看官,开源中国码云 Android 项目构建新功能上线啦!!
码云支持的项目中, ant/maven/gradle的配置文件支持脚本。而每个人写出的构建脚本千变万化,因此码云对支持的项目设置做了一些规范。本次给大家带来的新功能内容如下:
一、码云Android项目构建注意事项
1、ant项目
build.xml必须位于项目根目录。
2、maven项目
pom.xml必须位于项目根目录。
3、gradle项目
由于gradle的配置灵活,我们做了一些规范,并且增加了一下机制来处理签名问题。
二、码云Android项目构建示例
android-app 项目目录结构(以osc/android-app为例)

gradle 需要的配置和脚本有:
gradlew/gradlew.bat/build.gradle => 构建脚本。
settings.gradle => 子项目。
app/build.gradle => 构建配置(设置签名, debug/release, 依赖等等)。
gradle.properties(优先于 config/gradle.properties, 当 gradle.properties 不存在时,则尝试读取 config/gradle.properties) => 用户设置 jdk/gradle, 可定义变量。
gradle/wrapper/gradle-wrapper.properties => 构建使用的 gradle 的版本(请使用gradle 2.0以上版本)。
1、关于gradle构建流程:
判断是否是标准的 gradle 项目。
读取 settings.gradle 文件,找到子项目的路径。
读取 gradle.properties 或 config/gradle.properties 文件(确定 keystore。如果 keystore 使用私有项目地址,则使用当前用户身份下载。如果没有设置或者不存在私有项目地址及权限错误,则生成随机签名用来构建)。
读取 gradle/wrapper/gradle-wrapper.properties 文件, 确定使用的 gradle 版本,下载并解压。
进入子项目目录。如果没有定义,即为项目根目录。
读取子项目中 build.gradle 文件,修改其中的 signingConfigs section 和 buildTypes section,以确保使用正确的签名和构建版本。
构建成功,上传apk。
2、关于setting.gradle:

3、关于config/gradle.properties:
gradle 使用的 gradle.properties 必须位于项目根目录,为了不让开发者本地项目中的 gradle.properties 上传到线上仓库, 可将该文件加入到 .gitignore 中,然后在 config/gradle.properties 配置 android 构建需要的 keystore 信息,配置可参考 上图。
私有的 keystore 存储在私有仓库,从而保证了签名文件的安全。如果用户根目录下存在 gradle.properties 文件,则不 再读取 config/gradle.properites。注明: osc/android-app 项目中 config/gradle.properties 使用了绝对路径,用户可设置如下:
RELEASE_STORE_FILE=http://git.oschina.net/your/private-project/blob/ref/path-to-keystore
4、关于app/build.gradle:

签名设置也可采用如下形式:
//signing files settings
signingConfigs {
debug { #相对路径且存在;否则使用Git@OSC的keystore(绝对路径构建失败)
storeFile file("your_secret.keystore")
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
release { #网路地址存在;否则使用Git@OSC的keystore
storeFile file("http://zql.org/zouqilin/gradle_keystore/blob/master/git-gradle-key.keystore")
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
test { #混合形式
storeFile file("http://zql.org/zouqilin/gradle_keystore/blob/master/git-gradle-key.keystore")
storePassword "oschina123"
keyAlias "alias_name"
keyPassword "oschina123"
}
}
三、码云 Android 项目使用步骤
设置项目的语言为Android。

进入项目首页会出现【生成apk】按钮。

点击【生成apk】按钮,进入构建页面(使用当前用户的身份拉取私有仓库中的 keystore )。

【注意】:如果想使用项目中提供的 keystore(私有仓库地址),请选中该复选框!
构建过程。

构建完成(提供 apk 下载)。

生成随机签名(提供签名信息和 keystore 下载,项目中未提供签名,为方便测试,码云为每个项目生成了随机的签名)。

巴拉巴拉……终于说完了~
小编觉得吧,这些通通都不是重点,赶紧去玩玩 Android 项目构建功能才是重点!赶紧的,点击 osc/android-app 开始玩吧!
如果有问题,请反馈至 oschina/git-osc Issues ,非常感谢您的支持!
###############
fetch code succeed
###############
ready to create docker container
###############
docker container created successfully
/usr/bin/env: ‘sh\r’: No such file or directory
构建失败。。。
Exception in thread "main" java.io.IOException: No space left on device
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:326)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:126)
at org.gradle.wrapper.Install.copyInputStream(Install.java:244)
at org.gradle.wrapper.Install.unzip(Install.java:229)
at org.gradle.wrapper.Install.access$600(Install.java:27)
at org.gradle.wrapper.Install$1.call(Install.java:74)
at org.gradle.wrapper.Install$1.call(Install.java:48)
:app:generateDebugResources
:app:mergeDebugResources
:app:processDebugManifest
:app:processDebugResources
:app:generateDebugSources
android_ndk/build/ndk-build: 143: android_ndk/build/ndk-build: file: not found
:app:ndkBuild
make: Entering directory 'android_projects/xxxx2-328d22b4/app/src/main'
/bin/sh: 1: file: not found
ndk好像有些问题。。。😕
引用来自“NextLife”的评论
Could not find com.android.support:appcompat-v7:24.2.0.好像 support library也没更新
引用来自“zouqilin”的评论
好的 谢谢支持引用来自“NextLife”的评论
Could not find com.android.support:appcompat-v7:24.2.0.好像 support library也没更新
引用来自“枫_林_海”的评论
同问,支持ndk不?好像 support library也没更新
引用来自“动弹”的评论
ndk可以不引用来自“NextLife”的评论
这sdk工具没更新啊,failed to find Build Tools revision 24.0.2引用来自“天涯冰萱”的评论
ci的节奏,构建完了是不是可以给个WebHooks引用来自“iforgetmyname”的评论
晚饭给产品经理加鸡腿!!@红薯引用来自“冬天之雪”的评论
程序员加十个引用来自“冬天之雪”的评论
产品经理下班就回家了,他的鸡腿给加班的程序猿吃吧引用来自“首席撸破屌”的评论
程序员说鸡腿明天留给明天红薯上班吃吧。引用来自“iforgetmyname”的评论
晚饭给产品经理加鸡腿!!@红薯引用来自“冬天之雪”的评论
程序员加十个引用来自“冬天之雪”的评论
产品经理下班就回家了,他的鸡腿给加班的程序猿吃吧引用来自“act262”的评论
这是要做CI的赶脚引用来自“iforgetmyname”的评论
晚饭给产品经理加鸡腿!!@红薯引用来自“冬天之雪”的评论
程序员加十个引用来自“iforgetmyname”的评论
晚饭给产品经理加鸡腿!!@红薯引用来自“狸猫”的评论
ios何事支持引用来自“act262”的评论
这是要做CI的赶脚引用来自“Skiychan”的评论
这个流弊。话说,假如是同一个项目同一个commit,可以不用重复构建了吧。