Bazel Eğitimi: Android Uygulaması Oluşturma

. Sorun bildirin Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Bu eğiticide, Bazel kullanarak basit bir Android uygulamasının nasıl oluşturulacağı ele alınmaktadır.

Bazel, Android kuralları.

Bu eğitim Windows, macOS ve Linux kullanıcıları için hazırlanmıştır ve Bazel veya Android uygulama geliştirme konusunda deneyim sahibi olmanız gerekir. Herhangi bir teknik herhangi bir Android kodu yazabilirsiniz.

Neler öğreneceksiniz?

Bu eğitimde şunları öğreneceksiniz:

  • Bazel ve Android Studio'yu yükleyerek ortamınızı ayarlayın. örnek projeyi indirirsiniz.
  • Kaynak kodunu içeren bir Bazel çalışma alanı ayarlama ve üst düzeyini tanımlayan bir WORKSPACE dosyası için workspace Directory'ye gidin.
  • WORKSPACE dosyasını, gerekli referansları içerecek şekilde güncelleyin. dış bağımlılıkları (ör. Android SDK)
  • Bir BUILD dosyası oluşturun.
  • Uygulamayı Bazel ile oluşturun.
  • Uygulamayı bir Android emülatörüne veya fiziksel cihaza dağıtıp çalıştırın.

Başlamadan önce

Bazel'i yükleme

Eğiticiye başlamadan önce aşağıdaki yazılımları yükleyin:

Örnek projeyi alma

Örnek proje için şurada temel bir Android uygulama projesi kullanın: Bazel'in örnek deposu.

Bu uygulamada, tıklandığında karşılama mesajı yazdıran tek bir düğme var:

Düğmeden karşılama mesajı

Şekil 1. Android uygulama düğmesinden karşılama mesajı.

Depoyu git ile klonlayın (veya ZIP dosyasını indirin) doğrudan):

git clone https://github.com/bazelbuild/examples

Bu eğitimin örnek projesi examples/android/tutorial konumundadır. Örneğin, Eğiticinin geri kalanında, komutları bu dizinde yürüteceksiniz.

Kaynak dosyaları inceleyin

Uygulamanın kaynak dosyalarına göz atın.

.
├── README.md
└── src
    └── main
        ├── AndroidManifest.xml
        └── java
            └── com
                └── example
                    └── bazel
                        ├── AndroidManifest.xml
                        ├── Greeter.java
                        ├── MainActivity.java
                        └── res
                            ├── layout
                            │   └── activity_main.xml
                            └── values
                                ├── colors.xml
                                └── strings.xml

Önemli dosya ve dizinler şunlardır:

Ad Konum
Android manifest dosyaları src/main/AndroidManifest.xml ve src/main/java/com/example/bazel/AndroidManifest.xml
Android kaynak dosyaları src/main/java/com/example/bazel/MainActivity.java ve Greeter.java
Kaynak dosyası dizini src/main/java/com/example/bazel/res/

Bazel ile geliştirin

Çalışma alanını ayarlama

Çalışma alanı, şunu içeren bir dizindir: bir veya daha fazla yazılım projesine ait kaynak dosyaları içerir veWORKSPACE kökü.

WORKSPACE dosyası boş olabilir veya harici referanslar içerebilir bağımlılıkları belirleyin.

Öncelikle boş bir WORKSPACE dosyası oluşturmak için aşağıdaki komutu çalıştırın:

OS Komut
Linux, macOS touch WORKSPACE
Windows (Komut İstemi) type nul > WORKSPACE
Windows (PowerShell) New-Item WORKSPACE -ItemType file

Bazel çalıştırılıyor

Artık şu komutu kullanarak Bazel'in düzgün çalışıp çalışmadığını kontrol edebilirsiniz:

bazel info workspace

Bazel geçerli dizinin yolunu yazdırırsa devam edebilirsiniz. Öğe WORKSPACE dosyası mevcut değilse şuna benzer bir hata mesajı görebilirsiniz:

