搞了两天,终于用上了这个BUCK,编译超快,一个大项目,在我的Mac pro里面,使用android studio1.5 编译起码要90秒,甚至120秒,
alias 就是别名
这个
一次调试就需要差不多两分钟,这个受不了,效率很打折扣,特别做重复调试这类,之前搞内存泄漏,或者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',
],
)
<pre style="background-color: rgb(255, 255, 255); font-family: Menlo; font-size: 12pt;">project_config(
<span style="color:#000080;"><strong>src_target </strong></span>= <span style="color:#008000;"><strong>':app'</strong></span>,
)
这个
android_binary就是入口,name debug 就是刚才说的别名 ,注意路径问题
根据这个BUCK文件来配路径,这个符号就是 buck里面的引用符号,应用那个标签的,//:
下面是 打包key
visibility 是相对哪里可以有效引用keystore( name = 'debug_keystore', store = 'xili123.keystore', properties = 'debug.keystore.properties', visibility = [ '//:app' ], )
其他没注意的了,多看看例子 修改修改 他就会提示错误,这样领悟更深刻
这个是 资源文件的标签,看命名应该可以懂android_resource( name = 'res', res = 'res', assets = 'assets', package = 'com.lzx.example', visibility = [ '//src:', ], )
这个是AIDL文件的,注意了,它编译时候会提示找不到文件,用把AIDL生成对应java文件copy到和aidl一样的目录才可以,buck不生成java的gen_aidl( name = 'IActivityWatcher', aidl = 'src/android/app/IActivityWatcher.aidl', import_path = 'src/', visibility = [ '//src:' ], )
前面提到的 activity 标签,他是调用了activity 命名的标签,现在贴这个标签出来这是包含哪些代码文件的,下面引用就包括了jar so aidl res 的标签,于是执行这个activity就可以囊括全部了android_library( name = 'activity', srcs = glob(['src/**/*.java']), deps = [ '//:res', '//:IActivityWatcher', '//:android-support-v4', '//:native_libs', ], visibility = [ 'PUBLIC' ], )
so 的标签prebuilt_native_library( name = 'native_libs', native_libs = 'libs', )
prebuilt_jar( name = 'android-support-v4', binary_jar = 'libs/android-support-v4.jar', visibility = [ 'PUBLIC' ], )
jar 标签
用19呢是为了避免高版本SDK的严格PNG检查,不然编译不通过,提示PNG 颜色通道什么鬼的错误[android] target = android-19 [android] build_tools_version = 19.1.0
还有一个什么R.id 的常量错误