Xamarin Forms Android 项目导致两个应用程序图标

jac*_*omo 2 xamarin.android xamarin xamarin.forms

我有一个使用 Xamarin.Forms 版本 2.3.4.270 的基于 PCL 的 Xamarin Forms 解决方案。

在 Visual Studio 2017 中构建 Xamarin android 项目时,在 android 项目自动生成的“...\obj\Debug\android\AndroidManifest.xml”文件中,添加了一个神秘的活动,导致在运行时部署两个应用程序图标手机上的应用程序:

<activity android:name="md54d0b3c92dfecf2a187a4c8b660786aba.MainActivityForCodeAnalysisBugWorkaroundPleaseIgnore">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

我确保整个解决方案中的任何项目都没有标记为“在构建时启用代码分析”,并且我只有一个主要活动为“MainLauncher = true”...

启动第一个应用程序图标时,只显示一个空白的空视图。启动第二个应用程序图标时,将启动真正的应用程序。

如何摆脱android上的附加应用程序图标?

编辑:这是主要活动:

[Activity(Label = "@string/app_name", Theme = "@style/MyTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
Run Code Online (Sandbox Code Playgroud)

这是 SplashScreen-Activity 与MainLauncher=true

[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : AppCompatActivity
Run Code Online (Sandbox Code Playgroud)

我已经在其他各种 xamarin.forms 应用程序中使用了这种方法,但没有出现任何问题。

这是清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="@string/package_name" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
    <uses-sdk android:minSdkVersion="15" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:label="@string/app_name" android:icon="@drawable/icon"></application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

jac*_*omo 5

此问题是由于 pcl 依赖项想要通过添加带有MainLauncher = true.

请参阅https://bugzilla.xamarin.com/show_bug.cgi?id=43553

pcl 库的 Android 实现添加了一个额外的活动。在主要的 xamarin android 项目中,Visual Studio 将此活动包含在清单文件中。

因此,链接中描述的针对 android pcl 库的代码分析问题的所有解决方案会导致两个应用程序图标。

要删除第二个应用程序图标,只需将伪活动属性的“MainLauncher”设置为 false。这仍然可以让您运行代码分析,但不会添加第二个应用程序图标。