Ubuntu 14.04 64位操作系统下,meteor如何使用外部安装好的Android SDK? - maodouio/meteor-lean-startup-camp GitHub Wiki

在项目里 meteor add-platform android 即可添加 android 支持。如果是第一次做 android 应用,那么要先 meteor install-sdk android 安装 meteor 的 android 支持,相关文件会在 ~/.meteor/android-bundle 里。然后就可以 meteor run android。

折腾了一天,还是无法为meteor安装Android SDK。用了VPN、用了代理来翻墙,各种安装、卸载、尝试,各种等待,尝试了n(n>5)次,每次总是在等待了很长时间后,报以下错误:
Installing Android Build Tools

events.js:72
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at errnoException (net.js:904:11)
at Pipe.onread (net.js:558:19)

后来,脑子突然开窍了,想到了是否可以使用我已有的Android SDK(因为我之前做过Android 开发,机器上有SDK的环境),何必再为meteor去下载安装一份SDK呢?这个办法是可行的,为什么呢?其实,meteor早已经支持这种方式了。通过设置USE_GLOBAL_ADK环境变量来指定外部的Android SDK。

前提条件

除了安装了的Anddroid SDK,还得安装jdk、apache-ant,可以敲下java,javac,ant来验证下是否安装。如果没有安装,则需要先安装jdk,apache-ant。

安装JDK

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

安装Apache Ant

sudo apt-get install ant

安装Android SDK

使用VPN或者代理,先下载Android SDK,解压安装即可。(我安装的是adt-bundle-linux-x86_64-20140321.zip,大家可以从网上搜到)

设置环境变量

打开/etc/profile,在最后,加上以下3行,保存退出。(根据你自己Android SDK所在的目录修改)

export ANDROID_HOME=/home/ysxt/adt-bundle-linux/sdk
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/build-tools:$PATH
export USE_GLOBAL_ADK=/home/ysxt/adt-bundle-linux/sdk

执行source /etc/profile,让环境变量起作用。

#删除android-bundle 删除meteor目录下的android-bundle,避免干扰。
rm -rf ~/.meteor/android-bundle

运行Android SDK Manager

打开终端,敲入android,运行Android SDK Manager
选中(Tools)Android SDK Build-tools 21、(Android 4.4.2(API 19))Intel X86 Atom System Image、(Extras)Android Support Library包,点击安装。
这一步,也必须使用VPN、代理来翻墙安装。

检查build-tools目录下是否有21.0.0

查看USE_GLOBAL_ADK目录下build-tools目录下是否有21.0.0,没有的话可以复制一个,改下名称,我的sdk里就没有(我有android-5.0,android-4.4.2等,我就是复制android-5.0,然后改下名称的)。为什么这么做呢,根据https://github.com/meteor/meteor/blob/devel/tools/commands-cordova.js (见2882-2900行),执行meteor install-sdk android时,meteor会去检查build-tools/21.0.0目录。
这一步很关键,之前的报错,就是在这一步报出来的,总是无法安装build-tools。

检查system-images目录

根据https://github.com/meteor/meteor/blob/devel/tools/commands-cordova.js (见2932-2956行), 首先会检查{USE_GLOBAL_ADK}/system-images/android-22/default/x86(platform-tools对应22版本),没有的话,meteor会根据platform-tools版本(比如,19)去找一个你已经安装了的对应版本(比如,19)的Android X86 image。(我的机器上,用的是版本19的image,{USE_GLOBAL_ADK}/system-images/default/x86)
这一步,你安装的platform-tools版本一定要与你的Android X86 image版本一致,否则meteor又会去下载安装。

重新执行meteor install-sdk android

✓ Found Android SDK
✓ Found ant on PATH
✓ A JDK is installed
✓ Found Android Platform tools
✓ Found Android Build Tools
✓ Found Android 19 API
✓ Found suitable Android x86 image
✓ 'meteor' android virtual device (AVD) found
✓ Android emulator acceleration is installed
哈哈,大功告成了。

执行meteor add-platform android

You must agree to the terms to proceed.

Do you agree (Y/n)? y
android: added platform

执行meteor run android

Starting android emulator
[[[ ~/demo ]]]

=> Started proxy.
=> Started MongoDB.
=> Started app on Android Emulator.
=> Started your app.

=> App running at: http://localhost:3000/

此时,已经看到,我的meteor app运行在android模拟器上了!!

注意:

如果是64位的Ubuntu,Android SDK和模拟器需要32位的库,执行以下命令:
sudo apt-get update
sudo apt-get install --yes lib32z1 lib32stdc++6