Czy wtyczka phonegap powinna być zadeklarowana w konfiguracji.plik xml?

Jestem nowicjuszem w PhoneGap development, więc mam kilka pytań:

1) używam wtyczki akcelerometru. Przeczytałem w instrukcji, że muszę zadeklarować plugin w config.plik xml w celu jego użycia. Zauważyłem jednak, że nawet jeśli usunę deklarację z config.xml

<feature name="Accelerometer">
    <param name="android-package" value="org.apache.cordova.AccelListener" />
</feature>
Akcelerometr nadal działa.

Więc chciałbym zapytać, czy w wersji phonegap 3.0.0, korzystanie z config.xml jest przestarzały. Jeśli tak jest to gdzie czy Wiązanie ma miejsce?

2) używam Platformy android do budowy aplikacji. W strukturze projektu znajdują się trzy konfiguracje.pliki xml o różnej zawartości:

    A) w zasobach/www/phonegap-app-hello-world-3.0.0/www/config.xml
  • b) w assets/www/phonegap-app-hello-world-3.0.0 / config.xml
  • c) w res / xml / config.xml

Jaki jest pożytek z każdego z nich ? Gdzie mam zadeklarować moją wtyczkę? Zrobiłem to w plik res/xml/config / XML

Dziękuję

Author: bhdrk, 2013-10-01

5 answers

Jestem całkiem pewien, że powodem, dla którego można nadal korzystać z wtyczki jest ponieważ albo edytował źle config.xml lub nie uruchomić narzędzia wiersza poleceń cordova propagować swoje zmiany do właściwego config.xml plik, który jest rzeczywiście używany przez aplikację.

Istnieje wiele config.xml plików w różnych miejscach w Cordova 3.Projekt X. Postaram się dać ci przegląd różnych lokalizacji plików i jak powinieneś z nimi współdziałać. Należy pamiętać, że tak się dzieje, gdy używasz CLI (Command Line-interface) - wygenerowałem tę strukturę katalogów wpisując:

cordova create {MyApp}
cordova platform add android ios
cordova plugin add org.apache.cordova.network-information

Lub przed Cordova 3.1, zamień ostatni wiersz na:

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git

Jeśli używasz tylko skrypty powłoki poziomu platformy do budowania aplikacji ("stary" sposób, który zrobiliśmy w Cordova 2.X), można ogólnie używać tego samego przepływu pracy, ale trzeba używać Plugman do zarządzania wtyczek . (Jesteśmy w trakcie dokumentowania tych dwóch różnych "przepływów pracy".)

Pierwszy, gdy tworzysz aplikację za pomocą cordova create MyApp, utworzy ona pustą strukturę projektu w ten sposób:

/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

Powinieneś wprowadzić wszystkie zmiany w plikach w /www/, czyli kodzie źródłowym "cross platform". Cokolwiek znajduje się w tym folderze, zostanie skopiowane i propagowane do folderu www na poziomie platformy podczas korzystania z narzędzi wiersza poleceń (czy to /assets/www dla Androida, czy po prostu /www/ dla iOS). W ten sposób potrzebujesz tylko jednego folderu źródłowego dla swojej aplikacji - jest to folder, który powinieneś mieć pod kontrolą wersji. Wszelkie zmiany konfiguracyjne dla całej aplikacji, które chcesz, powinny zostać wprowadzone do pliku config.xml umieszczonego w tej lokalizacji; później, gdy użyjesz narzędzi, ten plik config.xml zostanie skopiowany (a czasami zmodyfikowany za pomocą informacji o konfiguracji specyficznej dla platformy) do odpowiedniego miejsca dla każdej aplikacji, jak /platforms/android/res/xml/config.xml (dla Androida) lub /platforms/ios/AppName/config.xml (dla iOS).

Powiedz, że chcesz dodać wtyczkę akceleracji, wpisując cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git. Jeśli chcesz uruchomić diff po tym poleceniu, zobaczysz następujące pliki zostały zmienione lub dodane:

Pluginy / org.Apacz.cordova.sieć-informacje / - Ten nowy folder zawiera wszystkie informacje meta plugin i kod, w tym WWW i Kod macierzysty, dla każdej obsługiwanej platformy

