Debe declararse un plugin phonegap en la configuración.archivo xml?


Soy un novato en el desarrollo de phonegap, así que tengo un par de preguntas:

1) Estoy usando el acelerómetro plug-in. Leí en el manual que necesito declarar el plugin en la configuración.archivo xml para usarlo. Sin embargo me di cuenta de que incluso si elimino la declaración de la configuración.xml

<feature name="Accelerometer">
    <param name="android-package" value="org.apache.cordova.AccelListener" />
</feature>

El acelerómetro todavía funciona.

Así que me gustaría preguntarle si en la versión phonegap 3.0.0 , el uso de la configuración.xml está obsoleto. Si ese es el caso, entonces donde ¿se realiza la encuadernación?

2) Uso la plataforma Android para crear la aplicación. En la estructura del proyecto hay tres config.archivos xml con contenido diferente:

  • a) En el assets/www/phonegap-app-hello-world-3.0.0/www/config.xml
  • b) En el assets/www/phonegap-app-hello-world-3.0.0/config.xml
  • c) En res/xml/config.xml

¿De qué sirve cada uno de ellos ? ¿Dónde se supone que debo declarar mi plug in? Lo hice en el res/xml/config / xml file

Gracias

Author: bhdrk, 2013-10-01

5 answers

Estoy bastante seguro de que la razón por la que aún puede usar el plugin es porque editó el config.xml incorrecto o no ejecutó las herramientas de línea de comandos de Cordova para propagar sus cambios al archivo config.xml correcto que es realmente utilizado por la aplicación.

Hay múltiples archivos config.xml en diferentes puntos en un Cordova 3.proyecto x. Voy a tratar de darle una visión general de las diferentes ubicaciones de los archivos y cómo debe interactuar con ellos. Tenga en cuenta que esto es lo que sucede cuando usa the CLI ( Command Line-interface ) - Generé esta estructura de directorios escribiendo:

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

O antes de Cordova 3.1, sustitúyase la última línea por:

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

Si utiliza solo los scripts de shell a nivel de plataforma para construir la aplicación (la forma "antigua" que hicimos en Cordova 2.X), generalmente puede usar el mismo flujo de trabajo, pero necesitará Usar Plugman para Administrar Complementos. (Estamos en el proceso de documentar estos dos "flujos de trabajo" diferentes.)

Primero, cuando si creas una aplicación con cordova create MyApp, creará una estructura de proyecto vacía como esta:

/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

Debe realizar todos los cambios en los archivos en /www/, que es el código fuente "multiplataforma". Lo que esté en esta carpeta generalmente se copiará y propagará a la carpeta de nivel de plataforma www cuando use las herramientas de línea de comandos (ya sea /assets/www para Android o simplemente /www/ para iOS). De esta manera, solo necesita una sola carpeta de origen para su aplicación, esta es la carpeta que debe tener bajo control de versiones. Cualquier cambio de configuración de toda la aplicación que desee debe hacerse en el archivo config.xml ubicado en esta ubicación; más tarde, cuando use las herramientas, este archivo config.xml se copiará (y a veces se modificará con información de configuración específica de la plataforma) en el lugar apropiado para cada aplicación, como /platforms/android/res/xml/config.xml (para android) o /platforms/ios/AppName/config.xml (para iOS).

Supongamos que desea agregar el complemento de aceleración escribiendo cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git. Si fuera a ejecutar un diff después de este comando, verá lo siguiente los archivos han sido cambiados o añadidos:

Plugins / org.apache.cordova.network-information / - Esta nueva carpeta contiene toda la información meta plugin y el código, incluyendo web y código nativo, para cada plataforma soportada

Plugins / android.json y plugins / ios.json - Ambos archivos han sido editados ahora para contener una referencia al plugin network-information. Aquí es donde verá la parte config-munge de JSON. A medida que agrega más complementos, este archivo crecerá continuamente para hacer referencia a todos ellos. Este archivo le dice a las herramientas de línea de comandos qué código necesita reemplazar y en qué archivos. Por ejemplo, después de agregar el plugin cordova-plugin-network-information, verá esto en /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": {}
    }

Esto le dice a los scripts que escriban el nombre de la característica en res/xml/config.xml (de nuevo, para iOS, esto será diferente, ya que el archivo de configuración de nivel de aplicación está en una ubicación diferente en iOS!), y también le dice que escriba androide.permiso.ACCESS_NETWORK_STATE permiso en AndroidManifest.xml (no encontrará nada como esto en iOS ya que no se necesitan permisos.) (Por cierto, lo que se escribe en cada uno de estos archivos json se define en el plugin del plugin.archivo xml.)

Plataformas / android / AndroidManifest.xml - Las herramientas CLI se encargaron de añadir cualquier permiso definido en el archivo xml del plugin a AndoridManifest. Sí, esto sucede cuando lo haces cordova plugin add. Estos los permisos se copian directamente de lo que está en los plugins / android.archivo json. Estos permisos también se eliminan cuando 'rm' un plugin. Sin embargo, la edición de estos archivos se realiza de forma inteligente, ya que puede agregar cosas personalizadas a AndroidManifest.xml y persistirán.

