私は Cordova を初めて使用し、アプリに Android プラットフォームを追加しようとしていますが、失敗します:
$ cordova create myapp com.example.asd myapp
Creating a new cordova project with name "myapp" and id "com.example.asd" at location "/home/user/Scaricati/android/eclipse/alternativeworkspace/myapp"
$ cd myapp
$ cordova platform add android
Checking Android requirements...
Creating android project...
Preparing android project
{ [Error: ENOENT, no such file or directory '/home/user/Scaricati/android/eclipse/alternativeworkspace/myapp/platforms/android/src/com/example/asd']
errno: 34,
code: 'ENOENT',
path: '/home/user/Scaricati/android/eclipse/alternativeworkspace/myapp/platforms/android/src/com/example/asd',
syscall: 'readdir' }
無効なパスに到達しようとします。この問題を調査しようとしたところ、src ディレクトリでパッケージ名が正しく処理されていないことがわかりました。
$ ls platforms/android/src
comundefinedexampleundefinedasd
ご覧のとおり、ドット (".") は "未定義" に置き換えられています。ちなみに、ディレクトリの名前を変更するだけでは問題は解決しませんでした。
奇妙なことに、cordova は他の場所で package-name を正常に処理します。
$ grep -ri com.example.asd .
./www/config.xml:<widget id="com.example.asd" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
./platforms/android/res/xml/config.xml:<widget id="com.example.asd" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
./platforms/android/AndroidManifest.xml:<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" android:windowSoftInputMode="adjustPan" package="com.example.asd" xmlns:android="http://schemas.android.com/apk/res/android">
./platforms/android/assets/www/config.xml:<widget id="com.example.asd" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
./platforms/android/src/comundefinedexampleundefinedasd/myapp.java:package com.example.asd;
./.cordova/config.json:{"id":"com.example.asd","name":"myapp"}
私のコルドバのバージョンは
$ cordova --v
3.1.0-0.2.0
この問題は、「cli 以外の」Cordova にも影響します (Eclipse で動作するようにしました)。
この問題を修正する方法がわからないが、「cordova create」ソースを確認できる場所を知っている場合は、投稿してください。自分で簡単な修正を開発しようとします。よろしくお願いします。
* 編集 *
このスレッドで解決策を探している人のために、私は自分自身に返信しています。手動でソースを編集しましたが、バグを取り除いたと思います。
128行目 ~/.cordova/lib/android/cordova/3.1.0/bin/lib/create.js
var package_as_path = package_name.replace(/\./g, path.sep);
path.sep は未定義です。OSのパスsep( "/")に置き換えました
var package_as_path = package_name.replace(/\./g, '/');
現在は正常に動作しているようです。