ERROR: The 'info' command is only supported from within a workspace.

Android SDK ile entegrasyon

Bazel'ın Android SDK'yı çalıştırması gerekiyor derleme araçları düşünmeye başladım. Bu, uygulamanıza bazı bilgiler eklemeniz gerektiği anlamına gelir. WORKSPACE dosyasını kullanarak Bazel'in dosyaları nerede bulacağını bilmesini sağlayın.

WORKSPACE dosyanıza aşağıdaki satırı ekleyin:

android_sdk_repository(name = "androidsdk")

Bu işlem, ANDROID_HOME tarafından başvurulan yoldaki Android SDK'sını kullanır. otomatik olarak en yüksek API düzeyini ve en yüksek API düzeyini ilgili konumda yüklü derleme araçlarının en son sürümünü kullanır.

ANDROID_HOME değişkenini Android SDK'nın konumuna ayarlayabilirsiniz. Bul Android Studio'nun SDK'sını kullanarak yüklü SDK'nın yolu Yönetici. SDK'nın varsayılan konumlara yüklendiğini varsayarsak aşağıdaki komutu kullanabilirsiniz ANDROID_HOME değişkenini ayarlamak için aşağıdaki komutları kullanın:

OS Komut
Linux export ANDROID_HOME=$HOME/Android/Sdk/
macOS export ANDROID_HOME=$HOME/Library/Android/sdk
Windows (Komut İstemi) set ANDROID_HOME=%LOCALAPPDATA%\Android\Sdk
Windows (PowerShell) $env:ANDROID_HOME="$env:LOCALAPPDATA\Android\Sdk"

Yukarıdaki komutlar, değişkeni yalnızca geçerli kabuk oturumu için ayarlar. Şunun için: aşağıdaki komutları çalıştırın:

OS Komut
Linux echo "export ANDROID_HOME=$HOME/Android/Sdk/" >> ~/.bashrc
macOS echo "export ANDROID_HOME=$HOME/Library/Android/Sdk/" >> ~/.bashrc
Windows (Komut İstemi) setx ANDROID_HOME "%LOCALAPPDATA%\Android\Sdk"
Windows (PowerShell) [System.Environment]::SetEnvironmentVariable('ANDROID_HOME', "$env:LOCALAPPDATA\Android\Sdk", [System.EnvironmentVariableTarget]::User)

Android SDK'nın mutlak yolunu da açık bir şekilde belirtebilirsiniz. ve path dahil ederek kullanılacak derleme araçlarının sürümü api_level ve build_tools_version özellikleri. api_level ve build_tools_version belirtilmemiş. android_sdk_repository kuralı SDK'daki ilgili en son sürümü kullanın. Herhangi bir SDK'da bulundukları müddetçe bu özelliklerin örnek:

android_sdk_repository(
    name = "androidsdk",
    path = "/path/to/Android/sdk",
    api_level = 25,
    build_tools_version = "30.0.3"
)

Windows'da, path özelliğinin karma tarzda yolu kullanması gerektiğini unutmayın. eğik çizgi içeren bir Windows yoludur:

android_sdk_repository(
    name = "androidsdk",
    path = "c:/path/to/Android/sdk",
)

İsteğe bağlı: Android uygulamanızda yerel kod derlemek istiyorsanız ayrıca Android NDK ve aşağıdaki satırı WORKSPACE dosyanıza ekleyerek Bazel'a dosyayı nerede bulacağını söyleyin:

android_ndk_repository(name = "androidndk")

android_sdk_repository'a benzer şekilde, Android NDK'nın yolu tahmin edilir değer varsayılan olarak ANDROID_NDK_HOME ortam değişkeninden alınır. Yol ayrıca android_ndk_repository üzerinde bir path özelliğiyle açıkça belirtilmelidir.

Daha fazla bilgi için Android Yerel Geliştirme Kiti'ni Bazel.