Pluginy / android.json i wtyczki / ios.json - Oba te pliki zostały teraz edytowane, aby zawierały odniesienie do wtyczki informacji o sieci. To tutaj zobaczysz Config-munge bit JSON. Jak dodać więcej wtyczek, ten plik będzie stale się rozwijał, aby odwoływać się do nich wszystkich. Ten plik mówi narzędziom wiersza poleceń, jaki kod musi zastąpić i w jakich plikach. Na przykład, po dodaniu wtyczki cordova-plugin-network-information, zobaczysz to w /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": {}
    }

To mówi skryptom, aby zapisać nazwę funkcji do res/xml/config.xml (ponownie, dla iOS, będzie to inne, ponieważ plik konfiguracyjny poziomu aplikacji jest w innej lokalizacji na iOS!), a także każe mu pisać Android.pozwolenie.ACCESS_NETWORK_STATE uprawnienia do AndroidManifest.xml (nie znajdziesz niczego takiego na iOS, ponieważ nie są wymagane żadne uprawnienia.) (Nawiasem mówiąc, to, co jest napisane do każdego z tych plików json jest zdefiniowany w wtyczce wtyczki.plik xml.)

Platformy / android / AndroidManifest.xml - Narzędzia CLI zadbały o dodanie dowolnych uprawnień zdefiniowanych w pliku XML wtyczki do AndoridManifest. Tak, to się dzieje, kiedy to robisz cordova plugin add. Te uprawnienia są kopiowane bezpośrednio z tego, co znajduje się w wtyczkach/android.plik json. Uprawnienia te są również usuwane, gdy " rm " wtyczki. Jednak edytowanie tych plików odbywa się inteligentnie, dzięki czemu można dodawać niestandardowe rzeczy do AndroidManifest.xml i będą trwać.

Platforms / android/assets/www / cordova_plugins.js - Ten plik jest zakopany w zasobach html, które składają się na ostateczną aplikację - zasoby te (prawie wszystko w /platforms/) nie powinny być edytowane przez Ciebie, ponieważ będą one zastępowane przez narzędzia CLI dość często. Ten plik jest używany przez Cordova w czasie wykonywania załadować kod plugin, który dodał; zajmuje się również mapowanie JavaScript przestrzeni nazw do rzeczywistych plików (jest to deklaracja" clobbers".) Np. widzę:

{
    "file": "plugins/org.apache.cordova.network-information/www/network.js",
    "id": "org.apache.cordova.network-information.network",
    "clobbers": [
        "navigator.connection",
        "navigator.network.connection"
    ]
}

Oznacza to, że w kodzie aplikacji, navigator.connection i navigator.network.connection będą odwzorowywać kod zawarty w plugins/org.apache.cordova.network-information/www/network.js.

Platforms / android / res / xml / config.xml - To jest konfiguracja na poziomie platformy.plik xml dla Androida. Ten plik jest tworzony przez narzędzia CLI. Wiele informacji, które piszesz w swoim najwyższym poziomie config.xml (/MyApp / www / config.xml) zostanie skopiowany tutaj, ale nie wszystkie (i jest kilka dodatkowych rzeczy, nie jestem dokładnie pewien, skąd dodatkowe rzeczy pochodzi.) Jest to plik, który jest odczytywany przez Androida podczas uruchamiania aplikacji i musi sprawdzić dane konfiguracji. Na przykład, Cordova Android kod użyje tego, aby zobaczyć, które wtyczki są zainstalowane i które natywne klasy mapują do których przestrzeni nazw. I think jedynym sposobem, aby to edytować, jest użycie folderu/ merges/, o którym wspomniałem powyżej.

Platforms / iOS / {AppName}.xcodeprojcj / projekt.pbxproj - IOS odpowiednik AndroidManifest.xml

Platforms / iOS / {AppName} / config.xml - To konfiguracja na poziomie platformy.plik xml dla systemu iOS. Zobacz, jak to jest w innym miejscu niż na Androidzie? (np. Nie w /res/xml / config.xml?) Ten plik jest automatycznie aktualizowany przez CLI i nie należy go dotykać.

