결과는 아래와 같다.

시간은 millisecond 단위.


millisecond CPU Memory Disk
Count Android Xamarin Android Xamarin Android Xamarin
평균 249.5 147.5 102.2 27 7708.1 12753.7
1 240 137 97 24 8321 13701
2 227 143 109 27 8048 13430
3 257 148 85 26 7737 13564
4 281 161 184 62 7792 13614
5 234 153 94 31 7713 13284
6 270 149 89 17 7524 11229
7 253 185 92 21 7471 12094
8 252 125 102 28 7889 12344
9 250 133 89 16 7318 12031
10 231 141 81 18 7268 12246



결론,

Cpu, Memory 속도는 Xamarin 이 빠르고

Disk 는 Android 가 빠르다


백만을 천만으로 했을때

Cpu 는 위 결과와 동일하게 Xamarin  이 두배 정도 빠르며

Memory 테스트는 Xamarin 으로 했을때는 결과가 나오는데 Android 로는 뻗어버린다.;

Disk 는 용량이 버티질 못할것 같아서 테스트 못했다.

 

테스트 apk 파일은 아래에...

AndroidTest1-debug-unaligned.apk

XamarinTest1.XamarinTest1-Signed.apk

비교파일.xlsx

 

이전에 만든 Tool Bar 에 메뉴를 넣어보겠습니다.

