Unity打包Android的AndroidManifest.xml

本文深入探讨了AndroidManifest在Unity中的作用与配置,包括其在Android程序中的全局配置功能,Unity打包时的处理方式,以及如何正确设置入口Activity,确保应用正常启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 什么是AndroidManifest

AndroidMainfest是Android程序的全局配置表,提供了Android程序运行的必要信息,例如活动,服务,广播接收机,内容提供商等功能注册,既是Android程序运行前系统必须拥有的信息。
相关文章链接:
https://blog.csdn.net/aiyan1111111/article/details/52858003
https://www.jianshu.com/p/3b5b89d4e154
官方 :https://developer.android.com/guide/topics/manifest/manifest-intro?hl=zh-cn

二. unity中的AndroidManifest

Unity发布Android的APK时

  • 如果在Plugins/Android,不存在AndroidManifest文件,会使用Unity默认的AndroidManifest文件。
    默认的AndroidManifest文件目录在:Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Apk
    如果存在AndroidManifest文件,那么Unity会使用它代替默认的AndroidManifest文件。并将unity中的配置写入该文件。
    默认的AndroidManifest.xml:
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools"
    android:installLocation="preferExternal">
    <supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true"
        android:anyDensity="true"/>

    <application
        android:theme="@style/UnityThemeSelector"
        android:icon="@mipmap/app_icon"
        android:label="@string/app_name">
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application> 
    </manifest> 
  • Unity发布Android的APK时,关于AndroidManifest的合并,分为两种情况:
  1. 当存在多个jar包时,需要手动合并每个jar包的AndroidManifest
  2. 当存在aar包时,在导出APK时,Unity会解析Arr包的资源,并把它们的AndroidManifest文件合并到Plugins/Android目录下的AndroidManifest文件或者Unity默认的AndroidManifest文件中,这样每个Arr包AndroidManifest请求的权限或者服务最后会合并到一个AndroidManifest中
三. AndroidManifest.xml解析
  • 入口Activity

一.什么是Activity
Activity是一个Android四大组件之一,它提供了一个界面,用户可以通过该界面进行交互以执行某些操作,例如拨打电话,拍照,发送电子邮件或查看地图等行为,包含着行为功能的逻辑组织,由各种控件组件拼凑起来的窗口。
相关文章链接:https://www.jianshu.com/p/476087b4c087

AndroidManifest.xml中:

<activity android:name="com.unity3d.player.UnityPlayerActivity"
          android:label="@string/app_name">
	<intent-filter>
		<action android:name="android.intent.action.MAIN" />
		<category android:name="android.intent.category.LAUNCHER" />
	</intent-filter>
	<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>

android.intent.action.MAIN:决定应用的入口Activity,也就是我们启动应用时首先显示哪一个Activity。
android.intent.category.LAUNCHER:表示activity应该被列入系统的启动器(launcher)(允许用户启动它)。Launcher是安卓系统中的桌面启动器,是桌面UI的统称。

这个标签决定了哪个Activity作为入口Activity。

注意:
这个标签是必须的,否则unity打包的apk会出现闪退

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

参考:https://www.jianshu.com/p/75e0f4f16471

XmlException: Attribute name and qualified name must be identical. file:///D:/Lua_Dating538/Assets/Plugins/Android/AndroidManifest.xml Line 3, position 61. Mono.Xml2.XmlTextReader.ReadStartTag () Mono.Xml2.XmlTextReader.ReadContent () Mono.Xml2.XmlTextReader.ReadContent () Mono.Xml2.XmlTextReader.Read () System.Xml.XmlTextReader.Read () System.Xml.XmlDocument.ReadNodeCore (System.Xml.XmlReader reader) System.Xml.XmlDocument.ReadNode (System.Xml.XmlReader reader) System.Xml.XmlDocument.Load (System.Xml.XmlReader xmlReader) UnityEditor.AndroidXmlDocument..ctor (System.String path) UnityEditor.AndroidManifest..ctor (System.String path) UnityEditor.Android.PostProcessAndroidPlayer.CopyMainManifest (System.String target, System.String playerPackage) UnityEditor.Android.PostProcessAndroidPlayer.PostProcessInternal (System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry) UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry) UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args) UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, System.String downloadWebplayerUrl, System.String manualDownloadWebplayerUrl, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:316) UnityEditor.HostView:OnGUI()
最新发布
07-10
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值