Xamarin.android 如何在xamarin android项目中处理多个应用程序类

Xamarin.android 如何在xamarin android项目中处理多个应用程序类,xamarin.android,Xamarin.android,我需要使用一个第三方库,其中包括一个用[Application]属性修饰的类。这会导致编译器错误,因为我有自己的应用程序类使用[application]属性。我希望我的应用程序类从第三方库的应用程序类继承 public class MyApplication : ThirdPartyApplication { } 然而,由于我不能用[Application]属性修饰我的类,我无法在清单中指定它应该运行“MyApplication”而不是“ThirdPartyApplication” 如果我手动

我需要使用一个第三方库,其中包括一个用[Application]属性修饰的类。这会导致编译器错误,因为我有自己的应用程序类使用[application]属性。我希望我的应用程序类从第三方库的应用程序类继承

public class MyApplication : ThirdPartyApplication
{
}
然而,由于我不能用[Application]属性修饰我的类,我无法在清单中指定它应该运行“MyApplication”而不是“ThirdPartyApplication”

如果我手动将条目添加到AndroidManifest.xml中

<application
    android:name="com.your.packagename.MyApplication"
    android:icon="@drawable/luncher_icon"
    android:label="@string/app_name">

所以我能够想出一个解决方案,但它是一个黑客

简而言之,将使用MSBuild修改android清单

步骤1:让您的自定义应用程序类继承第三方库的自定义应用程序,并用“Register”标记装饰您的类

步骤2:让您的项目包含RoslynCodeTaskFactory NuGet包

步骤3:卸载项目,然后在项目标签中添加以下内容

<UsingTask TaskName="UpdateManifest" TaskFactory="CodeTaskFactory" AssemblyFile="$(RoslynCodeTaskFactory)" Condition=" '$(RoslynCodeTaskFactory)' != '' ">
<ParameterGroup>
  <AndroidManifestFilename ParameterType="System.String" Required="true" />
  <ApplicationName ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
  <Reference Include="System.Core" />
  <Using Namespace="System" />
  <Using Namespace="System.Xml" />
  <Code Type="Fragment" Language="cs"><![CDATA[
        XmlDocument doc = new XmlDocument();
        doc.Load(AndroidManifestFilename);
        XmlNode node = doc.DocumentElement.SelectSingleNode("/manifest/application");
        node.Attributes["android:name"].InnerText = ApplicationName;
        doc.Save(AndroidManifestFilename);
      ]]></Code>
</Task>
</UsingTask>
<Target Name="CleanManifest" AfterTargets="_GenerateJavaStubs">
   <UpdateManifest AndroidManifestFilename="$(ProjectDir)\obj\$(Configuration)\android\AndroidManifest.xml" ApplicationName="com.namespace.MyApplication" />
</Target>



步骤4:重新加载项目并生成。清单现在应该指向自定义应用程序类。如果您遇到“未找到类”运行时异常,则很可能是您忘记了在步骤1中添加[Register]。

您使用的是哪个库它是供应商提供的专有库,用于控制他们设计的某些硬件。
[Register("com.namespace.MyApplication")]
public class MyApplication : ThirdPartyApplication
{
}
<UsingTask TaskName="UpdateManifest" TaskFactory="CodeTaskFactory" AssemblyFile="$(RoslynCodeTaskFactory)" Condition=" '$(RoslynCodeTaskFactory)' != '' ">
<ParameterGroup>
  <AndroidManifestFilename ParameterType="System.String" Required="true" />
  <ApplicationName ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
  <Reference Include="System.Core" />
  <Using Namespace="System" />
  <Using Namespace="System.Xml" />
  <Code Type="Fragment" Language="cs"><![CDATA[
        XmlDocument doc = new XmlDocument();
        doc.Load(AndroidManifestFilename);
        XmlNode node = doc.DocumentElement.SelectSingleNode("/manifest/application");
        node.Attributes["android:name"].InnerText = ApplicationName;
        doc.Save(AndroidManifestFilename);
      ]]></Code>
</Task>
</UsingTask>
<Target Name="CleanManifest" AfterTargets="_GenerateJavaStubs">
   <UpdateManifest AndroidManifestFilename="$(ProjectDir)\obj\$(Configuration)\android\AndroidManifest.xml" ApplicationName="com.namespace.MyApplication" />
</Target>