當前位置:首頁 » 安卓系統 » monoandroid教程

monoandroid教程

發布時間: 2022-10-24 19:16:09

① 什麼是Mono for Android

Mono for Android 由一組針對移動平台進行優化的程序集、命名空間以及類組成。其代碼是.NET 4、Silverlight和Windows Phone 配置文件的組合,同時還包括允許開發人員充分利用Android 平台的代碼。

命名空間和類

Mono for Android 提供了一組豐富的命名空間和類來支持為 Android 設備構建應用程序。
Mono的含義:Mono是一個有Xamarin所發起的開源項目,主要用於創建.NET CLI、C#編譯器以及開放的開發堆棧的Ecma標準的實現。
目前Mono的實現主要有三個目標:
(1) 開源的CLI
(2)C#編譯器
(3)公開的開發堆棧

② mono開發安卓的人多嗎

Mono for
Android開發調研筆記

安裝完Mono for Android(簡稱:MonoDroid)之後,可以用MonoDevelop或Visual Studio來開發Mono for
Android應用程序;目前只能在模擬器上調試和部署,必須購買後才能在真機上調試和部署;目前遇到的最大的問題是:模擬器上調試速度非常慢,通過單步調試每一行代碼都需要幾秒鍾。有人開了個帖子抱怨以及一些回復的相關討論:http://mono-for-android.1047100.n5.nabble.com/Free-version-Emulator-only-Bye-bye-td5091443.html,另外,如果購買了正式版,那支持直接用設備來調試的相關文章介紹:http://docs.xamarin.com/android/tutorials/debug_on_device

MonoDroid應用程序,應該說所有的Android應用程序只要在處理5秒後還未完成,則會自動提示用戶「應用程序無響應,是否結束應用」類似這樣的提示信息。所以我們一般在處理一些可能比較耗時的操作時,比如與伺服器進行通信請求數據或Post數據。這里操作都需要通過非同步的方式來完成;

MonoDroid提供的API與原生java平台下的Android開發基本一致,類的名稱以及方法名稱都保持一致,這樣只要會開發原生的Android應用,那在MonoDroid下也可以開發;

雖然說MonoTouch,
MonoDroid可以允許我們用C#來開發在IOS以及Android應用,但是並不是所有的代碼都只要用c#寫一次就可以在這兩個平台上跑了。實際上,能重用的代碼也許只有業務層的代碼。因為UI的實現,兩種平台不同,MonoDroid下依賴於Mono.Android來實現UI,而MonoTouch下則是用另外一套不同的UI實現方式。實際上Mono更多的是考慮了與原生API一致的方式來開發UI,所以設計了兩套不同的類庫來實現UI架構;所以UI層的代碼無法重用;另外,數據訪問層,也不能共用,因為雖然都是訪問sqlite,但是Mono在這兩個平台上分別對應實現的API不同,MonoTouch下使用:MonoTouch.CoreData,而MonoDroid下使用Mono.Data.Sqlite。當然我們還是可以將數據訪問層進行抽象,比如抽象成IRepository,然後業務層調用IRepository的介面即可,IRepository的具體實現需要基於不同平台分別實現;

之前可以在Windows上跑的Castle框架在MonoDroid上不再支持,編譯會遇到錯誤,因為Castle程序集依賴於System.Configuration這個程序集,但是在MonoDroid平台上沒有這個程序集;MomoDroid平台上支持的.Net程序集有限,見下面的介紹。基於這個原因,但是又希望能像以前那樣使用某個IOC框架,所以找了一個跨各種手機平台的輕量級開源Ioc框架(TinyIoC),該框架非常小,只有一個cs文件就能使用,使用後感覺效果還不錯,基本容器功能都支持了。git開源項目地址:https://github.com/grumpydev/TinyIoC

