我在 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/