api_level, SDK ve NDK'nın kullandığı Android API sürümüdür hedef - örneğin, Android 6.0 için 23 ve Android 7.1 için 25. Değilse açıkça ayarlanırsa api_level, varsayılan olarak android_sdk_repository ve android_ndk_repository.

API düzeylerinin SDK ve NDK için aynı değere ayarlanmasına gerek yoktur. Bu sayfa Android sürümlerinden NDK destekli API düzeylerine yönlendiren bir harita içerir.

BUILD dosyası oluşturun

BUILD dosyası ilişkiyi açıklar. aapt veya Derlenmiş Android kaynakları gibi bir dizi derleme çıkışı arasında javac kapsamındaki sınıf dosyaları ve bunların bağımlılıkları. Bu bağımlılıklar projenin çalışma alanınızdaki kaynak dosyalarını (Java, C++) veya diğer derleme çıkışlarına ekleyin. BUILD dosya Starlark adı verilen bir dilde yazılır.

BUILD dosyaları, Bazel'de paket hiyerarşisi olarak bilinen bir kavramın parçasıdır. Paket hiyerarşisi, dizinin bulunduğu mantıksal bir yapıdır yapıya sahip olması gerekir. Her paket bir ilgili bir kaynak dosya kümesi içeren dizin (ve alt dizinleri) ve bir BUILD dosyası içerir. Paket, kendi BUILD dosyasını içerenler. Paket adı, WORKSPACE ile göreceli BUILD dosyasıdır.

Bazel'in paket hiyerarşisinin, kavram olarak Java'dan farklı olduğunu unutmayın BUILD dosyasının bulunduğu Android App dizininizin paket hiyerarşisi ancak dizinler aynı şekilde düzenlenebilir.

Bu eğitimdeki basit Android uygulaması için src/main/ dilindeki kaynak dosyalar tek bir Bazel paketi oluşturacaksınız. Daha karmaşık bir projede birçok iç içe pakettir.

android_library kuralı ekleme

BUILD dosyası, Bazel için birkaç farklı bildirim türü içerir. İlgili içeriği oluşturmak için kullanılan en önemli türü oluşturma kuralı Bazel bir kaynak kümesinden ara veya nihai bir yazılım çıktısı oluşturma bağımlılığı olabilir. Bazel iki derleme kuralı sağlar: android_library ve android_binary, şunları yapabilirsiniz: geliştirmenizi sağlar.

Bu eğitim için ilk olarak Bazel'a Android kitaplığı oluşturmasını söyleyen android_library kuralı modülünü uygulama kaynak kodundaki ve kaynak dosyalarından çıkarır. Daha sonra android_binary kuralı ile Bazel'a Android uygulama paketini nasıl derleyeceğini bildirir.

src/main/java/com/example/bazel dizininde yeni bir BUILD dosyası oluşturun, ve yeni bir android_library hedefi bildir:

src/main/java/com/example/bazel/BUILD:

package(
    default_visibility = ["//src:__subpackages__"],
)

android_library(
    name = "greeter_activity",
    srcs = [
        "Greeter.java",
        "MainActivity.java",
    ],
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**"]),
)

android_library derleme kuralı, kaynak dosyalardan bir kitaplık modülü oluşturmak için Bazel'ın ihtiyaç duyduğu bilgilere erişebilir. Ayrıca, kuralın adının greeter_activity olduğunu da unutmayın. Paydaşlar için kuralı android_binary kuralında bağımlılık olarak kullanır.

android_binary kuralı ekleyin

android_binary kuralı derlemeleri Android uygulama paketi (.apk dosyası).

src/main/ dizininde yeni bir BUILD dosyası oluşturun, ve yeni bir android_binary hedefi bildir:

src/main/BUILD:

android_binary(
    name = "app",
    manifest = "AndroidManifest.xml",
    deps = ["//src/main/java/com/example/bazel:greeter_activity"],
)