log4net在MonoDroid上也不支持,因為:Log4Net uses classes in .Net namespaces such as
System.Web, and System.Diagnostics that are not yet implemented in Mono for
Android. 不過幸好,Android平台自帶了一個Log記錄器,在MonoDroid下可以使用Android.Util.Log來記錄日誌。如果是用Visual
Studio來開發,則可以直接在VS的Output窗口看到日誌,另外VS還有一個專門的窗口(View -> Other Windows ->
Android Device Logging)用來查看Android記錄的日誌。另外,也可以通過命令行的方式查看日誌,定位到目錄:C:\Program
Files (x86)\Android\android-sdk\platform-tools,執行命令:adb
logcat,詳細方法可以參考:http://docs.xamarin.com/android/advanced_topics/android_debug_log

MonoDroid的資料庫是用sqlite,目前內置支持兩種數據訪問方式:原生方式(游標的方式)以及ADO.NET類似的介面,使用起來ADO.NET的方式非常簡單,我們只需要引用:Mono.Data.SQLite這個程序集就能像ADO.NET那樣來訪問sqlite資料庫了。

游標方式舉例:

//查詢數據

ICursor cursor = this.db.Query(DatabaseTable, new[] { KeyRowId, KeyTitle, KeyBody }, null, null, null, null, null);

//新增數據

var initialValues = new ContentValues();
initialValues.Put(KeyTitle, title);
initialValues.Put(KeyBody, body);
this.db.Insert(DatabaseTable, null, initialValues);

//更新數據

var args = new ContentValues();
args.Put(KeyTitle, title);
args.Put(KeyBody, body);
this.db.Update(DatabaseTable, args, KeyRowId + "=" + rowId, null);

//刪除數據

this.db.Delete(DatabaseTable, KeyRowId + "=" + rowId, null);

//事務支持

this.db.BeginTransaction(); //Start a transaction.
try {
var result = func(); //Do update db operations.
db.SetTransactionSuccessful(); //tell db the update operations successfully.
return result;
} catch {
//Error in between database transaction
}finally {
//commit the transaction.
//if the setTransactionSuccessful method have not been called, then the transaction will auto rollback.
db.EndTransaction();
}

ADO.NET方式舉例,(需要引用:Mono.Data.Sqlite)

//查詢數據

public static IEnumerable<Note> GetAllNotes()
{
var sql = "SELECT * FROM ITEMS;";

using (var conn = GetConnection())
{
conn.Open();

using (var cmd = conn.CreateCommand())
{
cmd.CommandText = sql;

using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
yield return new Note(reader.GetInt32(0), reader.GetString(1), reader.GetDateTime(2));
}
}
}
}

//新增和更新數據

public static void SaveNote(Note note)
{
using (var conn = GetConnection())
{
conn.Open();

using (var cmd = conn.CreateCommand())
{

if (note.Id < 0)
{
// Do an insert
cmd.CommandText = "INSERT INTO ITEMS (Body, Modified) VALUES (@Body, @Modified); SELECT last_insert_rowid();";
cmd.Parameters.AddWithValue("@Body", note.Body);
cmd.Parameters.AddWithValue("@Modified", DateTime.Now);

note.Id = (long)cmd.ExecuteScalar();
}
else
{
// Do an update
cmd.CommandText = "UPDATE ITEMS SET Body = @Body, Modified = @Modified WHERE Id = @Id";
cmd.Parameters.AddWithValue("@Id", note.Id);
cmd.Parameters.AddWithValue("@Body", note.Body);
cmd.Parameters.AddWithValue("@Modified", DateTime.Now);

cmd.ExecuteNonQuery();
}
}
}
}

//刪除數據

