問題タブ [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 スクリプトからは実行されません
Phonegap CLI を使用してハイブリッド Android アプリのビルドを自動化するために、Ubuntu 14.04 サーバーをセットアップ中です。関連するすべてのスクリプトを作成した後、かなり奇妙な問題に遭遇しました。サーバーに SSH で接続すると、対話型シェル セッションでスクリプトを実行し、すべての Phonegap コマンドを正常に実行できます。ただし、他の (訪問者が生成した) イベントによってトリガーされる自動化されたスクリプトで同じコマンドを実行しようとすると、すべて失敗します。問題を特定するために、以下に概説する簡単な実験に絞り込みました。
ステップ 1 - 起動スクリプトを作成pgtest
します。/etc/init.d
説明
- NVM を使用して Node を管理しているため、システムが nvm.sh の場所を認識していることを確認しています。
- ノード+ NPMの安定版(4.1.1)を使用するためにNVMを起動しています
- バッチファイルが実際に実行されていることを確認したいので、
ls /home
その出力をファイルにパイプし/tmp/ls
ます。 - node、git、phonegap が実際に利用可能であることを確認したいので、出力をフォルダー内
which node|git|phonegap
のファイルにパイプし/tmp
ます。 phonegap -v
物事を複雑にすることはほとんど意味がないので、現在のバージョン番号を報告するために、最も単純な Phonegap コマンドを発行しています。これを行うときに発生する可能性のあるエラーは、ファイルにパイプされています/tmp/pgpe
。
ステップ 2 -pgtest
最後に
ln -s /etc/init.d/pgtest /etc/rc2.d/S04PGTestが実行されていることを確認します
説明- サーバー上の他のすべてが起動する機会があった後にのみ、このスクリプトを実行したい
これらすべてが整った状態で、サーバーで再起動し、/tmp
フォルダーの内容を調べました。私の発見
ls
/home
-存在する正しいフォルダのフォルダ リスト。node
、Node、Git、およびPhonegapの場所を指しgit
ますpgp
pgpv
、Phonegap のバージョン番号を含む必要がありますが、EMPTYです。pgpe
存在し、空ではない
最後の は、システムが を実行しようとしたときにエラーが発生したことを意味します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)
さて、ここに興味深いことがあります。/tmp
フォルダをクリアして/etc/init.d/pgtest
インタラクティブ シェル セッションで a を発行すると、次の結果が得られます。
/tmp/ls
/home
前と同じようにフォルダ リストが存在し、取り込まれます/tmp/node
、/tmp/git
/tmp/pgp
現在および正しい/tmp/pgpv
reports5.3.6
- 現在の Phonegap のバージョン番号/tmp/pgpe
EMPTYです。つまり、エラーは報告されません
明らかに、インタラクティブな bash シェル環境には、自動化されたスクリプトを実行したときに存在しないものがあります。この場合は起動時に発生しますが、他の方法で自動化されたスクリプトを介してプロセスをトリガーすると発生します。
このすべてで、私は問題の原因を突き止めることに近づいています. しかし、これらのシステムがどのように機能するかについての私の知識は、私をがっかりさせています。インタラクティブなシェル環境と、自動化されたスクリプトが遭遇する環境との違いは何ですか? で報告されたエラーをどのように解釈すればよい/tmp/pgpe
ですか? それらを修正するにはどうすればよいですか?
ここで私を正しい軌道に乗せることができる人には、非常に感謝しています。
@Eduardo の提案に照らして編集します。2 つの環境セット (interactive と init.d) を取得しました。DIFF (interactive vs init.d) を実行した結果は、この fiddleにあります。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]="開始") 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]="リリース" [5]="x86_64-pc-linux-gnu") BASH_VERSION='4.3.11(1)-リリース' 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: . jar=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=ブレースエキスパンド:ハッシュ:インタラクティブコメント -SSHLVL=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 +SHLVL=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] パーミッションを制御するには?
長々とすみません。読み進めてください。
手動でファイルに触れずに、アクセス許可なしで APK (または APK の生成に使用される中間ファイル) を生成するphonegap platform add
ように phonegap のプロジェクト ファイルを構成するにはどうすればよいですか?phonegap build
/platform/android/
以下、私が試したことを説明します。
私は最新の Phonegap を使用しており、CLI を使用しようとしています (したがって、Adobe のビルド サービスではありません)。/platforms/android/
オンラインで見つけることができるすべての情報 (ドキュメント、フォーラム、こちら) を調べて、できれば構成(特に Android の場合) を介して、ビルド プロセスを制御する方法について少なくともいくつかのヒントを見つけようとしましAndroidManifest.xml
た。私が望む方法。
たとえば、すべてのプラグインを削除しても ( phonegap plugin remove [plugin name]
+<plugin
から要素を手動で削除/config.xml
したため、 には空の json オブジェクトしかありません)、次の 3 つがないと作成/plugins/fetch.json
できません。AndroidManifest.xml
手動で変更せずにすべてのアクセス許可を削除しようとしている理由についての議論には入りたくありません/platform/android/AndroidManifest.xml
。以前は Visual Studio Cordova プロジェクト テンプレートを使用していましたが、これを機能させることができました (別のファイル マージ/置換システムがあり、Phonegap 側で発見しようとしているものと同等です)。一般に、Phonegap と Cordova のドキュメントはどちらも非常に利己的/基本的であり、IMO です (ただし、それは別のトピックです)。
もちろん、構成の変更を試みるたびにphonegap platform remove/add android
+経由で android-platform を削除/再追加してきました (これは 内で試しました; また、フォルダー ツリー内の場所を置き換えて配置する場所を見つけようとしました)。しかし、何も機能しませんでした。を介して、および生成された を手動でチェックすることにより、ミッションの成功/失敗を検証してきました。冗談ではありませんが、APK のレポートのために、リリースビルド + 署名 + Google アカウントへのアップロードによって (それは私が発見する前でした) 。 .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 - phonegap で十分な 1 つの Android アクティビティ
phonegapでモバイルアプリの開発を始めたばかりです。画面メンテナンスのベストプラクティスを確認したい。アクティビティを 1 つだけにして、HTML を使用して画面をナビゲートすることは可能ですか。もしそうなら、それは正しい練習ですか?
また、アクティビティとそれに対応する html を維持する必要がある場合。
javascript - 要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン「http://localhost:4400」へのアクセスは許可されていません
XMLHttpRequest はhttp://localhost:5100/MYService.asmx/Myweb-Method を読み込めません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン「http://localhost:4400」へのアクセスは許可されていません。
コルドバ ビジュアル スタジオに問題があります。
私は何をすべきか私にいくつかの提案をお願いします
android - phonegap のコンパイル中にエラーが発生しました
私は Google Play にアクセスしようとしていますが、問題が発生しています。
しかし、それでもしません。Google Play で話す:
Você environmentou um APK não assinado. Crie um APK assinado
このコマンドを実行する端末:
jarsigner -verify -verbose -certs android-debug-unaligned.apk
メッセージが表示されます:
ジャーが確認されました。
警告: この jar には、証明書チェーンが検証されていないエントリが含まれています。この jar には、タイムスタンプを含まない署名が含まれています。タイムスタンプがないと、ユーザーは、署名者証明書の有効期限 (2046-01-20) または将来の失効日の後、この jar を検証できない可能性があります。
cordova - npm を使用してプラグインをインストールできない
Phonegap/Cordova バージョン 5.4.1 を使用してプロジェクトを開発しています。
「UnisKuri」という名前のプロジェクトをすでに作成しています。次に、カメラ、スプラッシュ スクリーンなどのプラグインを追加します。
私が使用したコマンドは次のとおりです。
しかし、私はメッセージでエラーが発生しています
私は適切なインターネット接続を持っています。私を助けてください。よろしくお願いします。