lint gibi kod inceleme araçlarını kullanarak
ve kodunuzu iyileştirebilir, ancak inceleme araçları yalnızca çok fazla çıkarımda bulunabilir. Android kaynak kimlikleri
Örneğin dizeleri, grafikleri, renkleri ve diğer kaynak türlerini tanımlamak için int
kullanın.
Böylece inceleme araçları, bir dize kaynağını ne zaman belirtmeniz gerektiğini
bir renk belirtti. Bu durum, uygulamanızın yanlış oluşturulabileceği veya hiç çalışmayabileceği anlamına gelir.
en azından kod incelemelerinden
yararlanabilirsiniz.
Notlar, bunların tespit edilmesine yardımcı olmak için lint gibi kod inceleme araçlarına ipuçları sağlamanıza olanak tanır. problemleri çözebilir. Ek açıklamalar, değişkenlere eklediğiniz meta veri etiketleri olarak eklenir. parametrelerini ve döndürme değerlerini, yöntem döndürme değerlerini, iletilen parametreleri, yerel değişkenleri, birlikte çalışır. Kod inceleme araçlarıyla birlikte kullanıldığında, ek açıklamalar aşağıdakiler gibi sorunları tespit etmenize yardımcı olabilir: boş işaretçi istisnaları ve kaynak türü çakışmaları.
Android,
Jetpack Ek Açıklama Kitaplığı.
Kitaplığa
androidx.annotation
.
paketinden yararlanın.
Not: Bir modülün ek açıklama işlemcisine bağımlılığı varsa
Kotlin için kapt
veya ksp
bağımlılık yapılandırmasını kullanmalısınız
veya Java'nın annotationProcessor
bağımlılık yapılandırmasına
desteklenmektedir.
Projenize ek açıklama ekleyin
Projenizde ek açıklamaları etkinleştirmek için androidx.annotation:annotation
ekleyin
bağımlılığınızı giderebilirsiniz. Eklediğiniz tüm notlar, bir kod çalıştırdığınızda kontrol edilir
inceleme veya lint
görev olabilir.
Jetpack Notlar kitaplığına bağımlılığı ekleme
Jetpack Ek Açıklamaları kitaplığının yayınlandığı tarih:
Google'ın Maven deposu.
Projenize Jetpack Ek Açıklamalar kitaplığını eklemek için aşağıdakileri dahil edin:
satırı build.gradle
veya dependencies
blokunda
build.gradle.kts
dosyası:
Kotlin
dependencies { implementation("androidx.annotation:annotation:1.8.2") }
Eski
dependencies { implementation 'androidx.annotation:annotation:1.8.2' }
Kendi kitaplık modülünüzde ek açıklamalar kullanıyorsanız, ek açıklamalar
annotations.zip
dosyasındaki XML biçimindeki Android Arşivi (AAR) yapısı.
androidx.annotation
bağımlılığı, aşağı akış kullanıcıları için bağımlılık teşkil etmez
seçin.
Not: Başka Jetpack kitaplıklarını kullanıyorsanız
androidx.annotation
bağımlılığını eklemeniz gerekmeyebilir. Çünkü diğer birçok
Jetpack kitaplıkları, Ek Açıklama Kitaplığı'na bağlı olduğundan
ek açıklamalar.
Jetpack deposuna eklenen ek açıklamaların tam listesi için
Jetpack Ek Açıklama Kitaplığı
bakın veya otomatik tamamlama özelliğini kullanarak
import androidx.annotation.
ifadesi.
Kod incelemeleri çalıştırma
Android Studio'dan ek açıklamaları doğrulama ve Analiz et'i > İnceleyin: tıklayın. Android Studio, kodunuzun gerektiği yerlerde olası sorunları işaretlemek için çakışma mesajları gösterir ve olası çözümler önermek için ek açıklamalarla çelişir.
Ayrıca,
Komut satırını kullanarak lint
görevi. Bu, işaretleme sorunlarını çözmek için
bir sürekli entegrasyon sunucusuyla lint
görevi boş değeri zorunlu kılmaz
ek açıklamalar (aşağıdaki bölümde açıklanmıştır); bunu yalnızca Android Studio yapar. Daha fazla
lint'i etkinleştirme ve çalıştırma hakkında bilgi
daha fazla bilgi edinmek için Kodunuzu lint ile iyileştirme
kontrol eder.
Ek açıklama çakışmaları uyarı oluştursa da bu uyarılar uygulamanızı engellemez bazı ipuçları vereceğim.
Boşluk ek açıklamaları
Nullness ek açıklamaları, Java kodunda değerlerin boş olup olamayacağını uygulamak açısından yararlı olabilir. Bunlar Kotlin kodunda daha az faydalıdır çünkü Kotlin, derleme zamanıdır.@Nullable
ve
@NonNull
ek açıklama
belirli bir değişkenin, parametrenin veya döndürülen değerin boşluğunu kontrol etmek için kullanılır. @Nullable
ek açıklama, boş olabilen bir değişkeni, parametreyi veya dönüş değerini belirtir.
@NonNull
, boş olamayacak bir değişkeni, parametreyi veya döndürülen değeri gösterir.
Örneğin, boş değer içeren bir yerel değişken bir yönteme parametre olarak aktarılırsa
bu parametreye ekli @NonNull
ek açıklamasıyla birlikte, kod oluşturulduğunda
boş olmayan bir çakışmayı gösteren uyarı. Ayrıca, bir sonucun
yöntem, sonucun boş olup olmadığı kontrol edilmeden @Nullable
tarafından işaretlendi.
bir nullluk uyarısıdır. Bir yöntemin döndürülen değerinde yalnızca @Nullable
kullanın
yöntemini kullanın.
Aşağıdaki örnekte, işlem sırasında boş değer gösterilmektedir. Kotlin örnek kodu,
Oluşturulan bayt koduna otomatik olarak eklendiği için @NonNull
ek açıklaması
null olmayan bir tür belirtildiğinde. Java örneği, @NonNull
ek açıklamasından yararlanıyor
iletilen parametre değerlerinin doğruluğunu kontrol etmek için context
ve attrs
parametrelerinde
boş değildir. Ayrıca onCreateView()
yönteminin kendisinin null değer döndürmediği de kontrol edilir:
Kotlin
... /** Annotation not used because of the safe-call operator(?)**/ override fun onCreateView( name: String?, context: Context, attrs: AttributeSet ): View? { ... } ...
Java
import androidx.annotation.NonNull; ... /** Add support for inflating the <fragment> tag. **/ @NonNull @Override public View onCreateView(String name, @NonNull Context context, @NonNull AttributeSet attrs) { ... } ...
Boş değer atanabilirlik analizi
Android Studio, otomatik olarak çıkarımda bulunmak için boş değer atanabilirlik analizi çalıştırmayı destekler kullanabilirsiniz. Boş değer analizi taramaları aşağıdakileri tespit etmek için kodunuzdaki yöntem hiyerarşileri genelinde sözleşmeleri yapar:
- Boş değer döndürebilen çağrı yöntemleri.
- Null döndürmemesi gereken yöntemler.
- Alanlar, yerel değişkenler ve parametreler gibi null.
- Alanlar, yerel değişkenler ve parametreler gibi boş bir değer kullanabilirsiniz.
Ardından analiz, uygun boş ek açıklamaları otomatik olarak tespit edilen yerleri görebilirsiniz.
Android Studio'da boş değer atanabilirlik analizi çalıştırmak için Analiz et'i >
Boşluğu Çıkar. Android Studio, Android @Nullable
ve @NonNull
ek açıklamalarını
tespit etmiş olursunuz. Boş analiz çalıştırdıktan sonra,
enjekte edilen ek açıklamalar.
Not: Boş değer ek açıklamaları eklerken otomatik tamamlama
IntelliJ'i öner
@Nullable
ve
Android boş ek açıklamaları yerine @NotNull
ek açıklamaları
ve ilgili kitaplığı otomatik olarak içe aktarabilir. Ancak Android Studio,
lint kontrol aracı yalnızca Android null ek açıklamalarını arar. Doğrulama sırasında
ek açıklamaları kullanmak istiyorsanız projenizde Android null ek açıklamalarının
lint denetleyici, kod incelemesi sırasında sizi düzgün bir şekilde bilgilendirebilir.
Kaynak ek açıklamaları
Çekilebilir ve dize kaynakları gibi kaynaklara yapılan Android referansları tam sayı olarak geçirildiği için kaynak türlerini doğrulamak yararlı olabilir.
Bir parametrenin String
gibi belirli bir kaynak türüne başvurmasını bekleyen kod
beklenen referans türüne (int
) iletilebilir, ancak gerçekte farklı bir referans türüne
R.string
kaynağı gibi.
Örneğin, @StringRes
ek açıklamalarını
bir kaynak parametresinin, aşağıda gösterildiği gibi bir R.string
referansı içerip içermediğini kontrol edin:
Kotlin
abstract fun setTitle(@StringRes resId: Int)
Java
public abstract void setTitle(@StringRes int resId)
Kod incelemesi sırasında R.string
referansı olursa ek açıklama bir uyarı oluşturur
iletilemez.
@DrawableRes
, @DimenRes
, @ColorRes
ve @InterpolatorRes
gibi diğer kaynak türlerine yönelik ek açıklamalar
aynı ek açıklama biçimi kullanılarak eklenir ve kod incelemesi sırasında çalıştırılır.
Parametreniz
birden çok kaynak türünü desteklediğinden belirli bir kaynağa birden fazla kaynak türü ek açıklaması
parametresinden sonra bir değer girin. @AnyRes
hesabını kullan
ifadesini ekleyin.R
Bunu belirtmek için @ColorRes
kullanabilirsiniz, ancak
parametresi bir renk kaynağı, bir renk tam sayısı (RRGGBB
veya
AARRGGBB
biçimi) renk kaynağı olarak tanınmıyor. Bunun yerine, @ColorInt
ek açıklamasını kullanarak
değeri, parametrenin bir renk tam sayısı olması gerektiğini belirtir. Derleme araçları, test sırasında
bir renk tam sayısı yerine android.R.color.black
gibi bir renk kaynağı kimliği aktarır,
ek açıklamalı yöntemlere geri dönelim.
İleti dizisi ek açıklamaları
İleti dizisi notları, bir yöntemin belirli bir thread. Aşağıdaki ileti dizisi ek açıklamalar desteklenir:
Derleme araçları, @MainThread
ve
@UiThread
ek açıklamasını değiştirilebilir olarak sunar, böylece @UiThread
ek açıklamasını çağırabilirsiniz.
@MainThread
yöntem ve bunun tersi de geçerlidir. Ancak kullanıcı arayüzü için
Birden çok görünüme sahip sistem uygulamaları söz konusu olduğunda, iş parçacığının ana iş parçacığından farklı olması gerekir
farklı ileti dizilerinde gösteriliyor. Bu nedenle, bir uygulamanın görünüm hiyerarşisiyle ilişkili yöntemlere açıklama eklemeniz gerekir.
@UiThread
ile yalnızca uygulamanın yaşam döngüsüyle ilişkili yöntemlere
@MainThread
.
Bir sınıftaki tüm yöntemler aynı ileti dizisi gereksinimini paylaşıyorsa tek bir ileti dizisi ekleyebilirsiniz ek açıklamasını da sınıfa ekleyin ve bu ek açıklama ile sınıftaki tüm yöntemlerin aynı türden ileti dizisi.
İleti dizisi ek açıklamalarının yaygın bir kullanımı,
@WorkerThread
yalnızca uygun bir arka plan ileti dizisinden çağrılır.
Değer kısıtlaması ek açıklamaları
@IntRange
,
@FloatRange
ve
@Size
ek açıklama
geçirilen parametrelerin değerlerini doğrulayın. Hem @IntRange
hem de @FloatRange
en çok, kullanıcıların aralığı yanlış alabileceği parametrelere uygulandığında işe yarar.
@IntRange
ek açıklaması, bir tamsayı veya uzun parametrenin
değer, belirtilen aralıkta. Aşağıdaki örnekte alpha
parametresi 0 ile 255 arasında bir tam sayı değeri içermelidir:
Kotlin
fun setAlpha(@IntRange(from = 0, to = 255) alpha: Int) { ... }
Java
public void setAlpha(@IntRange(from=0,to=255) int alpha) { ... }
@FloatRange
ek açıklaması, bir kayan noktalı parametre mi yoksa çift parametre mi olduğunu kontrol eder
değeri, belirtilen bir kayan nokta değerleri aralığında olmalıdır. Aşağıdaki örnekte,
alpha
parametresi 0,0 ile 1,0 arasında bir kayan noktalı değer içermelidir:
Kotlin
fun setAlpha(@FloatRange(from = 0.0, to = 1.0) alpha: Float) {...}
Java
public void setAlpha(@FloatRange(from=0.0, to=1.0) float alpha) {...}
@Size
ek açıklaması, bir koleksiyonun boyutunu kontrol eder veya
dizi veya dizenin uzunluğudur. @Size
ek açıklaması, doğrulama için kullanılabilir
şu nitelikleri sayabiliriz:
- Minimum boyut, ör.
@Size(min=2)
- Maksimum boyut (ör.
@Size(max=2)
) - Tam boyut (ör.
@Size(2)
) - Boyutun katları olması gereken bir sayı (ör.
@Size(multiple=2)
)
Örneğin, @Size(min=1)
bir koleksiyonun boş olup olmadığını kontrol eder ve @Size(3)
bir dizinin tam olarak üç değer içerdiğini doğrular.
Aşağıdaki örnekte,
location
dizisi en az bir öğe içermelidir:
Kotlin
fun getLocation(button: View, @Size(min=1) location: IntArray) { button.getLocationOnScreen(location) }
Java
void getLocation(View button, @Size(min=1) int[] location) { button.getLocationOnScreen(location); }
İzin ek açıklamaları
@RequiresPermission
kullanın
ek açıklamasına yer verir. Tek bir izni kontrol etmek için
geçerli izinler listesinden anyOf
özelliğini kullanın. Bir dizi
allOf
özelliğini kullanın. Aşağıdaki örnekte
Yöntemi çağıran kişininsetWallpaper()
permission.SET_WALLPAPERS
izni:
Kotlin
@RequiresPermission(Manifest.permission.SET_WALLPAPER) @Throws(IOException::class) abstract fun setWallpaper(bitmap: Bitmap)
Java
@RequiresPermission(Manifest.permission.SET_WALLPAPER) public abstract void setWallpaper(Bitmap bitmap) throws IOException;
Aşağıdaki örnek, copyImageFile()
yöntemini çağıran kişinin kullanılmasını gerektiriyor
hem harici depolama alanına okuma erişimi hem de konuma okuma erişimi olması
Kopyalanan resimdeki meta veri:
Kotlin
@RequiresPermission(allOf = [ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.ACCESS_MEDIA_LOCATION ]) fun copyImageFile(dest: String, source: String) { ... }
Java
@RequiresPermission(allOf = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.ACCESS_MEDIA_LOCATION}) public static final void copyImageFile(String dest, String source) { //... }
Amaçlarla ilgili izinler için intent işlem adı:
Kotlin
@RequiresPermission(android.Manifest.permission.BLUETOOTH) const val ACTION_REQUEST_DISCOVERABLE = "android.bluetooth.adapter.action.REQUEST_DISCOVERABLE"
Java
@RequiresPermission(android.Manifest.permission.BLUETOOTH) public static final String ACTION_REQUEST_DISCOVERABLE = "android.bluetooth.adapter.action.REQUEST_DISCOVERABLE";
Okuma ve yazma için ayrı izinlere ihtiyaç duyan içerik sağlayıcılardaki izinler
erişimi için her izin koşulunu @RequiresPermission.Read
içinde sarmalayın.
veya @RequiresPermission.Write
not:
Kotlin
@RequiresPermission.Read(RequiresPermission(READ_HISTORY_BOOKMARKS)) @RequiresPermission.Write(RequiresPermission(WRITE_HISTORY_BOOKMARKS)) val BOOKMARKS_URI = Uri.parse("content://browser/bookmarks")
Java
@RequiresPermission.Read(@RequiresPermission(READ_HISTORY_BOOKMARKS)) @RequiresPermission.Write(@RequiresPermission(WRITE_HISTORY_BOOKMARKS)) public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks");
Dolaylı izinler
Bir izin, yöntemin parametresine sağlanan belirli değere bağlı olduğunda
@RequiresPermission
parametresi, belirli izinleri listelemeden kullanır.
Örneğin, startActivity(Intent)
yöntemi, yönteme iletilen amaç üzerinde dolaylı izin kullanır:
Kotlin
abstract fun startActivity(@RequiresPermission intent: Intent, bundle: Bundle?)
Java
public abstract void startActivity(@RequiresPermission Intent intent, @Nullable Bundle)
Dolaylı izinleri kullandığınızda derleme araçları,
bağımsız değişkeni herhangi bir @RequiresPermission
ek açıklamasına sahip olmalıdır. Daha sonra
parametrede bulunan tüm ek açıklamaları yöntemin kendisinde zorunlu kılın.
startActivity(Intent)
örneğinde, Intent
sınıfındaki ek açıklamalarda uyarılara neden oluyor
uygun olmayan bir amaç olduğunda, startActivity(Intent)
öğesinin geçersiz kullanımlarında
izinleri Şekil 1'de gösterildiği gibi yönteme aktarılır.
Derleme araçları, startActivity(Intent)
alanında ek açıklamadan uyarı oluşturur
Intent
sınıfındaki karşılık gelen intent işlemi adına ekleyin:
Kotlin
@RequiresPermission(Manifest.permission.CALL_PHONE) const val ACTION_CALL = "android.intent.action.CALL"
Java
@RequiresPermission(Manifest.permission.CALL_PHONE) public static final String ACTION_CALL = "android.intent.action.CALL";
Gerekirse, @RequiresPermission
yerine kullanabilirsiniz.
Not eklerken @RequiresPermission.Read
veya @RequiresPermission.Write
bir yöntemin parametresine benzer. Ancak @RequiresPermission
, dolaylı izinler için
okuma veya yazma izni ek açıklamalarıyla birlikte kullanılamaz.
Döndürme değeri ek açıklamaları
@CheckResult
ek açıklamasını kullanarak
bir yöntemin sonucunun veya döndürülen değerinin gerçekten kullanıldığını doğrular. Her ekip için
geçersiz olmayan yöntem ile @CheckResult
, sonuçlarını netleştirmek için
yöntemlerdir.
Örneğin, yeni Java geliştiricileri genellikle yanlışlıkla
<String>.trim()
, orijinal dizedeki boşlukları kaldırır. Not/çizim ekleniyor
@CheckResult
flag'leri olan yöntem, <String>.trim()
öğesini kullanıyor
Bu yöntemde çağrı, yöntemin döndürülen değeriyle hiçbir şey yapmaz.
Aşağıdaki örnekte checkPermissions()
yöntemin döndürülen değerinin
her zaman bu geçerlidir. Ayrıca enforcePermission()
geliştiriciye bunun yerine önerilecek bir yöntem olarak kullanabilirsiniz:
Kotlin
@CheckResult(suggest = "#enforcePermission(String,int,int,String)") abstract fun checkPermission(permission: String, pid: Int, uid: Int): Int
Java
@CheckResult(suggest="#enforcePermission(String,int,int,String)") public abstract int checkPermission(@NonNull String permission, int pid, int uid);
CallSuper ek açıklamaları
@CallSuper
ek açıklamasını kullanarak
bir geçersiz kılma yönteminin, yöntemin süper uygulamasını çağırdığını doğrulamalıdır.
Aşağıdakiler
örneği, herhangi bir geçersiz kılma yöntemininonCreate()
uygulamalar super.onCreate()
çağrısı yapar:
Kotlin
@CallSuper override fun onCreate(savedInstanceState: Bundle?) { }
Java
@CallSuper protected void onCreate(Bundle savedInstanceState) { }
Typedef ek açıklamaları
Typedef ek açıklamaları, belirli bir parametrenin, değer veya değer döndürüp döndürmediğini kontrol eder. veya alan, belirli bir sabit değer grubuna referans verir. Ayrıca kod tamamlamanın otomatik olarak izin verilen sabit değerleri sunun.
@IntDef
ve
@StringDef
tamsayı ve dize kümelerinden oluşan numaralandırılmış ek açıklamalar oluşturarak diğer
bulunur.
Typedef ek açıklamaları, yeni numaralandırılmış ek açıklama türünü bildirmek için @interface
kullanır.
@IntDef
ve @StringDef
ek açıklamalarıyla birlikte
@Retention
, yeni ek açıklamaya ek açıklama ekleyin ve
numaralandırılmış tür. @Retention(RetentionPolicy.SOURCE)
ek açıklaması, derleyiciye
.class
dosyasında saklamaması için bir uyarı oluşturun.
Aşağıdaki örnekte, bir değerin olarak tanımlar:
Kotlin
import androidx.annotation.IntDef //... // Define the list of accepted constants and declare the NavigationMode annotation. @Retention(AnnotationRetention.SOURCE) @IntDef(NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS) annotation class NavigationMode // Declare the constants. const val NAVIGATION_MODE_STANDARD = 0 const val NAVIGATION_MODE_LIST = 1 const val NAVIGATION_MODE_TABS = 2 abstract class ActionBar { // Decorate the target methods with the annotation. // Attach the annotation. @get:NavigationMode @setparam:NavigationMode abstract var navigationMode: Int }
Java
import androidx.annotation.IntDef; //... public abstract class ActionBar { //... // Define the list of accepted constants and declare the NavigationMode annotation. @Retention(RetentionPolicy.SOURCE) @IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS}) public @interface NavigationMode {} // Declare the constants. public static final int NAVIGATION_MODE_STANDARD = 0; public static final int NAVIGATION_MODE_LIST = 1; public static final int NAVIGATION_MODE_TABS = 2; // Decorate the target methods with the annotation. @NavigationMode public abstract int getNavigationMode(); // Attach the annotation. public abstract void setNavigationMode(@NavigationMode int mode); }
Bu kodu derlediğinizde, mode
parametresi uyumlu değilse bir uyarı oluşturulur.
tanımlanan sabit değerlerden birine referans verin (NAVIGATION_MODE_STANDARD
,
NAVIGATION_MODE_LIST
veya NAVIGATION_MODE_TABS
).
@IntDef
ve @IntRange
işaretlerini birleştirerek
Tam sayı, belirli bir sabit sayı veya aralık içindeki bir değer olabilir.
Sabit değerleri işaretlerle birleştirmeyi etkinleştir
Kullanıcılar izin verilen sabit değerleri bir işaretle (|
gibi) birleştirebiliyorsa
&
, ^
vb.) temel alarak bir ek açıklama
flag
özelliğini kullanabilirsiniz.
Aşağıdaki örnek, geçerli bir listeyle DisplayOptions
ek açıklaması oluşturur
DISPLAY_
sabitleri:
Kotlin
import androidx.annotation.IntDef ... @IntDef(flag = true, value = [ DISPLAY_USE_LOGO, DISPLAY_SHOW_HOME, DISPLAY_HOME_AS_UP, DISPLAY_SHOW_TITLE, DISPLAY_SHOW_CUSTOM ]) @Retention(AnnotationRetention.SOURCE) annotation class DisplayOptions ...
Java
import androidx.annotation.IntDef; ... @IntDef(flag=true, value={ DISPLAY_USE_LOGO, DISPLAY_SHOW_HOME, DISPLAY_HOME_AS_UP, DISPLAY_SHOW_TITLE, DISPLAY_SHOW_CUSTOM }) @Retention(RetentionPolicy.SOURCE) public @interface DisplayOptions {} ...
Bir ek açıklama bayrağıyla kod derlediğinizde, veya döndürülen değer geçerli bir kalıptan yararlanmıyor.
Ek açıklamayı koru
@Keep
ek açıklama, kod kullanıldığında ek açıklamalı bir sınıfın veya yöntemin kaldırılmamasını sağlar.
derleme sırasında küçültülür. Bu ek açıklama, genelde
derleyicinin şunları yapmasını önlemek için yansıma yoluyla erişilen yöntem ve sınıflara eklenir
olarak değerlendirilecektir.
Dikkat: Ek açıklama eklediğiniz sınıflar ve yöntemler
@Keep
kullanmak, hiç kapatmasanız bile her zaman uygulamanızın APK'sında
bu sınıflara ve yöntemlere uygulamanızın mantığına uygun olarak referansta bulunmalısınız.
Uygulamanızın boyutunu küçük tutmak için
her @Keep
ek açıklaması için ekleyebilirsiniz. Proje yöneticisi olarak
ek açıklamalı bir sınıfa veya yönteme erişmek için
ProGuard kurallarınızda sınıfı belirten -if
koşulu
düşünme egzersizi yapmaya
karar veriyor.
Kodunuzu küçültme ve hangi kodun kaldırılmayacağını belirtme hakkında daha fazla bilgi için Uygulamanızı küçültme, kodunu karartma ve optimize etme konusuna bakın.
Kod görünürlüğüyle ilgili ek açıklamalar
Kodun belirli bölümlerinin görünürlüğünü belirtmek için aşağıdaki ek açıklamaları kullanın: yöntemler, sınıflar, alanlar veya paketler.
Kodu test için görünür yap
İlgili içeriği oluşturmak için kullanılan
@VisibleForTesting
.
ek açıklama, ek açıklama eklenen bir yöntemin, dönüşüm işlemini yerine getirmek için
yöntem test edilebilir. Bu ek açıklama, şunları yapmanızı sağlayan isteğe bağlı bir otherwise
bağımsız değişkenine sahiptir:
yöntemin görünür hale getirilmesine gerek olmadığı sürece ne kadar görünür olacağını belirlemek
kullanmaya karar verebilir. Lint, istenen görünürlüğü sağlamak için otherwise
bağımsız değişkenini kullanır.
Aşağıdaki örnekte myMethod()
normal olarak private
değerine sahiptir, ancak
Testler için package-private
. VisibleForTesting.PRIVATE
ile
Bu yöntem
bağlam (ör. farklı bir derleme biriminden), private
erişiminin izin verdiği bağlam.
Kotlin
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) fun myMethod() { ... }
Java
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) void myMethod() { ... }
Ayrıca şunu da belirtebilirsiniz: @VisibleForTesting(otherwise = VisibleForTesting.NONE)
bir yöntemin yalnızca test amaçlı olduğunu gösterir. Bu form,
@RestrictTo(TESTS)
Her ikisi de aynı lint kontrolünü gerçekleştirir.
API'leri kısıtlama
@RestrictTo
ek açıklama, ek açıklamalı API'ye (paket, sınıf veya yöntem) erişimin sınırlı olduğunu gösterir.
şu şekilde:
Alt sınıflar
İçerikleri kısıtlamak için @RestrictTo(RestrictTo.Scope.SUBCLASSES)
ek açıklama formunu kullanın
Yalnızca alt sınıflara API erişimi.
Yalnızca ek açıklamalı sınıfı genişleten sınıflar bu API'ye erişebilir. Java
protected
değiştiricisi erişime izin verdiği için yeterince kısıtlayıcı değil
alakası olmayan sınıflardan geliyor. Ayrıca, bir listeden ayrılmak istediğiniz
public
yöntemini kullanarak daha fazla esneklik sağlayabilirsiniz. Çünkü daha önce
protected
ve geçersiz kılınan public
yöntemi. Ancak bir
bu, sınıfın yalnızca sınıf içindeki veya alt sınıflardaki kullanımlara yönelik olduğuna işaret eder.
Kütüphaneler
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
ek açıklama formunu kullanarak
API erişimini yalnızca kitaplıklarınızla sınırlayın.
Ek açıklamalı API'ye yalnızca kitaplık kodunuz erişebilir. Bu, yalnızca kodunuzu düzenlemenize değil,
istediğiniz paket hiyerarşisini
kolayca yükleyebilirsiniz.
koda ekleyebilirsiniz. Bu seçenek Jetpack'te zaten mevcuttur
çok fazla uygulama kodunun bulunduğu kitaplıklar da vardır. Ancak,
diğer Jetpack kitaplıklarında paylaşmak için public
olması gerekir.
Test
Diğer kullanıcıların sızdırılmasını önlemek için @RestrictTo(RestrictTo.Scope.TESTS)
ek açıklama formunu kullanın
geliştiricilerin test API'lerinize erişmesini önler.
Ek açıklamalı API'ye yalnızca test kodu erişebilir. Bu, diğer geliştiricilerin API'leri yalnızca test amaçlı geliştirme için kullanmanızı önler.