Android Activity 标签 android :name MD5 changed in Manifest file without changing any code

标签 android xamarin xamarin.forms xamarin.android

我在 2018 年 3 月 10 日创建了一个 Android 版本(#1234),然后在 2018 年 5 月 15 日创建了相同的版本版本(#1245)。在这两个版本中,我都存在更改 android list 文件中的类名的问题。我不知道 xamarin 改变了它的构建过程,所以我得到了不同的类名。

我向您展示了确切的场景:

在#1234中,我得到了名称如下的 Activity 字符串

<activity android:icon="@drawable/icon" android:label="@string/app_name" android:name="md5601603957bd95d32f86ccea34c18d6a7.SplashActivity" android:noHistory="true" android:screenOrientation="portrait" android:theme="@style/SplashTheme">

在#1245中,我得到了名称如下的 Activity 字符串

<activity android:icon="@drawable/icon" android:label="@string/app_name" android:name="md5b3a0d56d6e26694c48a179fb000dfbaa.SplashActivity" android:noHistory="true" android:screenOrientation="portrait" android:theme="@style/SplashTheme">

所以区别在于activity的android:name标签。为什么要改变?

最佳答案

Android Callable Wrapper 的 MD5 名称是使用完整程序集限定名称和命名空间名称的 MD5SUM 生成的(自 Xamarin.Android 5.1 起)。

使用完整程序集限定名称的一个巨大变量是,如果您使用包含通配符的 AssemblyVersion,则 MD5SUM 在每次构建时都会发生变化。如果您不使用版本通配符,而是手动更改版本,则完整程序集限定名称将更改,从而 MD5SUM 也会更改。

您应该永远不要在代码中手动引用基于MD5的字符串,您应该使用Java.Lang.Class。 FromType 以字符串形式获取 Java 类名:

Java.Lang.Class.FromType(typeof(SomeDotNetClassName)).Name

如果您在应用程序外部“共享”Java 类名,则可以绕过 MD5 自动命名方案,并使用各种属性的 Name 参数硬编码 Java 类名类(class):

[Activity(Name ="com.sushihangover.SatelliteLaunchWindows.MainList", Label = Consts.Label,  MainLauncher = true, Icon = "@mipmap/ic_launcher", RoundIcon = "@mipmap/ic_round_launcher", Theme = "@style/Theme.SushiHangover.Main")]
public class MainActivity : ReactiveAppCompatActivity<LaunchDatesRecyclerViewModel>
{
    ~~~
}

关于Android Activity 标签 android :name MD5 changed in Manifest file without changing any code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51184082/

相关文章:

android - 模拟对象仍在调用方法(Mockito + Kotlin)

xamarin - 如何反编译我的 appconfig.json

ios - 编辑 NSUserDefaults 托管配置字典

ios - 静音本地通知 IOS

c# - 实现 Xamarin Forms 上下文操作

java - 如果打印的话 byte b=(byte)0x8A 的值是多少?

具有多个点击事件的 Android TextView

java - 为什么 Kotlin 没有显式类型?

xaml - 如何检查 xamarin 表单数据触发器中的对象空值?

c# - Xamarin Forms - 否定 bool 绑定(bind)值