无法从命令行构建 Phonegap 项目

Posted

技术标签:

【中文标题】无法从命令行构建 Phonegap 项目【英文标题】:Cannot build Phonegap project from command line 【发布时间】:2013-11-26 12:11:14 【问题描述】:

我已经构建了一个 Phonegap 应用程序,现在正在尝试将它与 Phonegap Build 集成。我正在遵循非常简单的指南here。

所以我在做:

sudo npm install -g phonegap
sudo phonegap create hello com.example.hello HelloWorld
cd hello

sudo phonegap local build android

最后一条命令导致错误:

The command `android` failed. Make sure you have the latest Android SDK installed, and the `android` command (inside the tools/ folder) added to your path. Output: /bin/sh: 1: android: not found

然后我做了:

which android

结果:

/home/mark/Development/adt-bundle-linux-x86_64-20130522/sdk/tools/android

这是正确的路径。

phonegap 版本为 3.1.0-0.15.0。

知道为什么我会收到此错误吗?

编辑 如果我跑:

sudo phonegap local build /home/mark/Development/adt-bundle-linux-x86_64-20130522/sdk/tools/android 

我又遇到一个错误:

/usr/local/lib/node_modules/phonegap/lib/phonegap/local.build.js:141
    platformPath = path.join('.', 'platforms', platform.local);
                                                       ^
TypeError: Cannot read property 'local' of undefined
at LocalBuildCommand.module.exports.addPlatform (/usr/local/lib/node_modules/phonegap/lib/phonegap/local.build.js:141:60)
at LocalBuildCommand.execute (/usr/local/lib/node_modules/phonegap/lib/phonegap/local.build.js:95:32)
at LocalBuildCommand.run (/usr/local/lib/node_modules/phonegap/lib/phonegap/local.build.js:70:10)
at Object.build (/usr/local/lib/node_modules/phonegap/lib/phonegap/util/command.js:28:25)
at CLI.module.exports (/usr/local/lib/node_modules/phonegap/lib/cli/local.build.js:34:20)
at CLI.module.exports [as argv] (/usr/local/lib/node_modules/phonegap/lib/cli/argv.js:66:17)
at Object.<anonymous> (/usr/local/lib/node_modules/phonegap/bin/phonegap.js:24:21)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:349:32)

【问题讨论】:

在命令行输入“android”会得到什么? 它会调出 android sdk manager... Ant 安装和配置了吗? 我刚刚运行了 ant -v,它显示“Apache Ant(TM) 版本 1.8.2 于 2011 年 12 月 3 日编译 尝试使用默认构建文件:build.xml 构建文件:build.xml 不存在!构建失败” 所以是的,ant 也可以正常工作。有什么想法吗? 【参考方案1】:

更高版本的 android sdk 将 adb 移至平台工具。尝试在您的路径中包含工具和平台工具。见

~/Tools/adt-bundle-linux-x86_64-20131030/sdk $ cat tools/adb_has_moved.txt adb 工具已移至 platform-tools/

如果您在 SDK 中没有看到此目录,请启动 SDK 和 AVD Manager(执行android工具)并安装“Android SDK 平台工具”

请同时更新您的 PATH 环境变量以包含 platform-tools/ 目录,因此您可以从任何位置执行 adb。

我使用以下导出命令。

export ANDROID_BUNDLE_HOME="$ATILLA_TOOLS/adt-bundle-linux-x86_64-20131030"
export ANDROID_SDK_HOME="$ANDROID_BUNDLE_HOME/sdk"
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

export PATH=$PATH:$ANDROID_SDK_HOME/tools
export PATH=$PATH:$ANDROID_SDK_HOME/platform-tools

adb 和 android 都应该在命令行中工作。也尝试使用

phonegap local build android

没有 sudo。

看下面的例子

 $phonegap create deneme1 
[phonegap] created project at /home/atilla/Projects/Denemeler/a/deneme1 
 $cd deneme1/ 
 $phonegap local build android
[phonegap] adding the Android platform... 
[phonegap] compiling
Android... [phonegap] successfully compiled Android app

在此成功消息后尝试找到您的平台和 apk 文件。

 $ls -al platforms/ 
 $ls -al platforms/android/ 
 $ls -al platforms/android/bin

您应该会在此目录中看到 HelloWorld-debug.apk。

-rw-r--r-- 1 atilla atilla 1542462 Ara 5 14:31 HelloWorld-debug.apk

【讨论】:

【参考方案2】:

用sudo安装phonegap npm全局包,就OK了。 但是你应该用你自己的用户运行 phonegap

sudo npm install -g phonegap
phonegap create hello com.example.hello HelloWorld
phonegap local build android

使用 sudo 执行您将切换到 root 用户,因此 $PATH 的环境变量不一定相同。

【讨论】:

【参考方案3】:

尝试将您的 Android 路径添加到您的 PATH 环境变量中。

如果您使用 Linux,请先尝试:

echo $PATH

此命令显示您的 PATH 变量,在此搜索 Android 路径。 如果您没有看到 android 路径,则需要将该路径添加到您的环境变量中。 试试这个:

echo 'export PATH=$PATH:/home/user/mis_prog' >> /home/user/.bashrc

您必须编辑登录 shell 的配置文件。 通常 BASH shell 是最常用的,您必须编辑您的 /home/user/.bashrc。

为此,您将使用文本编辑器或仅使用命令来简化任务。

如果您使用某些 Windows 版本,您可以从系统属性中编辑环境变量 PATH,如下所示:http://www.computerhope.com/issues/ch000549.htm

【讨论】:

android 路径已经到了 PATH。当我从任何地方运行“android”时,它会打开 SDK 管理器..

以上是关于无法从命令行构建 Phonegap 项目的主要内容,如果未能解决你的问题,请参考以下文章

从命令行构建 Eclipse Makefile 项目

无法构建或编译 phonegap 2.1

无法使用 SQLite.swift 构建命令行项目

从命令行构建一个VS2003项目而不输出警告

从命令行构建多个 CDT C++ 项目

从命令行仅在解决方案中构建一个项目