public static void DeleteNote(Note note)
{
var sql = string.Format("DELETE FROM ITEMS WHERE Id = {0};", note.Id);

using (var conn = GetConnection())
{
conn.Open();

using (var cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
}
}

//事務支持

using (var conn = GetConnection ()) {
conn.Open ();
var transaction = conn.BeginTransaction();
try
{
//Do db operations.
transaction.Commit();
}
catch
{
transaction.Rollback();
}
}

ORM,NHibernate不能運行在Mono for
Android上,不過手機應用的業務邏輯相對簡單,ORM的需求優先順序應該不是很急,暫時可以通過上面的數據訪問方式來訪問sqlite資料庫。

類庫方面,目前支持的.net類庫有限,主要有以下幾個:

1 mscorlib
2 System 包含System.Net命名空間,支持HttpWebRequest, HttpWebResponse,這兩個類可以實現與伺服器端通信
3 System.Core 包含IO, LINQ, Collections,etc
4 System.Data 該類庫實現了ADO.NET的相關基礎架構,如DataReader, DataAdapter, Connection, Command, etc.
5 System.Data.Services.Client
6 System.EnterpriseServices
7 System.Json 提供了簡單的JSON序列化和反序列化支持
8 System.Numberics
9 System.Runtime.Serialization
10 System.ServiceModel
11 System.ServiceModel.Web
12 System.Transactions 提供事務支持,包括分布式事務
13 System.Web.Services
14 System.Xml
15 System.Xml.Linq
16 Microsoft.CSharp
17 //以下幾個是Android開發需要的類庫
18 Mono.Android MonoDroid核心類庫,該類庫中提供的API與原生的JAVA API基本一致,所以使用起來很方便;
19 Mono.Android.Export
20 Mono.Android.GoogleMaps
21 Mono.Android.Support.v4
22 Mono.CompilerServices.SymbolWriter
23 Mono.CSharp
24 Mono.Data.SQLite 提供封裝了Sqlite資料庫的ADO.NET介面支持
25 Mono.Data.Tds
26 Mono.Security

與伺服器通信,可以像平時一樣通過HttpWebRequest或WebClient來發送請求。以下代碼設計了一個通用的通過非同步的方式發送HttpWebRequest

/// <summary>
/// 非同步發送HttpWebRequest
/// </summary>
/// <param name="cookie"></param>
/// <param name="url"></param>
/// <param name="postData"></param>
/// <param name="callback"></param>
public static void SendHttpPostRequest(Cookie cookie, string url, string postData, Action<HttpWebResponse> callback)
{
//解決https下的證書問題
HttpRequestCredentialHelper.();
var request = HttpWebRequest.Create(url) as HttpWebRequest;
//設置請求類型為POST
request.Method = "POST";

//設置Post的數據
if (!string.IsNullOrEmpty(postData))
{
request.ContentLength = postData.Length;
request.ContentType = "application/x-www-form-urlencoded";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(postData);
writer.Close();
}
}

//將Cookie放入請求,以讓伺服器知道當前用戶的身份
var container = new CookieContainer();
request.CookieContainer = container;
if (cookie != null)
{
container.SetCookies(new Uri(Constants.ROOT_URL), string.Format("{0}={1}", cookie.Name, cookie.Value));
var logger = DependencyResolver.Resolve<ILoggerFactory>().Create(typeof(HttpWebRequestHelper));
logger.InfoFormat("HttpWebRequest CookieName:{0}, Value:{1}", cookie.Name, cookie.Value);
}

//非同步發送請求
request.BeginGetResponse(new AsyncCallback(asyncResult =>
{
var httpRequest = asyncResult.AsyncState as HttpWebRequest;
using (var response = httpRequest.EndGetResponse(asyncResult) as HttpWebResponse)
{
callback(response);
}
}), request);
}

發送請求示例代碼:

HttpWebRequestHelper.SendHttpPostRequest(null, url, postData,

response =>
{
var response = HttpWebRequestHelper.GetTextFromResponse(response);

//這里處理HttpWebResponse

//如果要反問UI相關元素,則需要封裝為一個委託然後在RunOnUiThread方法內執行
RunOnUiThread(() =>
{
var folders = _taskFolderService.GetAllTaskFolders();
_listView.Adapter = new TaskFolderAdapter(this, Resource.Layout.TaskFolderListItem, folders.ToArray());
});
});

分層架構,我覺得我們可以採用以下的分層架構:

UI 界面層,MonoTouch,MonoDroid分別實現

Model
模型層,實現核心業務邏輯,代碼可重用,如果採用DDD領域模型來實現,則可以包括:Service,Aggregate,Entity,VO,IRepository