Burada deps özelliği, greeter_activity kuralının çıkışına referans verir yukarıdaki BUILD dosyasına eklediniz. Bu, Bazel için bu kuralın çıkışını kontrol eder. greeter_activity kitaplık kuralı oluşturuldu ve güncel durumda. Yanıtınız hayırsa Bazel ve ardından uygulama paketi dosyasını derlemek için bu çıkışı kullanır.

Şimdi dosyayı kaydedin ve kapatın.

Uygulamayı oluşturma

Uygulamayı derlemeyi deneyin. Aşağıdaki komutu çalıştırarak android_binary hedef:

bazel build //src/main:app

build alt komutu, Bazel'a bir hedef belirleyeceksiniz. Hedef, içindeki bir derleme kuralının adı olarak belirtilir çalışma alanınıza göre paket yolu ile birlikte bir BUILD dosyası dizin. Bu örnekte hedef app, paket yolu ise //src/main/.

Bazı durumlarda paket yolunu veya hedef adını komut satırında mevcut çalışma dizininizi ve hedefin adını girin. Hedef etiketler ve yollar hakkında daha fazla ayrıntı için Etiketler bölümüne bakın.

Bazel, örnek uygulamayı derlemeye başlar. Derleme işlemi sırasında, çıktısı aşağıdaki gibi görünür:

INFO: Analysed target //src/main:app (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //src/main:app up-to-date:
  bazel-bin/src/main/app_deploy.jar
  bazel-bin/src/main/app_unsigned.apk
  bazel-bin/src/main/app.apk

Derleme çıkışlarını bulma

Bazel, hem ara hem de son derleme işlemlerinin çıktılarını bir kümeye yerleştirir. ve kullanıcı ve çalışma alanı başına çıkış dizinindeki dönüşüm sayısını artırır. Bu dizinler birbiriyle bağlantılı en üst seviyesindeki şu konumlardan düzenleyebilirsiniz: WORKSPACE:

  • bazel-bin, yürütülebilir ikili programları ve çalıştırılabilir diğer derleme çıkışlarını depolar
  • bazel-genfiles, Bazel kuralları
  • bazel-out, diğer derleme çıkışı türlerini depolar

Bazel, android_binary kuralı kullanılarak oluşturulan Android .apk dosyasını depolar bazel-bin/src/main dizininde, src/main alt dizin adı türetilir.

Bir komut isteminde bu dizinin içeriğini listeleyin ve app.apk komutunu bulun dosya:

OS Komut
Linux, macOS ls bazel-bin/src/main
Windows (Komut İstemi) dir bazel-bin\src\main
Windows (PowerShell) ls bazel-bin\src\main

Uygulamayı çalıştırın

Artık uygulamayı şuradan bağlı bir Android cihaza veya emülatöre dağıtabilirsiniz: komut satırını bazel mobile-install komutunu kullanarak gerçekleştirmeniz gerekir. Bu komut Android Hata Ayıklama Köprüsü'nü (adb) kullanır. Ayarlamanız gerekir Android Hata Ayıklama’daki talimatları uygulayarak adb kullanmanız gerekir. Dağıtımdan önce köprü yapın. Siz uygulamayı, Android cihazınızda bulunan Android emülatörüne de yüklemeyi Stüdyo'yu seçin. Aşağıdaki komutu çalıştırmadan önce emülatörün çalıştığından emin olun.

Aşağıdakileri girin:

bazel mobile-install //src/main:app

Sonra, "Bazel Eğitim Uygulaması"nı bulup başlatın:

Bazel eğitim uygulaması

Şekil 2. Bazel eğitim uygulaması.

Tebrikler! Bazel tarafından oluşturulan ilk Android uygulamanızı yüklediniz.

mobile-install alt komutunun Şunlar için kullanılabilecek --incremental flag'i uygulamanın yalnızca son dağıtımdan bu yana değişen bölümlerini dağıtmalıdır.

Ayrıca, uygulamanın hemen başlatılması için --start_app işaretini destekler. teşekkür ederiz.

Daha fazla bilgi

Daha fazla bilgi için şu sayfalara bakın:

Mutlu binalar!