共用方式為


繫結 .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 檔案:

  1. 建立新的 Java Bindings Library 專案。

  2. 新增單一 。專案的 AAR 檔案。 繫結專案只能包含單一 。Aar。

  3. 設定的適當建置動作。AAR 檔案。

  4. 選擇的目標架構。AAR 支援。

  5. 建置系結連結庫。

建立系結連結庫之後,我們將開發小型 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 封裝的影像資源:

Xamarin 猴子影像

此影像資源位於 textanalyzer.aar 中的 res/drawable/monkey.png

建立系結連結庫

從下列步驟開始之前,請先下載範例 textanalyzer.aar Android 封存盤案:

  1. 從 Android Bindings Library 範本開始,建立新的 Bindings Library 專案。 您可以使用 Visual Studio for Mac 或 Visual Studio(以下螢幕快照顯示 Visual Studio,但 Visual Studio for Mac 非常類似)。 將解決方案 命名為 AarBinding

    建立 AarBindings 專案

  2. 範本包含 您新增的 Jars 資料夾。系結連結庫專案的 AAR(s)。 以 滑鼠右鍵按下 Jars 資料夾,然後選取 [ 新增 > 現有專案]:

    新增現有項目

  3. 流覽至稍早下載的 textanalyzer.aar 檔案,選取它,然後按兩下 [ 新增]:

    新增 textanalayzer.aar

  4. 確認 textanalyzer.aar 檔案已成功新增至專案:

    已新增 textanalyzer.aar 檔案

  5. 將 textanalyzer.aar[建置動作] 設定為 AndroidLibrary。 在 Visual Studio for Mac 中,以滑鼠右鍵按兩下 textanalyzer.aar 以設定建置動作。 在 Visual Studio 中,您可以在 [屬性] 窗格中設定 [建置動作] :

    將 textanalyzer.aar 建置動作設定為 AndroidLibrary

  6. 開啟專案 [屬性] 以設定 目標 Framework。 如果 為 。AAR 會使用任何 Android API,將 Target Framework 設定為 的 API 層級。AAR 預期。 (如需一般目標 Framework 設定和 Android API 層級的詳細資訊,請參閱 瞭解 Android API 層級。)

    設定系結連結庫的目標 API 層級。 在此範例中,我們可以自由使用最新的平臺 API 層級 (API 層級 23),因為我們 的 textanalyzer 與 Android API 沒有相依性:

    將目標層級設定為 API 23

  7. 建置系結連結庫。 Bindings Library 專案應該會順利建置,並在下列位置產生輸出.DLL: AarBinding/bin/Debug/AarBinding.dll

使用系結連結庫

若要在 Xamarin.Android 應用程式中使用此.DLL,您必須先新增系結連結庫的參考。 使用下列步驟:

  1. 我們會在與系結連結庫相同的解決方案中建立此應用程式,以簡化本逐步解說。 (取用系結連結庫的應用程式也可以位於不同的解決方案中。建立新的 Xamarin.Android 應用程式:以滑鼠右鍵按兩下方案,然後選取[ 新增專案]。 將新專案 命名為 BindingTest

    建立新的 BindingTest 專案

  2. 滑鼠右鍵按兩下 BindingTest 專案的 [參考] 節點,然後選取 [新增參考...]:

    按兩下 [新增參考]

  3. 選取稍早建立的 AarBinding 專案,然後按兩下 [ 確定]:

    檢查 AAR 系結專案

  4. 開啟 BindingTest 專案的 [參考] 節點,以確認 AarBinding 參考存在:

    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 時,快顯通知會顯示如右側所示的音像數目:

執行 BindingTest 的螢幕快照

請嘗試點選 [ 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 時,結果會顯示在右側:

BindingTest 顯示同音計數

恭喜! 您已成功繫結 Java 連結函式庫 。Aar!

摘要

在本逐步解說中,我們建立了的系結連結庫。AAR 檔案,將系結連結庫新增至最低測試應用程式,並執行應用程式以確認 C# 程式代碼可以呼叫 位於中的 Java 程式代碼。AAR 檔案。 此外,我們擴充了應用程式,以存取並顯示位於 中的影像資源。AAR 檔案。