搞了两天,终于用上了这个BUCK,编译超快,一个大项目,在我的Mac pro里面,使用android studio1.5 编译起码要90秒,甚至120秒,
一次调试就需要差不多两分钟,这个受不了,效率很打折扣,特别做重复调试这类,之前搞内存泄漏,或者UI 调整,经常改一点就重复编译,一天下来改不了多少
于是不知道脑抽经还是什么,看到了BUCK,听说过年团队只有微信在使用,于是我研究了一下(百度了一下)。国内有一两篇博客,抄官网。。。。
于是找官网,官网英文,没办法,只能看代码的关键字,于是还真是顺利安装了。。。。brew 安装的
安装后,buck help 命令正常,利用命令创建的快速项目也可以编译,很嗨心,实际后面的麻烦一堆堆。
1、命令创建的项目不是标准的安卓项目
2、没包括 jar 、so、aidl;
3、如何在旧项目使用?
于是使用自己平时用的一个例子,参考他的快速例子,因为当时没怎么看官网,的确走了弯路。搞了多个BUCK文件。
1、首先 需要创建buck 环境,就是为原项目创建buck环境,官网有个命令,如果单纯使用这个命令,你估计会悲剧了,因为会被你的项目关联给取消了,android studio不能识别;新建.buckconfig 文件,里面填写下面内容,这个文件有大用的,就是开始文件,接受命令的
官网给的例子我没用上,也许他觉得程序员很聪明 不用太详细,和我写博客一样,简陋写,
[alias]
debug = //:debug
release = //:release
[android]
target = android-19
[android]
build_tools_version = 19.1.0
alias 就是别名
命令用时候就是这个别名,看到debug ;
2、其实一个BUCK文件即可,快速例子里面多个BUCK,不知道用意何在。但是我尝试看懂了那些配置语法后,就合并一起,果然成功,关键是引用问题:
需要自己新建一个BUCK文件,系统不会帮你创建的:
android_binary(
name = 'debug',
package_type = 'DEBUG',
manifest = 'AndroidManifest.xml',
keystore = '//:debug_keystore',
deps = [
'//:activity',
],
)
project_config(
src_target = ':app',
)
这个
android_binary就是入口,name debug 就是刚才说的别名 ,注意路径问题
根据这个BUCK文件来配路径,
//:
这个符号就是 buck里面的引用符号,应用那个标签的,
下面是 打包key
keystore(
name = 'debug_keystore',
store = 'xili123.keystore',
properties = 'debug.keystore.properties',
visibility = [
'//:app'
],
)
visibility 是相对哪里可以有效引用
其他没注意的了,多看看例子 修改修改 他就会提示错误,这样领悟更深刻
android_resource(
name = 'res',
res = 'res',
assets = 'assets',
package = 'com.lzx.example',
visibility = [
'//src:',
],
)
这个是 资源文件的标签,看命名应该可以懂
gen_aidl(
name = 'IActivityWatcher',
aidl = 'src/android/app/IActivityWatcher.aidl',
import_path = 'src/',
visibility = [
'//src:'
],
)
这个是AIDL文件的,注意了,它编译时候会提示找不到文件,用把AIDL生成对应java文件copy到和aidl一样的目录才可以,buck不生成java的
前面提到的 activity 标签,他是调用了activity 命名的标签,现在贴这个标签出来
android_library(
name = 'activity',
srcs = glob(['src/**/*.java']),
deps = [
'//:res',
'//:IActivityWatcher',
'//:android-support-v4',
'//:native_libs',
],
visibility = [
'PUBLIC'
],
)
这是包含哪些代码文件的,下面引用就包括了jar so aidl res 的标签,于是执行这个activity就可以囊括全部了
prebuilt_native_library(
name = 'native_libs',
native_libs = 'libs',
)
so 的标签
prebuilt_jar(
name = 'android-support-v4',
binary_jar = 'libs/android-support-v4.jar',
visibility = [
'PUBLIC'
],
)
jar 标签
[android]
target = android-19
[android]
build_tools_version = 19.1.0
用19呢是为了避免高版本SDK的严格PNG检查,不然编译不通过,提示PNG 颜色通道什么鬼的错误
还有一个什么R.id 的常量错误