2017-11-04 4 views
1

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) 'これはまったく開かれません。ただ即座にクラッシュします。 実際にもう一度試してみましたが、すぐにクラッシュしました。

Picture of Solution Explorer

クリティカルなコードファイル:

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. 

Screenshot for crash

Androidの出力ログ:https://github.com/napzter13/masterdetail/blob/master/Android_OUTPUT.txt

は、私は誰かが、正しい方向に前進おかげで私をプッシュすることができます願っています。

+0

クラッシュするとログを投稿できますか? – Jmie

+0

確かに、私はポストに追加しました。 – smashingTheKeyboardTill

+0

@smashingTheKeyboardTill - エラーが、なぜクラッシュしたのかについて、出力ウィンドウに表示される可能性があります。 –

答えて

1

あなたのApp.xaml.csで何が起こっているのか分かりませんが、そこに問題がある可能性があります。しかし、ここにあなたが通常MDPを作成する方法があります。 App.xaml.csのコードビハインドでこれを行うと、XAMLよりも簡単です。しかし、XAMLの他のすべてのページを実行します。

 var navPage = new NavigationPage(new PageOne()) { Title = "Title" }; 
     var mdp = new MasterDetailPage() 
     { 
      Master = new MasterPage(), 
      Detail = navPage 
     }; 

     MainPage = mdp; 

各ページにいくつかのサンプルXAMLを配置して、表示可能にすることができます。

+0

App.xaml.csで何をしても同じ問題です あなたの例に変更しようとしましたが、まだ同じです... – smashingTheKeyboardTill

+0

私がダウンロードしてもMasterDetailPageサンプルをhttps://developer.xamarin.com/samples/xamarin-forms/Navigation/MasterDetailPage/から開いて実行しても動作しません! – smashingTheKeyboardTill

0

さて、私がやって問題を解決した次

  • ドロイドプロジェクトのプロパティ>リリースとデバッグの両方> Androidのオプション>のチェックを外し、「使用する共有ランタイム」と「高速展開を使用してください」。
  • Droidプロジェクトのプロパティ>リリースとデバッグの両方> Androidオプション>詳細>サポートされているアーキテクチャ>すべてをチェックしてください。
  • ビルドには、ビルド> App1.Androidを展開します。 [Build]> [Deploy Solution]の代わりに。

はい、私が間違ったアーキテクチャにコンパイルしたため、それが動作しない理由は、エミュレータのバージョンの1つでしか動作しませんでした。 Fast Deploymentはいくつかのことを犯してしまったので、それをやめてください。

何らかの理由で.Apkファイルが表示されない場合は、Androidプロジェクトを右クリックして[アーカイブ...]をクリックし、署名して分散コピーを作成します。 (したがって、 'Use Shared Runtime'のチェックを外す)

関連する問題