huntout.me

Extending Android Build Files In Cordova

Jan 14, 2016

最近流行 Cordova.

  • Mobile apps with HTML, CSS & JS
  • Target multiple platforms with one code base
  • Free and open source
  • Support platforms: android, iOS, amazon-fireos, blackberry10, browser, firefoxos, webos, windows, windows8, wp8
  • Reusable code across platforms
  • Support for offline scenarios
  • Access native device APIs

在新的 Android 项目试用了一下,感觉不错。结合 WebpackVuejs 形成了一个可以在 browser 端调试,最后打包成 APK,并且支持单元测试及 E2E 测试的前端脚手架,有时间我会把这个脚手架开源。

问题

项目中使用了 phonegap-plugin-barcodescanner,该插件带了十几种本地语言包,cordova build --release 时会报告 MissingTranslation 错误。

最直接的解决方法是在 platforms/android/build.gradle 中增加

android {
  lintOptions {
      disable 'MissingTranslation'
      disable 'ExtraTranslation'
  }
}

问题是 build.gradle 会在 build 过程中被覆盖,同时 platforms 目录是被 git ignore 的。

解决方案

Cordova 提供了 hooks 功能,可以很好的解决这个问题:

hooks/before_build/beforeBuild.js

#!/usr/bin/env node

var path = require('path');
var fs = require('fs-extra');

var projectRoot = process.argv[2];
var src = path.join(projectRoot, 'platforms_extras');
var dest = path.join(projectRoot, 'platforms');

try {
  fs.copySync(src, dest);
  console.log('Copy platforms extra files.');
} catch (err) {
  console.error(err.message);
}

platforms_extras/android/build-extras.gradle

android {
  lintOptions {
      disable 'MissingTranslation'
      disable 'ExtraTranslation'
  }
}

Enjoy it!