Model.Infrastructure
基礎框架層,實現公共基礎代碼,供上層調用,如DI,log,configuration,httprequest, constants, etc

Model.Repositories 倉儲實現層,對Model層的IRepository介面的實現,不同平台採用不同實現

③ mono for android 怎麼設置數字簽名

用java命令查看,如下:
C:\jdk1.6.0_10\bin>jarsigner.exe -verify f:\ICBCAndroidBank.apk
jar 已驗證

什麼是數字簽名?

數字簽名就是為你的程序打上一種標記,來作為你自己的標識,當別人看到簽名的時候會知道它是與你相關的。

為什麼要數字簽名?

Android系統要求每一個Android應用程序必須要經過數字簽名才能夠安裝到系統中,也就是說如果一個Android應用程序沒有經過數字簽名,是沒有辦法安裝到系統中的!

Android通過數字簽名來標識應用程序的作者和在應用程序之間建立信任關系,不是用來決定最終用戶可以安裝哪些應用程序。

這個數字簽名由應用程序的作者完成,並不需要權威的數字證書簽名機構認證,它只是用來讓應用程序包自我認證的。

④ 關於 mono for android的安裝問題

mono for android不是免費軟體,但可以試用。
安裝這個軟體,需按照以下步驟:
1、安裝JDK

2、安裝 Andorid SDK(根據你的Android版本,下載合適的SDK)
3、MONO 在 Windwos 下的運行時
4、裝MONO for Android (根據你的Android版本,比如MONO for Android 4.2.5)
5、可選MonoDevelop, 裝MonoDevelop要注意,要先裝gtk-sharp
以上步驟不能錯!

⑤ 在mono for android中的webview載入網頁實現百度api瀏覽器定位問題 !!!

樓主問題解決了嗎?我也遇到這個問題了,地圖載入都正常,但是定位失效,在手機瀏覽器定位功能好用

⑥ Mono for Android 發布,開發者可以使用 C# 開發 Android 程序

Mono for Android V1.0 正式發布啦!

Mono for Android就是原先的MonoDroid,由於商標問題(名稱中含有Droid),現在改名為Mono for Android。

Mono for Android提供了一個基於Android的Mono虛擬機,讓開發者可以用C#開發Android應用程序。另外,Dalvik API已經被綁定至C#,你可以用C#方便地調用Android內置的很多類庫。OpenTK類庫也被移值過來,你可以在Windows, Linux與iPhone三個不同的平台上共享同樣的OpenGL代碼。

當前版本只支持C#語言,但理論上應該支持其他語言的編譯器。通過針對Mono for Android的Visual Studio 2010 add-on,你可以在熟悉的VS2010開發環境中開發Android應用。

如果你是.NET程序員,如果你想開發移動應用程序,如果你不想學習和編寫Java代碼,如果你目前不看好Windows Phone 7,那就用Mono for Android吧!而且,如果哪天Windows Phone發達了,你想開發WP應用程序了,那你現在寫的很多代碼還可以用於WP應用開發!另外,如果你考慮用MonoTouch開發iPhone應用程序,那就更幸福了,為Android應用寫的C#代碼,也可以用於iPhone應用開發。一次寫代碼,卻可以用於三大移動平台,世上難道還有比.NET程序員更幸福的程序員嗎!.NET程序員們,歡呼吧!

但是歡呼的同時,我們也要面對現實,使用Mono for Android有一些限制。比如,不能使用C# 4.0的dynamic特性。另外,一些專門針對Android的類庫(比如針對Android特有的硬體,針對由Android本地類庫和TK實現的UI),在其他平台的.NET實現中可能得不到支持。這就意味著,如果Android應用與Windows Phone應用要共享代碼,只能共享核心代碼。Mono for Android提供的只是讓你可以用C#代碼編寫Android應用,但是開發一個真正的Android應用,你還需要學習很多東西,比如:Activities, Intents,通過XML創建UI。

