Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Agregue un atributo en la etiqueta "application" en el AndroidManifest desde un complemento cordova

Creo un complemento para Cordova y quiero editar el AndroidManifest para agregar un atributo en la etiqueta "application". Sé config-file para agregar una nueva etiqueta, pero no encuentro si puedo actualizar una etiqueta existente.

Por ejemplo, tengo este AndroidManifest:

<?xml version='1.0' encoding='utf-8'?> <manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.test.testCordova" xmlns:android="http://schemas.android.com/apk/res/android"> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="CordovaApp" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize"> <intent-filter android:label="@string/launcher_name"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" /> </manifest> 

Y quiero añadir android:isGame=true en la etiqueta <application> .

Si no puedo hacer esto desde el plugin.xml, crearé un gancho para editar el AndroidManifest por mí mismo, pero espero que no sea necesario.

  • Actualizar un plugin Cordova / Phonegap (3.2.0) en el proyecto
  • ¿Cómo crear un plugin en el teléfono para ejecutar la aplicación en segundo plano?
  • No se pueden instalar los complementos de Cordova desde Git en CLI
  • Uso de complementos con Cordova CLI
  • Cordova plugin desarrollo - agregando aar
  • ¿Cómo actualizar plugins en android studio?
  • Error al compilar el proyecto de Android después de actualizar FindBugs a 3.0.1
  • Aplicar plugin: 'android' o aplicar plugin: 'com.android.application'
  • One Solution collect form web for “Agregue un atributo en la etiqueta "application" en el AndroidManifest desde un complemento cordova”

    Terminé haciendo un gancho de plugin que no sabía que existía. Plugin ganchos son ganchos que se definen en el plugin y que se puede llamar antes o después de que el complemento se agrega o se elimina (ya sea cuando ejecute el cordova plugin cli comandos o cuando cordova añade el complemento a la plataforma con cordova plataforma add comando).

    No quería usar ganchos porque pensé que los ganchos tenían que ser colocados en config.xml y no podían ser enlazados con un plugin.

    Aquí he añadido esta línea en la sección android plataforma del archivo plugin.xml (mi requisito era un poco diferente de los OP, pero el ejemplo puede ayudar de todos modos):

      <platform name="android"> <hook type="before_plugin_install" src="scripts/androidBeforeInstall.js" /> ... </platform> 

    Y luego escribí el script de gancho androidBeforeInstall.js:

     module.exports = function(ctx) { var fs = ctx.requireCordovaModule('fs'), path = ctx.requireCordovaModule('path'), xml = ctx.requireCordovaModule('cordova-common').xmlHelpers; var manifestPath = path.join(ctx.opts.projectRoot, 'platforms/android/AndroidManifest.xml'); var doc = xml.parseElementtreeSync(manifestPath); if (doc.getroot().tag !== 'manifest') { throw new Error(manifestPath + ' has incorrect root node name (expected "manifest")'); } //adds the tools namespace to the root node doc.getroot().attrib['xmlns:tools'] = 'http://schemas.android.com/tools'; //add tools:replace in the application node doc.getroot().find('./application').attrib['tools:replace'] = 'android:label'; //write the manifest file fs.writeFileSync(manifestPath, doc.write({indent: 4}), 'utf-8'); }; 

    Es un poco más complejo que añadir líneas de configuración en plugin.xml, pero una vez que tengas la buena sintaxis puede ser muy potente.

    Editar:

    Por alguna razón, con sólo el gancho en before_plugin_install , el AndroidManifest.xml se actualizó correctamente durante la adición de la plataforma, pero se restauró en su estado predeterminado al final de la agregación platdorm.

    Como no pude averiguar la razón, he añadido la siguiente línea en el plugin.xml por lo que el script también se inicia al final de la plataforma add (luckilly ganchos definidos en plugin.xml se puede ejecutar no sólo al añadir o eliminar Un complemento).

     <hook type="after_platform_add" src="scripts/androidBeforeInstall.js" /> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.