(4.6.11.7)使用BUCK 编译Android应用

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

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

    
    mkdir my-project
    cd my-project
    touch .buckconfig
    buck quickstart --type android --dest-dir .
    //根据提示输入android sdk路径
    buck build app
       
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后在 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',
)


 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84

再新建一个.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
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

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
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这样就完成了基于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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值