Mono for Android提供了一個可以免費下載的版本,但只能在模擬器中使用。要想在真實環境中使用,需要購買商業許可。專業版$399/年,企業版$999/年。i-programmer上的報道有誤,經過在Mono for Android官網上查證,專業版授權費$399,企業版授權費$999,學生版授權費$99(無時間限制)。

⑦ 怎麼在vs2015上安裝mono for android破解版

注意: 請不要 將 Android SDK 安裝在帶有空格的目錄,例如很多人喜歡將應用默認安裝在 C:\Program Files\ 下,這會導致出錯。
安裝完畢後運行 SDK Manager
安裝要求:
Android SDK Tools, revision 10 or greater
Android SDK Platform-tools, revision 3 or greater
Install one or more SDK Platforms, such as:
SDK Platform Android 1.6, API 4, revision 3
SDK Platform Android 2.3.3, API 10, revision 1
注意: SDK 會經常提示更新一些建議版本,最簡單的方式是選擇 Update All 按鈕.

如果在打開 SDK 設置時收到了錯誤信息 "Failed to fetch URL https://...", 可以嘗試在選項 Settings > Misc 下檢查 "Force https://... sources to be fetched using http://..." 並返回可用包列表中。
第三步 - 配置模擬器
Android Simulator 可配置用來運行多個不同版本設備的模擬,在使用前至少需要配置一個設備,可通過 Android SDK 安裝程序直接選擇 Virtual Devices 選項:

點擊 "New" 按鈕,下面是配置對話框:

不要理會下面的提示信息,該信息只是告訴你一切正常:

做完這步後我們已經配置好了模擬器,Android SDK 的設置也就到此結束。
注意: 你無需在 Android SDK 安裝程序中啟動模擬器,MonoDroid 將幫你搞定。
第四步 - 安裝 Mono for Android Visual Studio 2010 插件
一旦你走到這步,就可以開始安裝 Mono for Android 的 Visual Studio 2010 插件了,

注意: 安裝之前必須先關閉 Visual Studio 2010!
根據提示信息進行安裝,建議仔細閱讀最終用戶協議,這里設計很多法律方面的問題,如果你只是想試試的話,跳過去!

⑧ Mono For Android !Could not create the Android package!

我是這樣解決的:
1. 可能是你的VS創建的項目路徑含有中文或其他雜亂數據

2. 如果不是1中的:把android-sdk\tools這個目錄用原原包文件重新履蓋一遍。原因可能是在某個安裝或升級時把以上這個目錄中的哪個文件刪除掉了(比如的就發現aapt.exe不在了),所以用Android SDK安裝包中tools目錄再履蓋本地同一目錄就可解決。

我自己是用方法2解決的。

⑨ mono for android 開發的程序如何生成安裝包

編譯就可以生成apk文件。下載一個破解的替換文件就可以聯機了。

download.csdn.net/detail/yourboy416/4913360

⑩ C#開發Android手機應用全接觸(mono for android)教程

也在學習這個,但找不到系統性的教程,只好到xamarin去看官網上的示例。下載下來自己再看。
http://xamarin.com/

但有些示例,也不知是不是網路原因,打開時一些引用DLL無法安裝。

熱點內容
如何讓給文件夾設置密碼查看 發布:2025-01-31 22:49:07 瀏覽:2
配置動態路由協議配錯了怎麼改 發布:2025-01-31 22:49:07 瀏覽:77
掃行程碼為什麼需要支付密碼 發布:2025-01-31 22:47:08 瀏覽:738
什麼樣的配置能玩地平線4 發布:2025-01-31 22:44:05 瀏覽:241
python正則表達式符號 發布:2025-01-31 22:43:50 瀏覽:391
androidmime 發布:2025-01-31 22:34:44 瀏覽:782
ftp和http的中文含義是 發布:2025-01-31 22:33:48 瀏覽:402
sqlite3存儲圖片 發布:2025-01-31 22:27:14 瀏覽:162
sqlserverphp 發布:2025-01-31 22:22:55 瀏覽:877
曲馬多存儲 發布:2025-01-31 22:22:52 瀏覽:538