使用BUCK 编译Android应用

来源:互联网 发布:奔腾楚天激光机编程 编辑:程序博客网 时间:2024/05/16 17:48

当项目依赖的库很多时,本地开发编译速度会越来越慢,有时只是改动几行却要花上几分钟编译,非常影响开发速度。
这里简单的介绍下使用BUCK加速编译。

  1. 安装编译
    https://buckbuild.com/setup/install.html 看文档,非常简单
    Mac OSX可以直接通过homebrew安装,可以用手动下载源码编译。
  2. 使用
    根据https://buckbuild.com/setup/quick_start.html 的介绍,

    mkdir my-projectcd my-projecttouch .buckconfigbuck quickstart --type android --dest-dir .//根据提示输入android sdk路径buck build app

    然后在 my-project/buck-out/gen/apps/myapp 下面生成app.apk文件,这样一个简单的通过buck编译程序就完成了。

  3. 迁移
    但是这样的目录结构通常和我们项目结构不同,怎么办?难道把现在项目结构也改成这样吗?成本会不会太大了!
    其实和gradle一样,只需要设置相关的代码目录就可以了,下面就简单的介绍下如何使用buck编译现有项目。
    第一种情况是现在项目结构还是eclipse那种的:
    myapp/
    – src/
    – res/
    – libs/
    – assets/
    – AndroidManifest.xml
    – local.properties
    – app.keystore

在myapp/ 目录新建一个BUCK文件,复制以下内容并修改包名后保存到BUCK文件中。

import re# 所有jar包jar_deps = []for jarfile in glob(['libs/*.jar']):  name = 'jars_' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile)  jar_deps.append(':' + name)  prebuilt_jar(    name = name,    binary_jar = jarfile,  )android_library(  name = 'all-jars',  exported_deps = jar_deps,)# 所有so库文件prebuilt_native_library(  name = 'native_libs',  native_libs = 'libs',)# res、assets文件android_resource(  name = 'app-res',  res = 'res',  assets = 'assets',  package = 'com.app.packagename',)# 项目代码android_library(  name = 'app-src',  srcs = glob(['src/**/*.java']),  deps = [    ':all-jars',    ':native_libs',    ':build-config',    ':app-res',  ],)# 可选,BuildConfig.java 中的相关属性android_build_config(  name = 'build-config',  package = 'com.app.packagename',  values = [    'String APP_CONFIG = "DEBUG"',  ],)# 签名,根据https://buckbuild.com/rule/keystore.html # 在local.properties中配置密钥参数keystore(  name = 'app-keystore',  store = 'app.keystore',  properties = 'local.properties',)# 构建规则,注意name,没有proguard的可以删除# 需要proguard优化时要改package_type='release'android_binary(  name = 'myapp',  package_type = 'debug',  manifest = 'AndroidManifest.xml',  keystore = ':app-keystore',  proguard_config='proguard-project.txt',  deps = [    ':app-src',    ':app-res',  ],)# 手动生成apk并优化apk_genrule(  name = 'appapk',  apk = ':myapp',  bash = '$ANDROID_SDK_HOME/build-tools/23.0.2/zipalign -f 4 $APK $OUT',  out = 'app_sign.apk',)

再新建一个.buckconfig的文件,复制以下内容到.buckconfig文件中

[alias]    app = //:myapp[java]    # 代码目录    src_roots = //src/[project]    # 默认AndroidManifest.xml文件位置    default_android_manifest = //app/AndroidManifest.xml    ignore = .git, **/.svn,[android]    build_tools_version = 23.0.2    target = android-23

那么现在项目中的文件结构如下:

myapp/
– src/
– res/
– libs/
– assets/
– AndroidManifest.xml
– local.properties
– app.keystore
– BUCK
– .buckconfig

并且local.properties 有如下:

# app.keystore 签名密码,自行修改
key.alias=my_alias
key.store.password=store_password
key.alias.password=alias_password

好了,只需要添加2个文件并略微修改一下就可以使用buck超快的编译速度了!

cd myapp#编译buck build app#生成apk,用于buck build //:appapk#安装budk build app

这样就完成了基于buck编译的改造,多看文档 https://buckbuild.com/
规则写起来就比较简单了。

现在没有提到编译AIDL文件,因为buck目前有bug没法编译parcelable类型的aidl文件,https://github.com/facebook/buck/issues/271 其实配置和上面的。
还有需要注意的是 不能用switch(id){ case R.id.button: }这样使用R中的属性,

参考Demo: https://buckbuild.com/article/exopackage.html

后面将会介绍用buck编译 android studio 项目的规则。

0 0
原创粉丝点击