Android Activity tag android: имя MD5 изменено в файле манифеста без изменения кода - PullRequest
0 голосов
/ 05 июля 2018

Я создал сборку Android 10 марта 2018 года (# 1234), а затем создал ту же версию сборки 15 мая 2018 года (# 1245). В обеих сборках у меня есть проблема изменения имени класса в файле манифеста Android. Я не знаю, что xamarin изменило процесс сборки, поэтому я получаю другое имя класса.

Я показываю вам точный сценарий:

В # 1234 я получаю строку активности с именем, как показано ниже

<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 android:icon="@drawable/icon" android:label="@string/app_name" android:name="md5b3a0d56d6e26694c48a179fb000dfbaa.SplashActivity" android:noHistory="true" android:screenOrientation="portrait" android:theme="@style/SplashTheme">

Так что разница в андроиде: имя тега активности. Почему это изменилось?

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

Исходные имена пакетов на основе MD5 использовали версию сборки как часть процесса генерации, что вызывало проблемы при использовании подстановочных знаков в описании версии сборки. Мы исправили это, больше не используя версию сборки как часть генерации имени пакета MD5, и это было введено в 15.7, что объясняет разницу.

Подробнее об этом изменении см. В следующих коммитах с открытым исходным кодом:

https://github.com/xamarin/Java.Interop/commit/429dc2a68579c9a820f03a7f09f35da3db9cd54a

https://github.com/xamarin/xamarin-android/commit/e5b1c92c192612d1a292a0ce35ea77a72f38eb48

Чтобы избежать проблем, связанных с генерацией MD5, вы можете прочитать следующую документацию по Android Callable Wrapping Naming :

https://developer.xamarin.com/guides/android/advanced_topics/java-integration/android_callable_wrappers/#Android_Callable_Wrapper_Naming

0 голосов
/ 05 июля 2018

Имя MD5 Android Callable Wrapper генерируется с использованием MD5SUM полного имени сборки и имени пространства имен (начиная с Xamarin.Android 5.1).

Одна из огромных переменных при использовании полного имени с полным сборочным именем - если вы используете AssemblyVersion, который содержит подстановочные знаки, MD5SUM изменяется при каждой сборке. Если вы не используете подстановочные знаки версии, а изменяете версию вручную, полное квалифицированное имя сборки будет изменено и, следовательно, будет изменен MD5SUM.

Вы должны никогда вручную ссылаться на строку на основе MD5 в вашем коде, вы должны использовать Java.Lang.Class.FromType для получения имени класса Java в виде строки :

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

Если вы «делитесь» именем класса Java за пределами своего приложения, вы можете обойти схему автоматического именования MD5 и жестко закодировать имя класса Java, используя параметр Name различных классов атрибутов:

[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>
{
    ~~~
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...