在Unity3D生成的“AndroidManifest.xml”中找到“Android类名”

Posted

技术标签:

【中文标题】在Unity3D生成的“AndroidManifest.xml”中找到“Android类名”【英文标题】:Finding the "Android class name" in "AndroidManifest.xml" generated by Unity3D 【发布时间】:2013-02-21 13:12:04 【问题描述】:

在 Facebook 应用中配置“android 原生应用”时,它们需要 Android 类名。如果您从 Unity3D 创建了 Android APK,您怎么知道要使用哪个类?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" package="--------------" android:versionName="1.02" android:versionCode="8">
  <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
  <application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true">
    <activity android:name="com.unity3d.player.UnityPlayerProxyActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="landscape">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    <activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="landscape">
    </activity>
    <activity android:name="com.unity3d.player.UnityPlayerNativeActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="landscape">
      <meta-data android:name="android.app.lib_name" android:value="unity" />
      <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
    </activity>
    <activity android:name="com.unity3d.player.VideoPlayer" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="landscape">
    </activity>
    <!-- ACTIVITIES -->
    <activity android:name="com.prime31.FacebookProxyActivity" />
    <!-- META-DATA -->
  </application>
  <!-- PERMISSIONS -->
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-feature android:glEsVersion="0x00020000" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-feature android:name="android.hardware.sensor.accelerometer" />
  <uses-feature android:name="android.hardware.touchscreen" />
  <uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
  <uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
  <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />
</manifest>

【问题讨论】:

【参考方案1】:

此字段应该是您的主要活动(与 MAIN 和 LAUNCHER 相关联)。在这种情况下,我认为应该是 com.unity3d.player.UnityPlayerProxyActivity。

如果您使用本机深层链接,这主要是必需的(因此 FB 应用程序可以创建直接调用您的活动的意图)。在这方面,您应用中的任何可公开访问的 Activity 都可以。

【讨论】:

【参考方案2】:

主要活动的标签应包含一个intent-filter 标签,其中包含android.intent.action.MAIN 操作和android.intent.category.LAUNCHER 类别。

intent-filter 标签的描述(来自文档):

指定活动、服务或广播的意图类型 接收器可以响应。意图过滤器声明的功能 它的父组件——一个活动或服务可以做什么以及什么 接收器可以处理的广播类型。它打开组件以 接收广告类型的意图,同时过滤掉那些 对组件没有意义。大部分内容 过滤器由其&lt;action&gt;&lt;category&gt;&lt;data&gt; 描述 子元素。

有关过滤器的更详细讨论,请参阅单独的 Intents 和 Intent Filters 文档,以及 Intents Filters 部分 介绍。

Android 应用程序的主要活动有一个intent-filter,其类别为LAUNCHER,它基本上表明活动可以“启动应用程序”(换句话说,它是启动器/入口)。

activity 标记应如下所示:

<activity android:name="ActivityClassName" android:label="Activity title">
    <!-- The intent filter -->
    <intent-filter>
        <!-- The action -->
        <action android:name="android.intent.action.MAIN"/>
        <!-- The category -->
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

通过查看您的 AndroidManifest.xml,您可以得出结论,您的应用的主要 Activity 是 com.unity3d.player.UnityPlayerProxyActivity Activity,因为它包含符合这些条件的 intent-filter

祝你的游戏好运!

【讨论】:

【参考方案3】:

使用“UnityPlayerProxyActivity”不再适用于所有统一版本。您可能必须改用“UnityPlayerActivity”。

详情:

如果你从 unity 导出一个 Android 项目,你可能会在 src 中找到三个类:

UnityPlayerActivity UnityPlayerNativeActivity UnityPlayerProxyActivity

“UnityPlayerProxyActivity”和“UnityPlayerNativeActivity”自 Unity 5.0 beta12 起已被弃用,因此您必须改用“UnityPlayerActivity”。

在 Facebook 中输入:

[tld.yourdomain.game].UnityPlayerActivity

当然,将 [...] 部分替换为您的应用细节。注意:如果您有一些插件/扩展与您的清单摆弄,那么这可能会有所不同。

更新: 在较新版本的 Unity Facebook SDK(使用 7.9.4 测试)中,您只需在 Assets 文件夹中搜索“FacebookSettings”,它就会告诉您要使用的类名称(例如“com.facebook.unity.FBUnityDeepLinkingActivity” )。

【讨论】:

以上是关于在Unity3D生成的“AndroidManifest.xml”中找到“Android类名”的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D生成的exe文件在运行时出现“未响应”。

Unity3d在屏幕范围内随机生成一个圆

Unity3D如何用代码生成模型

Unity3D如何用代码生成模型

Unity3D AI:导航系统-导航网格生成

全面解析Unity3D自动生成的脚本工程文件