AndroidとiOS用の最初の簡単なクロスプラットフォームアプリケーションを構築する際に問題が発生しています。シンプルなマスター/ディテールパターンを取得できないVS17でエミュレートするときに動作するXamarin.Formsアプリケーション
- タイプ:クロスプラットフォームアプリケーション(Xamarin)Visual C#で
- テンプレート:空白のApp
- UIテクノロジー: は、だから私は、これらの設定を選択したのVisual Studio 2017プロジェクトを作成しましたXamarinを。フォーム
- コードの共有戦略:ポータブルクラスライブラリ(PCL)
そして、この上でいくつかの異なったチュートリアルを、続いてBコードとパターンはまったく同じです。しかし、多くのトラブルの後、私はこの結果にこだわりました:
'Android_Accelerated_Nougat(Android 7.1 - API 25)'でエミュレートしようとすると、アプリが開き、メニューは機能しますが、 'App.xaml.cs'の「Mainpage = new App1.Page1()」に変更した場合でも、「マスター」ページで何かを表示することができます。
「KitKat(4.4)XXHDPI Phone(Android 4.4 - API 19) 'これはまったく開かれません。ただ即座にクラッシュします。 実際にもう一度試してみましたが、すぐにクラッシュしました。
クリティカルなコードファイル:
MainPage.xamlを
<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MSCommunity_Xamarin"
x:Class="App1.MainPage">
<MasterDetailPage.Master>
<ContentPage Title="Menu"
BackgroundColor="#e8e8e8">
<StackLayout Orientation="Vertical">
<StackLayout BackgroundColor="#e74c3c"
HeightRequest="75">
<Label Text="Menu dawgii"
FontSize="20"
VerticalOptions="CenterAndExpand"
TextColor="White"
HorizontalOptions="Center"/>
</StackLayout>
<ListView x:Name="navigationDrawerList"
RowHeight="60"
SeparatorVisibility="None"
BackgroundColor="#e8e8e8"
ItemSelected="OnMenuItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<!-- Main design for our menu items -->
<StackLayout VerticalOptions="FillAndExpand"
Orientation="Horizontal"
Padding="20,10,0,10"
Spacing="20">
<Image Source="{Binding Icon}"
WidthRequest="40"
HeightRequest="40"
VerticalOptions="Center" />
<Label Text="{Binding Title}"
FontSize="Medium"
VerticalOptions="Center"
TextColor="Black"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<NavigationPage>
</NavigationPage>
</MasterDetailPage.Detail>
</MasterDetailPage>
MainPage.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using App1.MenuItems;
using App1.Views;
using Xamarin.Forms;
namespace App1
{
public partial class MainPage : MasterDetailPage
{
public List<MasterPageItem> MenuList { get; set; }
public MainPage()
{
InitializeComponent();
MenuList = new List<MasterPageItem>();
var page1 = new MasterPageItem() { Title = "Item 1", Icon = "itemIcon1.png", TargetType = typeof(Page1) };
var page2 = new MasterPageItem() { Title = "Item 2", Icon = "itemIcon2.png", TargetType = typeof(Page2) };
var page3 = new MasterPageItem() { Title = "Item 3", Icon = "itemIcon3.png", TargetType = typeof(Page3) };
// Adding menu items to menuList
MenuList.Add(page1);
MenuList.Add(page2);
MenuList.Add(page3);
// Setting our list to be ItemSource for ListView in MainPage.xaml
navigationDrawerList.ItemsSource = MenuList;
// Initial navigation, this can be used for our home page
Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(Page1)));
}
// Event for Menu Item selection, here we are going to handle navigation based
// on user selection in menu ListView
private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var item = (MasterPageItem)e.SelectedItem;
Type page = item.TargetType;
Detail = new NavigationPage((Page)Activator.CreateInstance(page));
IsPresented = false;
}
}
}
MasterPageItem.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace App1.MenuItems
{
public class MasterPageItem
{
public string Title { get; set; }
public string Icon { get; set; }
public Type TargetType { get; set; }
}
}
Page1.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="App1.Views.Page1">
<ContentPage.Content>
<StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Label Text="Welcome to FastDelivery Page 22222" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
そして、すべてのページ*の.xamlファイルに同じです...
App.xaml.cs(結果なしでこのファイルで非常に多くの異なるオプションを試してみました。.. 。)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;
namespace App1
{
public partial class App : Application
{
public App()
{
InitializeComponent();
var navPage = new NavigationPage((Page)Activator.CreateInstance(typeof(Page1)));
var mdp = new MasterDetailPage()
{
Master = new MenuPage(),
Detail = navPage
};
MainPage = mdp;
}
protected override void OnStart()
{
// Handle when your app starts
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}
Gitリポジトリ:https://github.com/napzter13/masterdetail
//出力
ビルドログ:
1>------ Build started: Project: App1, Configuration: Debug Any CPU ------
1> App1 -> C:\ShortApps\App1\App1\App1\bin\Debug\App1.dll
2>------ Build started: Project: App1.Android, Configuration: Debug Any CPU ------
2> App1.Android -> C:\ShortApps\App1\App1\App1.Android\bin\Debug\App1.Android.dll
3>Starting deploy 5" KitKat (4.4) XXHDPI Phone ...
3>Starting emulator 5" KitKat (4.4) XXHDPI Phone ...
3>Validating emulator arguments...
3>Determining if emulator is already running...
3>Preparing virtual machine...
3>Launching emulator...
3>Emulator launched successfully.
3>Emulator 5" KitKat (4.4) XXHDPI Phone is running.
3>Waiting for emulator to be ready...
3>Deploying 5" KitKat (4.4) XXHDPI Phone ...
3>Build started.
3>Project "App1.Android.csproj" (Install target(s)):
3>C:\Program Files\Java\jdk1.8.0_112\\bin\keytool.exe -list -alias androiddebugkey -storepass android -keypass android -keystore "C:\Users\Chronic\AppData\Local\Xamarin\Mono for Android\debug.keystore"
3>C:\Program Files\Java\jdk1.8.0_112\\bin\jarsigner.exe -keystore "C:\Users\Chronic\AppData\Local\Xamarin\Mono for Android\debug.keystore" -storepass android -keypass android -digestalg SHA1 -sigalg md5withRSA -signedjar bin\Debug\\com.companyname.App1-Signed-Unaligned.apk C:\ShortApps\App1\App1\App1.Android\obj\Debug\android\bin\com.companyname.App1.apk androiddebugkey
3>No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2047-10-28) or after any future revocation date.
3>C:\Program Files (x86)\Android\android-sdk\build-tools\25.0.3\zipalign.exe 4 "C:\ShortApps\App1\App1\App1.Android\bin\Debug\com.companyname.App1-Signed-Unaligned.apk" "bin\Debug\\com.companyname.App1-Signed.apk"
3>Done building project "App1.Android.csproj".
3>Build succeeded.
3>Deploy successfully on 5" KitKat (4.4) XXHDPI Phone
========== Build: 2 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Deploy: 1 succeeded, 0 failed, 0 skipped ==========
デバッグログ:
Android application is debugging.
11-04 23:11:00.690 D/dalvikvm(1254): Late-enabling CheckJNI
11-04 23:11:00.706 D/dalvikvm(1254): Trying to load lib /data/app-lib/com.companyname.App1-2/libmonodroid.so 0xa9052830
11-04 23:11:00.706 D/dalvikvm(1254): Added shared lib /data/app-lib/com.companyname.App1-2/libmonodroid.so 0xa9052830
11-04 23:11:00.722 W/monodroid(1254): Creating public update directory: `/data/data/com.companyname.App1/files/.__override__`
11-04 23:11:00.722 W/monodroid(1254): Using override path: /data/data/com.companyname.App1/files/.__override__
11-04 23:11:00.722 W/monodroid(1254): Using override path: /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__
11-04 23:11:00.722 W/monodroid(1254): Using override path: /storage/emulated/0/../legacy/Android/data/com.companyname.App1/files/.__override__
11-04 23:11:00.726 W/monodroid(1254): Trying to load sgen from: /data/data/com.companyname.App1/files/.__override__/libmonosgen-2.0.so
11-04 23:11:00.726 W/monodroid(1254): Trying to load sgen from: /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/libmonosgen-2.0.so
11-04 23:11:00.730 W/monodroid(1254): Trying to load sgen from: /storage/emulated/0/../legacy/Android/data/com.companyname.App1/files/.__override__/libmonosgen-2.0.so
11-04 23:11:00.730 W/monodroid(1254): Trying to load sgen from: /data/app-lib/com.companyname.App1-2/libmonosgen-2.0.so
11-04 23:11:00.734 W/monodroid(1254): Trying to load sgen from: /data/data/com.companyname.App1/files/.__override__/links/libmonosgen-2.0.so
11-04 23:11:00.734 W/monodroid-debug(1254): Trying to initialize the debugger with options: --debugger-agent=transport=dt_socket,loglevel=0,address=127.0.0.1:29224,server=y,embedding=1
11-04 23:11:00.894 W/monodroid-debug(1254): Accepted stdout connection: 43
11-04 23:11:01.694 D/Mono (1254): Image addref mscorlib[0xb80f96d0] -> mscorlib.dll[0xb80f2620]: 2
11-04 23:11:01.694 D/Mono (1254): Prepared to set up assembly 'mscorlib' (mscorlib.dll)
11-04 23:11:01.698 D/Mono (1254): AOT: image 'mscorlib.dll.so' not found: dlopen failed: library "/data/app-lib/com.companyname.App1-2/libaot-mscorlib.dll.so" not found
11-04 23:11:01.698 D/Mono (1254): AOT: image '/usr/local/lib/mono/aot-cache/x86/mscorlib.dll.so' not found: dlopen failed: library "/data/app-lib/com.companyname.App1-2/libaot-mscorlib.dll.so" not found
11-04 23:11:01.698 D/Mono (1254): Config attempting to parse: 'mscorlib.dll.config'.
11-04 23:11:01.698 D/Mono (1254): Config attempting to parse: '/usr/local/etc/mono/assemblies/mscorlib/mscorlib.config'.
11-04 23:11:01.746 D/Mono (1254): Assembly mscorlib[0xb80f96d0] added to domain RootDomain, ref_count=1
Could not connect to the debugger.
Androidの出力ログ:https://github.com/napzter13/masterdetail/blob/master/Android_OUTPUT.txt
は、私は誰かが、正しい方向に前進おかげで私をプッシュすることができます願っています。
クラッシュするとログを投稿できますか? – Jmie
確かに、私はポストに追加しました。 – smashingTheKeyboardTill
@smashingTheKeyboardTill - エラーが、なぜクラッシュしたのかについて、出力ウィンドウに表示される可能性があります。 –