이전게시글(http://kjcoder.tistory.com/169)

 

1. 우선 메뉴에 사용될 아이콘들을 가져옵니다.

https://material.io/icons/

여기로 가면 쓸만한 아이콘들이 많이 있습니다.

drawable.zip

여기서 다루게될 아이콘들의 모음입니다.

원래 검은색인데 회색으로 변경하였습니다.

일단 준비는 끝났고 위 아이콘들을 drawable 폴더에 추가합니다.

 

2. 메뉴를 만듭니다.

Resource 폴더 하위에 menu 폴더를 하나만들고 xml 파일을 추가합니다. top_menu.xml 로 만듭니다. (이름은 맘대로)

내용은 아래와 같습니다.

<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item
       android:id="@+id/menu_Add"
       android:icon="@drawable/ic_add_black_24dp"
       android:showAsAction="ifRoom"
       android:title="추가" />
  <item
       android:id="@+id/menu_Advanced"
       android:showAsAction="never"
       android:title="Visit Site" />
</menu>

첫번째 메뉴는 추가 메뉴입니다. + 모양의 아이콘으로 보여지게됩니다.

두번째 메뉴는 아이콘이 없는 환경 설정 메뉴로 popup 메뉴를 뜨게 할수 있습니다.

* showAsAction="ifRoom" => TollBar 공간이 있으면 메뉴 항목이 표시됩니다.

* showAsAction="never" => 환경설정 메뉴항목이 설정되는 곳으로 세개의 수직점으로 나타납니다.

미리 보기

 

3. 메뉴를 보이도록 합니다.

메뉴가 추가될 화면의 Activity 에 아래 코딩을 추가합니다.

public override bool OnCreateOptionsMenu(IMenu menu)
{
    MenuInflater.Inflate(Resource.Menu.top_menus, menu);
    return base.OnCreateOptionsMenu(menu);
}

OnCreateOptionsMenu 메서드에서 메뉴 리소스를 지정할수 있게 합니다.

 

4. 메뉴 이벤트를 연결합니다.

public override bool OnOptionsItemSelected(IMenuItem item)
{
    Toast.MakeText(this, "Action selected: " + item.TitleFormatted, ToastLength.Short).Show();
    return base.OnOptionsItemSelected(item);
}

사용자가 메뉴항목을 클릭하면 OnOptionsItemSelected 메서드를 호출하고 선택한 메뉴 항목을 전달합니다.

여기서 메뉴 Action 처리를 할수 있습니다.

최종화면은 아래와 같이 나타납니다.

 

 

 

 

어플을 만들게 되면 아래 그림과 같이 상단에 Bar 가 하나 자리잡고 있습니다.

(Action Bar 가 없는 테마를 선택한 경우 보이지 않습니다.)

테마를 선택해서 없앨수는 있지만 이자리에 내가 만든 Tool Bar 를 넣는 방법을 소개하고자 합니다.

 

1. 테마 만들기

나만의 테마를 하나 만듭니다. 테마를 만드는 이유는 Action Bar  없애기 위해서라고 보면됩니다.

솔루션의 Resources/values/Style.xml 파일에 아래 코드를 작성합니다.

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="MyTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:toolBarColor">#5A8622</item>
  </style>
</resources>

핵심은 windowActionBar false 로 하여 기존 Action Bar 를 제거하는것입니다.

windowNoTitle 는 제목 표시줄을 표시 않할꺼냐 인데 표지 안할꺼니 true 입니다. (NoTitle..)

toolBarColor  Tool Bar 의 배경색이 될 항목입니다.

Properties/AndroidManifest.xml 파일의 내용에서 아래 내용을 추가하여 위 정의한 테마를 적용시킵니다.

<application android:label="SMSConvey" android:theme="@style/MyTheme"></application>

기존 application 테그가 존재하면 굵게 표시된 부분만 추가하면 됩니다.

label 은 정의한 Tool Bar 에 표시될 내용입니다.

 

2. 상단에 보여질 Tool Bar 를 디자인 합니다.

Resources/layout toolbar.xml 들어 아래코드를 작성합니다.

<?xml version="1.0" encoding="utf-8"?>
<Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/actionBarSize"
    android:background="?android:attr/toolBarColor"
    android:theme="@android:style/ThemeOverlay.Material.Dark.ActionBar"/>

minHeight="?android:attr/actionBarSize" 는 기존 제거한 Action Bar 의 높이와 동일하게 설정하라는 의미입니다.

background="?android:attr/toolBarColor" 는 배경색을 위 테마만들때 설정한 배경색을 가져옵니다.

 

3. 정의Tool Bar Include

Resources/layout/Main.axml 에서 아래 굴게 표시된 부분을 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />
    ...
    ...
 
</RelativeLayout

 

4. ToolBar 활성화

 MainActivity.cs 에서 OnCreate 부분에 아래 코딩을 추가합니다.

(아래 코딩은 빌드 단에서 에러가 안나므로 반드시 include 되었는지 확인합니다.)

var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
SetActionBar(toolbar);
ActionBar.Title = "SMSConvey";

이렇게 하게되면 아래 처럼 내가 정의한 툴바가 나타나게 됩니다.

다음시간에는 Tool Bar 에 메뉴를 넣어보겠습니다.

 

 

https://msdn.microsoft.com/ko-kr/library/mt488768.aspx

 

https://www.xamarin.com/forms

Uri uri = Uri.parse("content://mms/");
String selection = "_id = " + mmsId;
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
 
 
 
String selectionPart = "mid=" + mmsId;
Android.Net.Uri uri = Android.Net.Uri.parse("content://mms/part");
Android.Database.ICursor cursor = ContentResolver.Query(uri, null,
    selectionPart, null, null);
if (cursor.MoveToFirst())
{
    do
    {
        String partId = cursor.GetString(cursor.GetColumnIndex("_id"));
        String type = cursor.GetString(cursor.GetColumnIndex("ct"));
        if ("text/plain".Equals(type))
        {
            String data = cursor.GetString(cursor.GetColumnIndex("_data"));
            String body;
            if (data != null)
            {
                // implementation of this method below
                body = GetMmsText(partId);
            }
            else
            {
                body = cursor.GetString(cursor.GetColumnIndex("text"));
            }
        }
    } while (cursor.MoveToNext());
}

private string getMmsText(String id)
{
    Android.Net.Uri partURI = Android.Net.Uri.Parse("content://mms/part/" + id);
    Stream inputStream = null;
    Java.Lang.StringBuilder sb = new Java.Lang.StringBuilder();
    try
    {
        inputStream = ContentResolver.OpenInputStream(partURI);
        if (inputStream != null)
        {
            Java.IO.InputStreamReader isr = new Java.IO.InputStreamReader(inputStream, "UTF-8");
            Java.IO.BufferedReader reader = new Java.IO.BufferedReader(isr);
            string temp = reader.ReadLine();
            while (temp != null)
            {
                sb.Append(temp);
                temp = reader.ReadLine();
            }
        }
    }
    catch (IOException e) { }
    finally
    {
        if (inputStream != null)
        {
            try
            {
                inputStream.Close();
            }
            catch (IOException e) { }
        }
    }
    return sb.ToString();
}
 

 

1. 사용방법

2. sqlite-net 깃허브 소스
https://github.com/praeclarum/sqlite-net

3. mono.data.sqlite 설치방법

"obj\Debug\android\bin\packaged_resources" 파일이 없습니다
라는 오류는 빌드가 오류 났을때 발생되는 에러이다
출력창의 에러 내용을 모두 해결하면 된다.

오류를 다잡았는데도 오류가 발생되면

* SDK Manager 에서 아래 항목을 모두 설치한다.

Tools/
Tools/Android SDK Tools 25.1.1
Tools/Android SDK Plataform-tools 23.1
Tools/Android SDK Build-tools 23.0.1

Android 6.0/
Android 6.0/SDK
Android 6.0/ARM EABI v7a System Image

Android 5.1.1/
Android 5.1.1/SDK
Android 5.1.1/ARM EABI v7a System Image

Android 4.2.2/
Android 4.4.2/SDK
Android 4.4.2/ARM EABI v7a System Image

Android 4.0.3/
Android 4.0.3/SDK
Android 4.0.3/ARM EABI v7a System Image

Extras/
Extras/Android Support Library
Extras/Google USB Driver

 




참고
https://forums.xamarin.com/discussion/63356/the-file-obj-debug-android-bin-packaged-resources-does-not-exist

 

위 방법을 이용하니 디자이너도 잘 보인다.

// OK,Dialog팝업
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.SetTitle("확인");
alert.SetMessage("저장하시겠습니까?");
alert.SetPositiveButton("확인", SaveEvent);
alert.SetNegativeButton("취소", (senderAlert, args) => {});
Dialog dialog = alert.Create();
dialog.Show();

 private void SaveEvent(object sender, DialogClickEventArgs args)
{

 

// 단순 Dialog
public static void OpenDialogAction(Context context, string title, string content)
{
    Dialog dlg = new Dialog(context);
    TextView text = new TextView(context);
    text.Text = content;
    dlg.SetContentView(text);
    dlg.SetTitle(title);
    dlg.Show();
}

[Activity(Label = "TestActivity", MainLauncher = false, Icon = "@drawable/icon", WindowSoftInputMode = SoftInput.AdjustPan)]
public class TestActivity : Activity
{
}


WindowSoftInputMode = SoftInput.AdjustPan 을 넣으면 클릭이나 터치를 해야 입력 키보드가 나타난다.

1. Xamarin 이란
- 크로스플랫폼 (Mac, ios, android, windows 등 다양한 OS를 하나의 소프트웨어가 지원하도록 하는 기술) 시장에서 닷넷 개발자를 편하게 해주는 개발 도구
- 30일 동안은 기능 제한 없이 무료로 사용이 가능
- 그 이후로는 starter 버전(무료)으로 기능제한이 있음
- DLL
Size 제한 : 개발자가 제작한 DLL의 사이즈가 32KB를 넘지 않아야 한다.

*자마린 최신 가격표 링크 : http://store.xamarin.com/ -> 현재 무료
*자마린에 대한 Microsoft의 발표자료 : http://www.slideshare.net/ActiveNick/the-great-mobile-debate-native-vs-hybrid-app-development#

2. Xamarin 설치
- Visual Studio 2015 는 설치 시 Android 영역에 Xamarin 을 선택을 하여 진행.
- 이미 VS 가설치가 된 이후라면 https://xamarin.com/visual-studio 에서 다운 받아 Setup 진행.
- Setup 은 특별한 것 없이 모두 다음.. 으로 진행.
- 계정이 필요하므로 가입이 필수다.

3. Genymotion 설치
- 속도 높은 시뮬레이션을 띄우기 위해 필요

설치사이트
설치진행중
구동모습

4. Sample app 만들기
- 아래 처럼 android 영역의 blank app 를 선택하고 바로 빌드

Blank App 선택
실행하면 지니모션으로 위와같은 화면이 뜬다

+ Recent posts

티스토리 툴바