繫結 .AAR
重要
我們目前正在調查 Xamarin 平臺上的自定義系結使用方式。 請接受 這項調查 ,以通知未來的開發工作。
本逐步解說提供從 Android 建立 Xamarin.Android Java 系結連結庫的逐步指示。AAR 檔案。
概觀
Android 封 存 (.AAR) 檔案是 Android 連結庫的檔案格式。 。AAR 檔案是包含下列.ZIP封存:
- 已編譯的 Java 程式代碼
- 資源識別碼
- 資源
- 中繼資料(例如活動宣告、權限)
在本指南中,我們將逐步解說為單一 建立系結連結庫的基本概念。AAR 檔案。 如需一般 Java 連結庫系結的概觀(含基本程式碼範例),請參閱 系結 Java 連結庫。
重要
繫結專案只能包含一個 。AAR 檔案。 如果 為 。AAR 相依於其他 。AAR,然後這些相依性應該包含在自己的系結專案中,然後參考。
逐步解說
我們將針對 Android Studio 中建立的範例 Android 封存盤案 textanalyzer.aar 建立系結連結庫。 這。AAR 包含具有 TextCounter
靜態方法的類別,可計算字串中的元音和同音數。 此外, textanalyzer.aar 包含影像資源,可協助顯示計算結果。
我們將使用下列步驟從 建立系結連結庫。AAR 檔案:
建立新的 Java Bindings Library 專案。
新增單一 。專案的 AAR 檔案。 繫結專案只能包含單一 。Aar。
設定的適當建置動作。AAR 檔案。
選擇的目標架構。AAR 支援。
建置系結連結庫。
建立系結連結庫之後,我們將開發小型 Android 應用程式,提示使用者輸入文字字串,並呼叫 。用來分析文字的 AAR 方法,從 擷取影像。AAR,並顯示結果以及影像。
範例應用程式將存取 TextCounter
textanalyzer.aar 類別:
package com.xamarin.textcounter;
public class TextCounter
{
...
public static int numVowels (String text) { ... };
...
public static int numConsonants (String text) { ... };
...
}
此外,此範例應用程式會擷取並顯示以 textanalyzer.aar 封裝的影像資源:
此影像資源位於 textanalyzer.aar 中的 res/drawable/monkey.png。
建立系結連結庫
從下列步驟開始之前,請先下載範例 textanalyzer.aar Android 封存盤案:
從 Android Bindings Library 範本開始,建立新的 Bindings Library 專案。 您可以使用 Visual Studio for Mac 或 Visual Studio(以下螢幕快照顯示 Visual Studio,但 Visual Studio for Mac 非常類似)。 將解決方案 命名為 AarBinding:
範本包含 您新增的 Jars 資料夾。系結連結庫專案的 AAR(s)。 以 滑鼠右鍵按下 Jars 資料夾,然後選取 [ 新增 > 現有專案]:
流覽至稍早下載的 textanalyzer.aar 檔案,選取它,然後按兩下 [ 新增]:
確認 textanalyzer.aar 檔案已成功新增至專案:
將 textanalyzer.aar 的 [建置動作] 設定為
AndroidLibrary
。 在 Visual Studio for Mac 中,以滑鼠右鍵按兩下 textanalyzer.aar 以設定建置動作。 在 Visual Studio 中,您可以在 [屬性] 窗格中設定 [建置動作] :開啟專案 [屬性] 以設定 目標 Framework。 如果 為 。AAR 會使用任何 Android API,將 Target Framework 設定為 的 API 層級。AAR 預期。 (如需一般目標 Framework 設定和 Android API 層級的詳細資訊,請參閱 瞭解 Android API 層級。)
設定系結連結庫的目標 API 層級。 在此範例中,我們可以自由使用最新的平臺 API 層級 (API 層級 23),因為我們 的 textanalyzer 與 Android API 沒有相依性:
建置系結連結庫。 Bindings Library 專案應該會順利建置,並在下列位置產生輸出.DLL: AarBinding/bin/Debug/AarBinding.dll
使用系結連結庫
若要在 Xamarin.Android 應用程式中使用此.DLL,您必須先新增系結連結庫的參考。 使用下列步驟:
我們會在與系結連結庫相同的解決方案中建立此應用程式,以簡化本逐步解說。 (取用系結連結庫的應用程式也可以位於不同的解決方案中。建立新的 Xamarin.Android 應用程式:以滑鼠右鍵按兩下方案,然後選取[ 新增專案]。 將新專案 命名為 BindingTest:
以滑鼠右鍵按兩下 BindingTest 專案的 [參考] 節點,然後選取 [新增參考...]:
選取稍早建立的 AarBinding 專案,然後按兩下 [ 確定]:
開啟 BindingTest 專案的 [參考] 節點,以確認 AarBinding 參考存在:
如果您想要檢視系結連結庫項目的內容,您可以按兩下參考,在 [對象瀏覽器] 中開啟它。 您可以看到命名空間的 Com.Xamarin.Textcounter
對應內容(從 Java com.xamarin.textanalyzezr
套件對應),而且您可以檢視 類別的成員 TextCounter
:
上述螢幕快照醒目提示範例應用程式將呼叫的兩TextAnalyzer
種方法: NumConsonants
(包裝基礎 Java 方法),以及 NumVowels
(包裝基礎 Java numConsonants
numVowels
方法)。
訪問。AAR 類型
新增指向系結連結庫之應用程式的參考之後,您可以在 中存取 Java 類型。AAR,因為您會存取 C# 類型(感謝 C# 包裝函式)。 C# 應用程式程式代碼可以呼叫 TextAnalyzer
方法,如下列範例所示:
using Com.Xamarin.Textcounter;
...
int numVowels = TextCounter.NumVowels (myText);
int numConsonants = TextCounter.NumConsonants (myText);
在上述範例中,我們會在類別中 TextCounter
呼叫靜態方法。 不過,您也可以具現化類別和呼叫實例方法。 例如,如果您的 。AAR 會包裝名為 的類別 Employee
,其具有 實例方法 buildFullName
,您可以具現化 MyClass
並使用它,如下所示:
var employee = new Com.MyCompany.MyProject.Employee();
var name = employee.BuildFullName ();
下列步驟會將程式代碼新增至應用程式,以便提示使用者輸入文字、使用 TextCounter
來分析文字,然後顯示結果。
以 下列 XML 取代 BindingTest 配置 (Main.axml)。 此版面設定有 用於文字輸入的 ,以及用於起始元音和同音計數的兩個 EditText
按鈕:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation ="vertical"
android:layout_width ="fill_parent"
android:layout_height ="fill_parent" >
<TextView
android:text ="Text to analyze:"
android:textSize ="24dp"
android:layout_marginTop ="30dp"
android:layout_gravity ="center"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content" />
<EditText
android:id ="@+id/input"
android:text ="I can use my .AAR file from C#!"
android:layout_marginTop ="10dp"
android:layout_gravity ="center"
android:layout_width ="300dp"
android:layout_height ="wrap_content"/>
<Button
android:id ="@+id/vowels"
android:layout_marginTop ="30dp"
android:layout_width ="240dp"
android:layout_height ="wrap_content"
android:layout_gravity ="center"
android:text ="Count Vowels" />
<Button
android:id ="@+id/consonants"
android:layout_width ="240dp"
android:layout_height ="wrap_content"
android:layout_gravity ="center"
android:text ="Count Consonants" />
</LinearLayout>
以下列程式代碼取代MainActivity.cs的內容。 如此範例所示,按鈕事件處理程式會呼叫 位於 中的包裝 TextCounter
方法。AAR 並使用快顯通知來顯示結果。 請注意系 using
結連結庫命名空間的 語句(在此案例中為 Com.Xamarin.Textcounter
):
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Views.InputMethods;
using Com.Xamarin.Textcounter;
namespace BindingTest
{
[Activity(Label = "BindingTest", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
InputMethodManager imm;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
var vowelsBtn = FindViewById<Button>(Resource.Id.vowels);
var consonBtn = FindViewById<Button>(Resource.Id.consonants);
var edittext = FindViewById<EditText>(Resource.Id.input);
edittext.InputType = Android.Text.InputTypes.TextVariationPassword;
edittext.KeyPress += (sender, e) =>
{
imm.HideSoftInputFromWindow(edittext.WindowToken, HideSoftInputFlags.NotAlways);
e.Handled = true;
};
vowelsBtn.Click += (sender, e) =>
{
int count = TextCounter.NumVowels(edittext.Text);
string msg = count + " vowels found.";
Toast.MakeText (this, msg, ToastLength.Short).Show ();
};
consonBtn.Click += (sender, e) =>
{
int count = TextCounter.NumConsonants(edittext.Text);
string msg = count + " consonants found.";
Toast.MakeText (this, msg, ToastLength.Short).Show ();
};
}
}
}
編譯並執行 BindingTest 專案。 應用程式會啟動並顯示左側的螢幕快照( EditText
已使用某些文字初始化,但您可以點選以變更它)。 當您點選 COUNT VOWELS 時,快顯通知會顯示如右側所示的音像數目:
請嘗試點選 [ COUNT CONSONANTS ] 按鈕。 此外,您可以修改文字行,然後再次點選這些按鈕,以測試不同的元音和同音計數。
訪問。AAR 資源
Xamarin 工具會 從 合併 R 數據。AAR 進入您應用程式的 Resource 類別。 因此,您可以存取 。您配置中的 AAR 資源(以及來自程式代碼後置),與存取專案 [資源] 路徑中的資源相同。
若要存取映像資源,請使用 包裝在 內之映像的 Resource.Drawable 名稱。Aar。 例如,您可以在 中參考 image.png 。使用 @drawable/image
的 AAR 檔案:
<ImageView android:src="@drawable/image" ... />
您也可以存取位於 中的資源配置。Aar。 若要這樣做,請使用 Resource.Layout 名稱做為封裝在 內的配置。Aar。 例如:
var a = new ArrayAdapter<string>(this, Resource.Layout.row_layout, ...);
textanalyzer.aar 範例包含位於 res/drawable/monkey.png 的影像檔。 讓我們存取此映像資源,並在我們的範例應用程式中使用它:
編輯 BindingTest 版面配置 (Main.axml),並將 新增ImageView
至容器的LinearLayout
結尾。 這ImageView
會顯示在 @drawable/monkey 中找到的影像;此影像將會從 textanalyzer.aar 的資源區段載入:
...
<ImageView
android:src ="@drawable/monkey"
android:layout_marginTop ="40dp"
android:layout_width ="200dp"
android:layout_height ="200dp"
android:layout_gravity ="center" />
</LinearLayout>
編譯並執行 BindingTest 專案。 應用程式會啟動並顯示左側的螢幕快照 – 當您點選 COUNT CONSONANTS 時,結果會顯示在右側:
恭喜! 您已成功繫結 Java 連結函式庫 。Aar!
摘要
在本逐步解說中,我們建立了的系結連結庫。AAR 檔案,將系結連結庫新增至最低測試應用程式,並執行應用程式以確認 C# 程式代碼可以呼叫 位於中的 Java 程式代碼。AAR 檔案。 此外,我們擴充了應用程式,以存取並顯示位於 中的影像資源。AAR 檔案。