Not: Android uygulaması oluşturmak için Bazel kullanmayla ilgili bilinen sınırlamalar vardır. Bilinen sorunların listesini görmek için GitHub team-Android hotspot'u ziyaret edin. Bazel ekibi ve Açık Kaynak Yazılım'a (OSS) katkıda bulunanlar, bilinen sorunları gidermek için aktif olarak çalışsalar da kullanıcılar, Android Studio'nun Bazel projelerini resmi olarak desteklemediğinin farkında olmalıdır.
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:
- Bazel. Yüklemek için yükleme talimatlarını uygulayın.
- Android Studio. Yüklemek için Android indirme adımlarını uygulayın Studio'yu seçin. SDK'yı indirmek ve ortamınızı yapılandırmak için kurulum sihirbazını çalıştırın.
- (İsteğe bağlı) Git. Android uygulama projesini indirmek için
git
uygulamasını kullanın.
Ö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:
Ş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
paketlerini ekleyebilirsiniz.
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ı depolarbazel-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:
Ş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:
- GitHub'da açık sorunlar
- Mobil yükleme hakkında daha fazla bilgi edinin.
- Maven'den AppCompat, Guava ve JUnit gibi harici bağımlılıkları entegre etme rules_jvm_external kullanan depolar
- robolectric-bazel ile Robolectric testlerini çalıştırma inceleyebilirsiniz.
- Uygulamanızı Android araç testleriyle test etme
- C ve C++ kodunu NDK ile Android uygulamanıza entegre etme
- Aşağıdakilere ilişkin diğer Bazel örnek projelerini görün:
Mutlu binalar!