Plataformas / android / assets/www / cordova_plugins.js - Este archivo está enterrado dentro de los recursos html que conformarán su aplicación final-estos recursos (casi cualquier cosa en /platforms/) no deben ser editados por usted porque serán reemplazados por las herramientas CLI con bastante frecuencia. Este archivo es utilizado por Cordova en tiempo de ejecución para cargar el código del plugin que ha añadido; también se encarga de asignar los espacios de nombres JavaScript a los archivos reales (esta es la declaración "clobbers".) Por ejemplo, veo:

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

Esto significa que en el código de tu app, navigator.connection y navigator.network.connection se asignarán al código contenido en plugins/org.apache.cordova.network-information/www/network.js.

Plataformas / android / res / xml / config.xml - Este es el configuración a nivel de plataforma.archivo xml para Android. Este archivo es creado por las herramientas CLI. Mucha de la información que escribes en tu configuración de nivel superior.xml (/MyApp / www / config.xml) se copiarán aquí, pero no todo (y hay algunas cosas adicionales, no estoy exactamente seguro de dónde vienen las cosas adicionales.) Este es el archivo que se lee por Android cuando se está ejecutando su aplicación y que necesita para comprobar sus datos de configuración. Por ejemplo, Cordova Android code utilizará esto para ver qué plugins se instalan y qué clases nativas se asignan a qué espacios de nombres. Yo creo que la única forma de editar esto es usando la carpeta /merges/ que mencioné anteriormente.

Plataformas / ios / {AppName}.xcodeprojcj / project.pbxproj - El equivalente iOS de AndroidManifest.xml

Plataformas / ios / {AppName} / config.xml - Esta es la configuración a nivel de plataforma.archivo xml para iOS. Ver cómo es en un lugar diferente que en Android? (por ejemplo, no en / res / xml / config.xml?) Este archivo se actualiza automáticamente por la CLI y no debe tocarlo.

Plataformas / ios / www / cordova_plugins.js - El mismo archivo existe en Android (pero en una ubicación diferente) y tiene el mismo propósito: para ayudar a Cordova cargar sus plugins en tiempo de ejecución cuando alguien está utilizando la aplicación

Creo que básicamente describe todos los archivos y carpetas que se utilizan en un proyecto Cordova.

Espero que ahora puedas ver que de hecho, solo debería estar editando el archivo /www/config.xml. Este archivo se utilizará para construir el /platforms/android/res/xml/config.xml y /platforms/ios/{AppName}/config.xml, que son utilizados por Cordova cuando la aplicación empaquetada se está ejecutando. Partes de este archivo se utilizarán para editar el AndroidManifest.xml y proyecto.archivos pbxprojc (para Android e iOS, respectivamente.)

Esto explica por qué aún podía usar el acelerómetro en su aplicación incluso después de eliminar las líneas <feature name="Accelerometer">, que solo se estaban copiando en la configuración de nivel de plataforma.xml de la configuración amplia de la aplicación principal.xml

Supongo que lo único que queda por averiguar es cómo puede editar archivos de configuración específicos de la plataforma; por ejemplo, cómo puede editar el AndroidManifest.archivo xml? Bueno, resulta que solo puede editar el archivo /platforms/android/AndroidManifest.xml directamente: la CLI es lo suficientemente inteligente como para no borrar sus personalizaciones cuando agrega o elimina automáticamente los permisos del complemento. Así que decir que por alguna razón que necesitaba para apoyar una versión más baja de Android que lo que soporta Cordova, solo puede cambie el objeto y persistirá a través de sus llamadas cordova plugin add|rm {id}.

Espero que eso aclare las cosas, ¡siéntase libre de hacer más preguntas!

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-13 18:31:03

Desde cordova 3.5 , podemos persistir plugins en config.xml archivo

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

El siguiente comando obtendrá los plugins definidos en config.xml

cordova restore plugins --experimental

El siguiente comando escribirá los plugins instalados en la configuración.xml (3.5):

cordova save plugins --experimental

En 5.x y posteriores:

cordova plugin save

Fuente: 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-29 05:56:00

Desde Cordova 5.0, sí .

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

Plugins de guardado masivo en un proyecto existente:

$ cordova plugin save

En una instalación nueva (o después de una limpia), puede agregar todos los complementos con :

$ cordova prepare

Agregar / actualizar / eliminar también se puede hacer a través de cli:

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

No hay una actualización masiva por el momento. Puede eliminar el directorio plugins y luego ejecutar un $cordova prepare.

Fuentes :

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-18 13:56:17

Config.xml es utilizado principalmente por phonegap build.

Si estás usando phonegap 3 deberías administrar tus plugins usando la CLI:

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

La única configuración.xml que debe editar es / www / config.xml, los otros se generan automáticamente a partir de ese cuando construyes tu proyecto usando:

$ 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-01 09:30:50

Es posible que desee comprobar esto para el complemento accelermator: Phonegap Acceleramator plugin .

También puedes buscar allí sobre cualquier plugin que necesites

 -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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-01 11:16:28