Platformy / ios / www / cordova_plugins.js - Ten sam plik istnieje na Androidzie (ale w innej lokalizacji) i ma ten sam cel: aby pomóc Cordova załadować wtyczki w czasie wykonywania, gdy ktoś korzysta z aplikacji

Myślę, że to dość dużo opisuje wszystkie pliki i foldery, które są używane w projekcie cordova.

Mam nadzieję, że teraz widzisz, że powinien edytować tylko plik /www/config.xml. Ten plik będzie używany do konstruowania /platforms/android/res/xml/config.xml i /platforms/ios/{AppName}/config.xml, które są używane przez Cordova, gdy spakowana aplikacja jest uruchomiona. Części tego pliku będą używane do edycji AndroidManifest.xml i project.pliki pbxprojc (odpowiednio dla Androida i iOS.)

To wyjaśnia, dlaczego nadal można było używać akcelerometru w aplikacji nawet po usunięciu linii <feature name="Accelerometer"> - były one po prostu kopiowane do konfiguracji na poziomie platformy.xml z main app wide config.xml

Myślę, że jedyne, co pozostało do rozgryzienia, to jak możesz edytować pliki konfiguracyjne specyficzne dla platformy; na przykład, jak możesz edytować AndroidManifest.plik xml? Cóż, okazuje się, że możesz po prostu edytować plik /platforms/android/AndroidManifest.xml bezpośrednio - CLI jest wystarczająco inteligentny, aby nie usuwać dostosowań, gdy automatycznie dodaje lub usuwa uprawnienia wtyczki. Więc powiedzieć z jakiegoś powodu trzeba obsługiwać niższą wersję Androida niż to, co Cordova obsługuje, można po prostu Zmień obiekt, A będzie on trwał przez wywołania cordova plugin add|rm {id}.

Mam nadzieję, że to wszystko wyjaśni, nie krępuj się zadawać więcej pytań!

 124
Author: MBillau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-13 18:31:03

Od cordova 3.5 , możemy utrzymywać wtyczki w config.xml pliku

<feature name="Network Information">
    <param name="id" value="org.apache.cordova.network-information" />
    <param name="version" value="0.2.10" />
</feature>

Następujące polecenie pobierze wtyczki zdefiniowane w config.xml

cordova restore plugins --experimental

Następujące polecenie zapisze w config Twoje aktualnie zainstalowane wtyczki.xml (3.5):

cordova save plugins --experimental

W 5.x i później:

cordova plugin save

Źródło: http://cordova.apache.org/news/2014/07/10/tools-release.html

 22
Author: Florent Valdelievre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 05:56:00

Od Cordova 5.0, tak.

<?xml version='1.0' encoding='utf-8'?>
    ...
    <plugin name="cordova-plugin-console" spec="^1.0.0" />
    ...
</ xml>

Masowe zapisywanie wtyczek w istniejącym projekcie:

$ cordova plugin save

Na świeżej instalacji (lub po czystym) możesz dodać wszystkie wtyczki za pomocą:

$ cordova prepare

Dodawanie / aktualizowanie / usuwanie można również wykonać za pomocą cli:

$ cordova plugin add <plugin[@<version>] | directory | git_url> --save
$ cordova plugin update <plugin[@<version>] | directory | git_url> --save
$ cordova plugin remove <plugin> --save

Na razie nie ma masowej aktualizacji. Możesz usunąć katalog plugins, a następnie uruchomić $cordova prepare.

Źródła :

 8
Author: Cédric M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-18 13:56:17

Config.xml jest używany głównie przez PhoneGap build.

Jeśli używasz phonegap 3 powinieneś zarządzać wtyczkami za pomocą CLI:

$ phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git

Jedyny config.xml powinieneś edytować to / www / config.xml, pozostałe są automatycznie generowane z tego, gdy budujesz swój projekt za pomocą:

$ phonegap build ios
 5
Author: Sam Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-01 09:30:50

Możesz sprawdzić wtyczkę accelermator: Phonegap Acceleramator plugin .

Możesz również wyszukać tam dowolną wtyczkę, której potrzebujesz

 -2
Author: Hazem Hagrass,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-01 11:16:28