问题标签 [phonegap-cli]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - Phonegap CLI 从 SSH 会话运行,但不是从 bash 脚本运行
我正在设置 Ubuntu 14.04 服务器以使用 Phonegap CLI 自动构建混合 Android 应用程序。编写完所有相关脚本后,我遇到了一个相当奇怪的问题——当我通过 SSH 连接到我的服务器时,我可以运行脚本并在我的交互式 shell 会话中成功运行所有 Phonegap 命令。但是,每次尝试在由其他一些访问者生成的事件触发的自动化脚本中运行这些相同的命令都会失败。为了确定问题,我将其简化为一个简单的实验,我将在下面概述。
第 1 步 - 编写启动脚本,pgtest
在/etc/init.d
解释
- 我使用 NVM 来管理 Node,所以我确保系统知道在哪里可以找到 nvm.sh
- 我正在启动 NVM 以使用 Node + NPM 的稳定(4.1.1.)版本
- 我想确保我的批处理文件实际上正在执行,所以我这样做
ls /home
并将其输出通过管道传输到/tmp/ls
文件。 - 我想确保 node、git 和 phonegap 确实可用,所以我将输出从管道
which node|git|phonegap
传输到文件/tmp
夹中的文件。 - 使事情复杂化没什么意义,所以我发出最简单的 Phonegap 命令
phonegap -v
来报告当前版本号。执行此操作时可能发生的任何错误都将通过管道传输到文件/tmp/pgpe
中。
第 2 步 - 确保pgtest
最后运行
ln -s /etc/init.d/pgtest /etc/rc2.d/S04PGTest
说明- 我只希望在我的服务器上的所有其他内容有机会启动后运行此脚本
完成所有这些后,我通过服务器重新启动并检查了/tmp
文件夹的内容。我的发现
ls
/home
-存在且正确的文件夹的文件夹列表。node
,git
并pgp
指向 Node、Git 和 Phonegap 的位置pgpv
,应包含 Phonegap 版本号,为EMPTYpgpe
存在且不为空
这最后意味着系统在尝试执行时遇到了错误phonegap -v
。以下是 的内容pgpe
。
path.js:8
throw new TypeError('路径必须是字符串。接收到 ' +
^
TypeError:路径必须是字符串。收到未定义
在 assertPath (path.js:8:11)
在 Object.posix.join (path.js:477:5)
在对象。
(/root/.nvm/versions/node/v4.1.1/lib/node_modules/phonegap/node_modules/phonegap-build/lib/common/config/global.js:17:28)
在 Module._compile (module.js:434:26)
在 Object.Module._extensions..js (module.js:452:10)
在 Module.load (module.js:355:32)
在 Function.Module._load (module.js:310:12)
在 Module.require (module.js:365:17)
在需要(module.js:384:17)
在对象。(/root/.nvm/versions/node/v4.1.1/lib/node_modules/phonegap/node_modules/phonegap-build/lib/common/config.js:9:13)
现在这是奇怪的事情。如果我清除文件夹并在交互式 shell 会话中/tmp
发出 a ,我会得到以下结果/etc/init.d/pgtest
/tmp/ls
像以前一样显示并填充/home
文件夹列表/tmp/node
,/tmp/git
/tmp/pgp
呈现且正确/tmp/pgpv
报告5.3.6
- 当前的 Phonegap 版本号/tmp/pgpe
为EMPTY,即不报告错误
显然,交互式 bash shell 环境有一些在我运行自动化脚本时不存在的东西——在这种情况下是在启动时,但当我以任何其他方式通过自动化脚本触发进程时也会发生这种情况。
有了这一切,我越来越接近确定问题的原因。然而,我对这些系统如何工作的了解让我失望了。交互式 shell 环境与我的自动化脚本遇到的环境有什么区别?我该如何解释报告的错误/tmp/pgpe
?我该怎么做才能修复它们?
我将非常感谢任何能够让我在这里走上正轨的人。
根据@Eduardo 的建议进行编辑。我抓住了两组环境(交互式和 init.d)。可以在这个 fiddle中找到执行 DIFF(交互式 vs init.d)的结果。下面显示了一个不太容易访问的 DIFF 结果转储
--- /home/env.inter 2015-11-11 08:30:40.314172560 +0000 +++ /home/env.auto 2015-11-11 08:32:55.240906000 +0000 @@ -1,48 +1 ,38 @@ BASH=/bin/bash BASHOPTS=cmdhist:complete_fullquote:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() -BASH_ARGC=() -BASH_ARGV=() +BASH_ARGC=([ 0]="1") +BASH_ARGV=([0]="start") BASH_CMDS=() BASH_LINENO=([0]="0") -BASH_SOURCE=([0]="/etc/init.d/ pgtest") +BASH_SOURCE=([0]="/etc/rc2.d/S04pgtest") BASH_VERSINFO=([0]="4" 1="3" [2]="11" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") BASH_VERSION='4.3.11(1)-release ' DIRSTACK=() EUID=0 GROUPS=() -HOME=/root HOSTNAME=example.com HOSTTYPE=x86_64 IFS=$' \t\n' -LANG=en_US.UTF-8 -LESSCLOSE='/usr/bin /lesspipe %s %s' -LESSOPEN='| /usr/bin/lesspipe %s' -LOGNAME=root -LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do =01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30 ;42:ow=34;42:st=37;44:ex=01;32: .tar=01;31: .tgz=01;31: .arj=01;31: .taz=01;31: . lzh=01;31: .lzma=01;31:.tlz=01;31: .txz=01;31:.zip=01;31: .z=01;31:.Z=01;31: .dz =01;31: ..bz2=01;31: .bz=01;31: .tbz=01;31: .tbz2=01;31: .tz=01;31: .deb=01;31: .rpm=01;31: .罐子=01;31: .war=01;31:.ear=01;31: .sar=01;31:.rar=01; 31:.ace=01; 31:.zoo=01;31: .cpio =01;31:.7z=01;31: .rz=01;31:.jpg=01;35: .jpeg=01;35:.gif=01;35: .bmp=01;35:.pbm= 01;35: .pgm=01;35:.ppm=01;35: .tga=01;35:.xbm=01;35: .xpm=01;35:.tif=01;35: .tiff=01 ;35:.png=01;35: .svg=01;35:.svgz=01;35: .mng=01;35:.pcx=01;35: .mov=01;35:.mpg=01;35: .mpeg=01;35: .m2v=01;35: .mkv=01;35: .webm=01;35: .ogm=01;35: .mp4=01;35: . m4v=01;35:.mp4v=01;35: .vob=01;35:.qt=01;35: .nuv=01;35:.wmv=01;35: .asf=01;35:.rm =01;35: .rmvb=01;35:.flc=01;35: .avi=01;35:.fli=01;35: .flv=01;35:.gl=01;35: .dl= 01; 35:.xcf=01 ;35: .xwd=01;35:.yuv=01;35: .cgm=01;35:.emf=01;35: .axv=01;35:.anx=01 ;35: .ogv=01;35:.ogx=01;35: .aac=00;36:.au=00;36: .flac=00;36:.mid=00;36:.midi= 00;36: .mka=00;36: .mp3=00;36: .mpc=00;36: .ogg=00;36: .ra=00;36: .wav=00;36: . axa=00;36: .oga=00;36: .spx=00;36: .xspf=00;36:'MACHTYPE=x86_64-pc-linux-gnu -MAIL=/var/mail/root -NVM_DIR=/ root/.nvm -NVM_IOJS_ORG_MIRROR= https://iojs.org/dist -NVM_NODEJS_ORG_MIRROR= https://nodejs.org/dist -NVM_RC_VERSION= OPTERR=1 OPTIND=1 OSTYPE=linux-gnu -PATH=/opt/android/platform-tools:/opt/android/tools:/opt/android:/usr/local/sbin:/usr/local/ bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games +PATH=/sbin:/usr/sbin:/bin:/usr/bin PIPESTATUS=( [0]="0") -PPID=4801 +PPID=911 +PREVLEVEL=N PS4='+' -PWD=/etc/init.d +PWD=/ +RUNLEVEL=2 SHELL=/bin/bash SHELLOPTS=大括号扩展:hashall:interactive-comments -SHLVL=3 -SSH_CLIENT='nn.nn.nn.nn nnnn nnnn' -SSH_CONNECTION='nn.nn.nn.nn nnnn nn.nn.nn.nn nnnn' -SSH_TTY=/ dev/pts/0 -TERM=xterm +SHVLV=1 +TERM=linux UID=0 -USER=root -XDG_RUNTIME_DIR=/run/user/1000 -XDG_SESSION_ID=5 +UPSTART_EVENTS=运行级别 +UPSTART_INSTANCE= +UPSTART_JOB=rc _= n +上一个=N +运行级别=2
我在这里更改的唯一内容 - 屏蔽了主机名和 SSH 客户端 IP 地址。
我很确定在发布这个问题之前我已经在自己的实验中尝试过这个,但是按照下面@Eduardo的建议,我尝试坚持
在脚本的顶部 - 就在该source ~/.nvm...
行的下方。重新启动后结果仍然相同:一个空/tmp/pgpv
的和相同的错误报告在/tmp/pgpe
.
android - 如何使用 Phonegap 控制 [Android] 权限?
很抱歉这篇文章的长度。请继续阅读。
如何配置 phonegap 的项目文件,以便在没有任何权限的情况下生成 APK(phonegap platform add
或phonegap build
用于生成 APK 的中间文件),同时不/platform/android/
手动接触任何文件?
下面描述了我尝试过的内容。
我正在使用最新的 Phonegap,我正在尝试使用 CLI(所以,不是 Adobe 的构建服务)。我浏览了我可以在网上找到的所有内容(文档、论坛、这里),试图找到至少一些关于如何控制构建过程的提示,最好是通过配置(特别是对于 Android),以便/platforms/android/
(例如AndroidManifest.xml
)中的文件被组装我想要的方式。
例如,即使删除了所有插件(phonegap plugin remove [plugin name]
+ 手动删除了<plugin
元素 from /config.xml
,只产生一个空的 json 对象/plugins/fetch.json
),如果没有这 3 个,我将无法AndroidManifest.xml
创建:
我真的不想讨论为什么我要在不手动更改的情况下删除所有权限/platform/android/AndroidManifest.xml
。我以前使用过 Visual Studio Cordova 项目模板,并且能够完成这项工作(它有一个不同的文件合并/替换系统,相当于我试图在 Phonegap 方面发现的系统)。总的来说,Phonegap 和 Cordova 文档都非常自私/基本,IMO(但是,这是另一个话题)。
当然,我每次在配置更改尝试后都通过phonegap platform remove/add android
+删除/重新添加 android-platform(我在其中尝试过;我还尝试在文件夹树中找到一个位置来替换其中的那个),但没有任何效果。我一直在通过手动检查生成的任务来验证我的任务的成功/失败,并且-不开玩笑-通过发布-构建+签名+上传到我的Google帐户以获取他们对我的APK的报告(那是在我发现之前) .phonegap build android
/config.xml
AndroidManifest.xml
/platform/android
aapt d permissions "platforms\android\build\outputs\apk\android-debug.apk"
/platforms/android/AndroidManifest.xml
aapt.exe
如果有人可以分享一些链接、样本、书名或类似内容 - 我将不胜感激。
谢谢你。
android - 一个Android活动是否足以使用phonegap
我刚开始用 phonegap 开发移动应用程序。我想检查维护屏幕的最佳做法。是否可以只有一个活动并使用 html 导航屏幕。如果是这样,这是正确的做法吗?
此外,当我们需要在它们之上维护活动和相应的html时。
javascript - Phonegap:onDeviceReady 覆盖
我有一个为android构建的phonegap项目并使用cordova。我在这个 phonegap 项目中植入了一个基于 Web 的应用程序。这个应用程序有一个 html 页面,index.html。在此索引文件中,未调用 onDeviceReady() 函数。然而,这个页面工作完美,只是它是从 mainactivity 调用的,并且由于某种原因它没有进入这个函数。它可能被科尔多瓦函数覆盖。 问题:如何使这个函数在 index.html 文件中工作? 哪个函数覆盖/替换这个函数?
这里发生的是 onLoad 被调用,而 onDeviceReady永远不会被调用。
javascript - 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'http://localhost:4400'
XMLHttpRequest 无法加载http://localhost:5100/MYService.asmx/Myweb-Method。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://localhost:4400 ”。
我在科尔多瓦视觉工作室有问题。
我该怎么办请给我一些建议
javascript - $cordovaContacts 加载速度很慢
我正在尝试使用 $cordovaContacts 在 android 上获取联系人,当有 30-50 个联系人时,它会非常快地加载,但如果有超过 200-250 个联系人,它会非常慢。有时甚至 10-15 秒。
有任何想法吗?
android - 编译phonegap时出错
我正在尝试使用 Google Play,但我遇到了麻烦,已经在这里关注了所有 ta:http: //developer.android.com/tools/publishing/app-signing.html
但还是不会。在 Google Play 上发言:
Você enviou um APK não assinado。Crie um APK assinado
执行此命令的终端:
jarsigner -verify -verbose -certs android-debug-unaligned.apk
出现消息:
jar 验证。
警告:此 jar 包含未验证证书链的条目。此 jar 包含不包含时间戳的签名。如果没有时间戳,用户可能无法在签名者证书的到期日期 (2046-01-20) 或任何未来的撤销日期之后验证此 jar。
javascript - PhoneGap - navigator.app.exitApp() 不工作
我正在使用 Phonegap 制作一个小型应用程序,但navigator.app.exitApp()?
根本无法正常工作。
- 这是我的第一个混合应用程序。
- 我的目标平台是 Android 5
- 我正在使用 Cordova CLI 在 Windows 上进行开发。
我用这个调用一个 JavaScript 函数
JavaScript:
想法??
cordova - 无法使用 npm 安装插件
我正在使用 Phonegap/Cordova 5.4.1 版开发一个项目。
我已经创建了一个名为“UnishKuri”的项目。现在我想添加一些插件,例如:Camera、Splash Screens。
我使用的命令如下:
但我收到消息错误
我确实有适当的互联网连接。请帮帮我。提前非常感谢。