Saltar al contenido

¿Usar archivo de manifiesto personalizado y permiso en Unity?

Te damos la bienvenida a nuestra página web, en este lugar hallarás la solucíon que andabas buscando.

Solución:

Estás modificando el mal. AndroidManifest expediente. Que AndroidManifest desde TempStagingArea que está modificando es generado por la unidad cada vez que construye su proyecto.

Para usar una costumbre AndroidManifest archivo, tienes que poner tu personalizado AndroidManifest archivo en AssetsPluginsAndroid.

1.Ir a EditorDataPlaybackEnginesAndroidPlayerApkCopia el AndroidManifest.xml archivo a su AssetsPluginsAndroid

2.Abra el archivo de manifiesto copiado desde AssetsPluginsAndroid y agregue su manifiesto.

En su caso particular, agregue lo. Guardar, construir y ejecutar.

Unity ahora usará eso AndroidManifest expediente. Si tiene un bloqueo o cualquier otro problema, entonces Unity no quiere que cambie eso.

A partir de Unity 2018, debe implementar el IPostGenerateGradleAndroidProject interfaz que le permitirá editar el manifiesto de Android después de que Unity lo produzca. En el código a continuación, he agregado métodos para configurar el permiso del micrófono, configurar la aceleración de hardware y configurar el tema de su aplicación (reemplazar SetMicrophonePermission() a su método preferido, que se llama cuando Unity llama OnPostGenerateGradleAndroidProject()).

Agregue el siguiente código a Assets/Editor/ModifyUnityAndroidAppManifestSample.cs

using System.IO;
using System.Text;
using System.Xml;
using UnityEditor.Android;

public class ModifyUnityAndroidAppManifestSample : IPostGenerateGradleAndroidProject


    public void OnPostGenerateGradleAndroidProject(string basePath)
    
        // If needed, add condition checks on whether you need to run the modification routine.
        // For example, specific configuration/app options enabled

        var androidManifest = new AndroidManifest(GetManifestPath(basePath));

        androidManifest.SetMicrophonePermission();

        // Add your XML manipulation routines

        androidManifest.Save();
    

    public int callbackOrder  get  return 1;  

    private string _manifestFilePath;

    private string GetManifestPath(string basePath)
    
        if (string.IsNullOrEmpty(_manifestFilePath))
        
            var pathBuilder = new StringBuilder(basePath);
            pathBuilder.Append(Path.DirectorySeparatorChar).Append("src");
            pathBuilder.Append(Path.DirectorySeparatorChar).Append("main");
            pathBuilder.Append(Path.DirectorySeparatorChar).Append("AndroidManifest.xml");
            _manifestFilePath = pathBuilder.ToString();
        
        return _manifestFilePath;
    



internal class AndroidXmlDocument : XmlDocument

    private string m_Path;
    protected XmlNamespaceManager nsMgr;
    public readonly string AndroidXmlNamespace = "http://schemas.android.com/apk/res/android";
    public AndroidXmlDocument(string path)
    
        m_Path = path;
        using (var reader = new XmlTextReader(m_Path))
        
            reader.Read();
            Load(reader);
        
        nsMgr = new XmlNamespaceManager(NameTable);
        nsMgr.AddNamespace("android", AndroidXmlNamespace);
    

    public string Save()
    
        return SaveAs(m_Path);
    

    public string SaveAs(string path)
    
        using (var writer = new XmlTextWriter(path, new UTF8Encoding(false)))
        
            writer.Formatting = Formatting.Indented;
            Save(writer);
        
        return path;
    



internal class AndroidManifest : AndroidXmlDocument

    private readonly XmlElement ApplicationElement;

    public AndroidManifest(string path) : base(path)
    
        ApplicationElement = SelectSingleNode("/manifest/application") as XmlElement;
    

    private XmlAttribute CreateAndroidAttribute(string key, string value)
    
        XmlAttribute attr = CreateAttribute("android", key, AndroidXmlNamespace);
        attr.Value = value;
        return attr;
    

    internal XmlNode GetActivityWithLaunchIntent()
    
        return SelectSingleNode("/manifest/application/activity[intent-filter/action/@android:name='android.intent.action.MAIN' and " +
                "intent-filter/category/@android:name='android.intent.category.LAUNCHER']", nsMgr);
    

    internal void SetApplicationTheme(string appTheme)
    
        ApplicationElement.Attributes.Append(CreateAndroidAttribute("theme", appTheme));
    

    internal void SetStartingActivityName(string activityName)
    
        GetActivityWithLaunchIntent().Attributes.Append(CreateAndroidAttribute("name", activityName));
    


    internal void SetHardwareAcceleration()
    
        GetActivityWithLaunchIntent().Attributes.Append(CreateAndroidAttribute("hardwareAccelerated", "true"));
    

    internal void SetMicrophonePermission()
    
        var manifest = SelectSingleNode("/manifest");
        XmlElement child = CreateElement("uses-permission");
        manifest.AppendChild(child);
        XmlAttribute newAttribute = CreateAndroidAttribute("name", "android.permission.RECORD_AUDIO");
        child.Attributes.Append(newAttribute);
    

valoraciones y comentarios

Recuerda que tienes concesión de agregar una reseña si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *