The "ResolveLibraryProjectImports" task failed unexpectedly.が発生する

Android Support Design Libraryを入れたら

エラーが発生するように…

Severity Code    Description Project File    Line    Suppression State
Error       The "ResolveLibraryProjectImports" task failed unexpectedly.
System.IO.PathTooLongException: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
   at System.IO.PathHelper.GetFullPathName()
   at System.IO.Path.LegacyNormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   at Xamarin.Tools.Zip.ZipEntry.DoExtract(IntPtr zipFile, String destinationPath, FileMode outputFileMode, EntryExtractEventArgs args)
   at Xamarin.Tools.Zip.ZipEntry.Extract(String destinationDir, String destinationFileName, FileMode outputFileMode)
   at Xamarin.Android.Tools.Files.ExtractAll(ZipArchive zip, String destination, Action`2 progressCallback)
   at Xamarin.Android.Tasks.ResolveLibraryProjectImports.Extract(DirectoryAssemblyResolver res, ICollection`1 jars, ICollection`1 resolvedResourceDirectories, ICollection`1 resolvedAssetDirectories, ICollection`1 resolvedEnvironments)
   at Xamarin.Android.Tasks.ResolveLibraryProjectImports.Execute()
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()   tmplate_android.Android         

つらみしかないと思いつつエラーを見るとパスが長いと言われてますね
現在プロジェクトが以下の場所においています

C:\Users\user_name\Documents\Visual Studio 2017\Projects\tmplate_android

これを G:\project\tmplate_android
(今回はGドライブ直下に置きましたがCドライブ直下でもOKです) に置くとエラーが出なくなりました

ListView

ListView

f:id:mo121_7:20170722220858j:plain

Mian.axmlでListViewの定義をします。 そのあと表示させるViewのテンプレートを作成しました。

Main.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:id="@+id/listView"
        android:layout_height="match_parent"
        android:layout_width="wrap_content" />
</LinearLayout>

ViewTmplate

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textItem"
    android:textSize="30sp"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

ListViewにlistを渡すためにArrayAdapterを使います。

MainActivity.cs

using System;

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace App3_native.Droid
{
    [Activity (Label = "App3_native.Android", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {

        ListView listView;
        ArrayAdapter adapter;

        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);

            listView = FindViewById<ListView>(Resource.Id.listView);
            
            var items = new string[] { "List1", "List2", "List3", "List4" };
            adapter = new ArrayAdapter<string>(this, Resource.Layout.ViewTmplate, items);
            listView.Adapter = adapter;

            listView.ItemClick += OnListItemClick;
        }

        private void OnListItemClick(object sender, AdapterView.ItemClickEventArgs e)
        {
            var listView = sender as ListView;
            var t = adapter.GetItem(e.Position).ToString();
            Toast.MakeText(this, t, ToastLength.Short).Show();

        }
    }
}

画面遷移

こんな感じで画面遷移ができる 画面遷移先のActitityを用意しておくことが大切

using System;

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace App_naitive.Droid
{
    [Activity (Label = "App_naitive.Android", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {

        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
            Button btn = FindViewById<Button>(Resource.Id.button1);
            EditText eText = FindViewById<EditText>(Resource.Id.editText1);


            btn.Click += (sender, e) =>
            {
                var intent = new Intent(this, typeof(Page2));
                intent.SetData(Android.Net.Uri.Parse(eText.Text));
                StartActivity(intent);

            };

            Button btn2 = FindViewById<Button>(Resource.Id.button2);

            btn2.Click += (sender, e) =>
            {
                var dialog = new AlertDialog.Builder(this);
                dialog.SetMessage("dialog:" + eText.Text);
                dialog.SetNeutralButton("dialog", delegate
                {
                    var intent = new Intent(Intent.ActionCall);
                    intent.SetData(Android.Net.Uri.Parse(eText.Text));
                    StartActivity(intent);

                });

                dialog.SetNegativeButton("cancel", delegate { });

                dialog.Show();
            };

        }
    }
}

リソース

Xamarin.Andoridはじめました

夏ですね。Xamarin.Andoirdはじめました。

Xamarin.Andoirdとは

Xamarin有名ですよね!ソースコードからUIまで共有化してくれるのがXamarinでしょ?と思われてる方も多いと思われます。 実は違います。XamarinにはXamarini.iOSやXamarin.AndoridなどXamarin.NaitiveとXamarini.Formsの2種類あるのです。

Xamarin.Naitiveはビジネスロジックを共有化して、UIはそれぞれのプラットフォーム事に書く必要があります。

http://re.buildinsider.net/mobile/xamarin/01/02.gif

その反面Xamarini.FormsはUIも共通化しています。

http://re.buildinsider.net/mobile/xamarin/01/04.gif

参考

www.buildinsider.net

リソース 

リソースはapkファイルを構成する一つです    https://developer.xamarin.com/guides/android/application_fundamentals/resources_in_android/Images/packaging-diagram.png

プロジェクトを作成すると以下のリソースフォルダが作成されます。
f:id:mo121_7:20170719221649p:plain
ここにxmlや画像などが保存されて、xmlC#から呼び出すことができます。

ソースコードからリソースを呼び出す方法 @[<PackageName>.]Resource.<ResourceType>.<ResourceName>

XMLから呼び出す方法
@[<PackageName>:]<ResourceType>/<ResourceName>.

ResourceType: idとかdrawableがあります。Resource.designer.csを参照してください ResourceName: idとかの名前です

ResourceのTypeは以下のように構成されます * animator * anime * color * drawable * layout * menu * raw * values * xml

感想

情報が英語しかないのでつらいめう 英語がもっとできないと生きていけないと感じる日々です

Xamarin メモ Xamarin Live Playerの設定方法

Xamarin Live Player発表されましたね。

Xamarin Live Playerとは何ぞ?という方はこちらをお読みください。

internet.watch.impress.co.jp

どうやって使うの??

発表されたはいいけどどうやって使えばいいかわからない!!
Visual Studio更新したら使えるやろとか安易に思ってました。。。
更新してもいつものVSさんと変わらず、なんやねんという気持ちがいっぱいです。

調べるとVisual Studio 2017 Preview 15.3とXamarin Updateが必要みたいですね。

Visual Studio 2017 Preview 15.3

Visual Studio 2017 Preview 15.3のインストラーはこちらに

www.visualstudio.com

正式版とプレビュー版は共存可能みたいなので、そのままインストールしてみました。

f:id:mo121_7:20170513013818p:plain

Xamarin Update

インストールが終わったらXamarin Updateしましょう。

Xamarin Updater - Visual Studio Marketplace

Updateが終了したらPCを再起動しましょうね

Tools -> Extensions and Updatesを確認するとupdateが来てるのでupdateとしましょう。
f:id:mo121_7:20170513014444p:plain

Updateが終了しVSさんを再起動するとなんか増えてる!
f:id:mo121_7:20170513014527p:plain

実行するといつもと違う!!
f:id:mo121_7:20170513014718p:plain

Andoridのアプリ側にはパスが作られるので打ち込みましょう。 f:id:mo121_7:20170513015945p:plain

そうするとVS側にPlayer用の実行選択しが増えます。Andoridもアプリを起動したまま実行するとアプリの画面が表示されるはずです。 今回はエラーが発生し残念ながら実行できずf:id:mo121_7:20170513020304p:plain

iphoneも同じ要領で実行できます。う、動いてる!Macなしでちゃんと動いてる!

f:id:mo121_7:20170513020641p:plain

iPhoneは正常に動作してるのでAndoridは謎

AndoridとiPhoneのアプリはこちら

play.google.com

Xamarin Live Player

Xamarin Live Player

  • Xamarin
  • Productivity
  • Free

最後に

眠たすぎてもう無理。誤字とかあれば教えてください

Xamarin メモ Andorid SDKが見つからない場合

久々にプログラムを書こうと思った夜のことで

f:id:mo121_7:20170417211608p:plain

これはなんだ....先週まで動いてたぞ

f:id:mo121_7:20170417211816p:plain

SDKちゃんとあるぞ

sdb.exeがないと言われたので

SDK ManagerからAndroid SDK Platform-toolsを入れてSDKを再度選択
f:id:mo121_7:20170417212130p:plain

SDK managerは管理者権限で開きましょう

‘Xamarin メモ(実機デバッグ)

実機デバッグ

Xamarinのエミュレータ重いですよね.あとandroidSDKに60GB以上使われて嫌気がしたので実機デバッグできるようにしました.

今回実機デバッグ用のデバイスはnexus5を使っています.

開発者オプション

まずスマホの開発者向けオプションをオンにします.

何も設定していない場合は開発者向けオプションが表示されません.

f:id:mo121_7:20170402181216p:plain

そこで設定 -> 端末情報のビルド番号を7回タップします.   f:id:mo121_7:20170402181447p:plain
これでデベロッパーですね!
f:id:mo121_7:20170402181531p:plain
先ほどはなかった開発者向けオプションが表示されるようになりました.
あとはUSBデバッグをONにするだけ
f:id:mo121_7:20170402182113p:plain

Andorid SDK Manager

Andorid SDK Paltform-toolとGoogle USB Driverをインストールしましょう.
f:id:mo121_7:20170402182623p:plain

設定できているかデバイスマネジャーかコマンドから確認できます.

f:id:mo121_7:20170402182820p:plain
f:id:mo121_7:20170402182936p:plain

ちなみにadbコマンドがないと言われた場合は環境変数のpathに以下を追加してください. f:id:mo121_7:20170402183130p:plain  

バイスが認識されない場合このブログが分かりやすいです.

biz-crew.com

動かしてみる

実行する際に自分の端末を選択してください.

f:id:mo121_7:20170402183552p:plain 今回の場合だとNexus 5ですね
少し待つとデバイス上にビルドしたアプリが起動します f:id:mo121_7:20170402183718p:plain