プラグインを引き続き使用できる理由は、間違って編集したか、アプリで実際に使用されるconfig.xml
正しいファイルに変更を反映するために cordova コマンド ライン ツールを実行しなかったためだと確信しています。config.xml
config.xml
Cordova 3.x プロジェクトの異なる場所に複数のファイルがあります。ファイルのさまざまな場所と、それらを操作する方法の概要を説明します。これは、CLI ( Command Line-interface )を使用したときに発生することに注意してください。次のように入力して、このディレクトリ構造を生成しました。
cordova create {MyApp}
cordova platform add android ios
cordova plugin add org.apache.cordova.network-information
または、Cordova 3.1 より前の場合は、最後の行を次のように置き換えます。
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
プラットフォーム レベルのシェル スクリプトのみを使用してアプリをビルドする場合 (Cordova 2.X で行った "古い" 方法)、通常は同じワークフローを使用できますが、Plugman を使用してプラグインを管理する必要があります。(これら 2 つの異なる「ワークフロー」を文書化する過程にあります。)
まず、 でアプリを作成すると、次のcordova create MyApp
ような空のプロジェクト構造が作成されます。
/myApp/
/www/ # This is where your "cross-platform' files go.
# The build tools copy these files over to the correct
# asset folder for each platform, like /assets/www/ for
# android or just /www/ for iOs. This is where you should
# be doing most/all of your work and is what should
# probably be version controlled.
/platforms/
/android/ # These will only appear after `cordova platform add`
/ios/ # You should generally not touch these file as they are
# recreated quite often, although changes will persist.
/plugins/
/android/ # These will only appear after `cordova plugin add`. They
# pretty much just contain the native and web plugin code
# for all platforms that a plugin supports.
/ios/
/merges/ # This is where you can place platform-specific code that
# you write that will get merged in with your cross
# platform source, see the "customize each platform"
# section of: http://cordova.apache.org/docs/en/3.0.0/guide_cli_index.md.html
/www/
「クロス プラットフォーム」ソース コードである 内のファイルにすべての変更を加える必要があります。通常、このフォルダーにあるものはすべてwww
、コマンド ライン ツール ( /assets/www
Android 用か/www/
iOS 用かに関係なく) を使用すると、プラットフォーム レベルのフォルダーにコピーされて伝達されます。このように、アプリに必要なソース フォルダーは 1 つだけです。これは、バージョン管理下に置く必要があるフォルダーです。必要なアプリ全体の構成変更はconfig.xml
、この場所に配置されたファイルに対して行う必要があります。後でツールを使用するときに、このファイルは(Android の場合) や(iOS の場合) などconfig.xml
、各アプリの適切な場所にコピーされます (プラットフォーム固有の構成情報で変更されることもあります)。/platforms/android/res/xml/config.xml
/platforms/ios/AppName/config.xml
と入力してアクセラレーション プラグインを追加するとしますcordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
。このコマンドの後に diff を実行すると、次のファイルが変更または追加されていることがわかります。
plugins/org.apache.cordova.network-information/
- この新しいフォルダーには、サポートされている各プラットフォームのプラグイン メタ情報とコード (Web コードとネイティブ コードを含む) がすべて含まれています。
plugins/android.json および plugins/ios.json
- これらのファイルは両方とも、ネットワーク情報プラグインへの参照を含むように編集されています。これは、JSON の config-munge ビットが表示される場所です。プラグインを追加すると、このファイルは継続的に拡張され、すべてのプラグインを参照します。このファイルは、コマンド ライン ツールに、どのコードを置き換える必要があるか、どのファイルに含まれているかを伝えます。たとえば、cordova-plugin-network-information プラグインを追加すると、次のように表示され/plugins/android.json
ます。
{
"prepare_queue": {
"installed": [],
"uninstalled": []
},
"config_munge": {
"res/xml/config.xml": {
"/*": {
"<feature name=\"NetworkStatus\"><param name=\"android-package\" value=\"org.apache.cordova.networkinformation.NetworkManager\" /></feature>": 1
}
},
"AndroidManifest.xml": {
"/*": {
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />": 1
}
}
},
"installed_plugins": {
"org.apache.cordova.network-information": {
"PACKAGE_NAME": "io.cordova.hellocordova"
}
},
"dependent_plugins": {}
}
これはスクリプトに機能名を書き込むように指示しres/xml/config.xml
(iOS の場合、アプリ レベルの構成ファイルは iOS の別の場所にあるため、これは異なります!)、またandroid.permission.ACCESS_NETWORK_STATE権限を書き込むように指示します。 AndroidManifest.xml (iOS では権限が必要ないため、このようなものはありません。) (ちなみに、これらの json ファイルのそれぞれに何が書き込まれるかは、プラグインの plugin.xml ファイルで定義されています。)
platform/android/AndroidManifest.xml
- CLI ツールは、プラグインの xml ファイルで定義されたパーミッションを AndoridManifest に追加する処理を行いました。はい、これはあなたがするときに起こりますcordova plugin add
。これらのアクセス許可は、plugins/android.json ファイルにあるものから直接コピーされます。これらの権限は、プラグインを「rm」すると削除されます。ただし、これらのファイルの編集はインテリジェントに行われ、カスタムのものを AndroidManifest.xml に追加でき、永続化されます。
platform/android/assets/www/cordova_plugins.js
- このファイルは、最終的なアプリを構成する html リソース内に埋め込まれています - これらのリソース (/platforms/ 内のほとんどすべて) は置き換えられるため、編集しないでください。 CLI ツールによって頻繁に使用されます。このファイルは、追加したプラグイン コードをロードするために実行時に Cordova によって使用されます。また、JavaScript 名前空間を実際のファイルにマッピングする処理も行います (これが「clobbers」宣言です)。たとえば、次のようになります。
{
"file": "plugins/org.apache.cordova.network-information/www/network.js",
"id": "org.apache.cordova.network-information.network",
"clobbers": [
"navigator.connection",
"navigator.network.connection"
]
}
これは、アプリ コード内でnavigator.connection
、 とnavigator.network.connection
の両方が に含まれるコードにマップされることを意味しますplugins/org.apache.cordova.network-information/www/network.js
。
platform/android/res/xml/config.xml
- Android 用のプラットフォーム レベルの config.xml ファイルです。このファイルは、CLI ツールによって作成されます。最上位の config.xml (/MyApp/www/config.xml) に記述した多くの情報がここにコピーされますが、すべてではありません (いくつかの追加情報があり、どこにあるのか正確にはわかりません)追加のものはから来ます。) これは、Android がアプリを実行しているときに読み取られるファイルであり、構成データを確認する必要があります。たとえば、Cordova Android コードはこれを使用して、どのプラグインがインストールされているか、どのネイティブ クラスがどの名前空間にマップされているかを確認します。これを編集できる唯一の方法は、前述の /merges/ フォルダーを使用することだと思います。
platform/ios/{AppName}.xcodeprojcj/project.pbxproj
- AndroidManifest.xml に相当する iOS
platform/ios/{AppName}/config.xml
- これは、iOS 用のプラットフォーム レベルの config.xml ファイルです。Android とは別の場所にあることがわかりますか? (たとえば、/res/xml/config.xml にありませんか?) このファイルは CLI によって自動的に更新されるため、触れないでください。
platform/ios/www/cordova_plugins.js
- 同じファイルが Android に存在し (ただし別の場所にあります)、目的は同じです: 誰かがアプリを使用しているときに実行時に Cordova がプラグインをロードできるようにするためです。
これは、cordova プロジェクトで使用されるすべてのファイルとフォルダーをほぼ説明していると思います。
うまくいけば、実際にはファイルの編集のみを行うべきであることがわかり/www/config.xml
ます。このファイルは、パッケージ化されたアプリの実行時に Cordova によって使用される/platforms/android/res/xml/config.xml
およびを構築するために使用されます。/platforms/ios/{AppName}/config.xml
このファイルの一部は、AndroidManifest.xml および project.pbxprojc ファイル (それぞれ Android および iOS 用) の編集に使用されます。
これは、行を削除した後でもアプリで加速度計を使用できた理由を説明しています。<feature name="Accelerometer">
行は、メイン アプリ全体の config.xml からプラットフォーム レベルの config.xml に再コピーされているだけです。
把握しなければならない唯一のことは、プラットフォーム固有の構成ファイルを編集する方法だと思います。たとえば、AndroidManifest.xml ファイルをどのように編集できますか? ファイルを直接編集するだけでよいことがわかり/platforms/android/AndroidManifest.xml
ました。CLI は、プラグインのアクセス許可を自動的に追加または削除するときにカスタマイズを消去しないほどスマートです。なんらかの理由で、Cordova がサポートするバージョンよりも低いバージョンの Android をサポートする必要があるとします。オブジェクトを変更するだけで、cordova plugin add|rm {id}
呼び出し後も保持されます。
以上でご不明な点がございましたら、お気軽にお問い合わせください。