Gizem: Android Studio'nun Proje Yapısı ve Derleme Sistemi
Bunun Gradle Build System'den mi kaynaklandığını bilmiyorum (buna bahse girerim), ancak şimdiye kadar ne anladığımı size söyleyeceğim.
Güncelleme 4: 2014/09/11 Eklendi Cheat Sheet için BuildTypes
, Flavors
ve Variants
(nihayet bu yazmak için emin hissediyorum: D)
Güncelleme 3: 2014/09/11 hassas olmak karşılaştırma çalışma alanları ve projeleri Güncelleme
Güncelleme 2: 2014/04/17 AS proje yapısına daha fazla ayrıntı eklendi
Güncelleme 1: 2013/07/29 IntelliJ Proje Yapısı eklendi
IntelliJ'in Proje yapısı (sonunda gösterilmiştir) android eklentili IntelliJ içindir. Ancak Android Studio'nun şu şekilde bölünmüş bir proje yapısı vardır:
Yapı: Projeler ve Modüller
Modül içinde Android Studio bir gibidir projede yer Eclipse
Proje içinde Android Studio bir gibidir çalışma içinde Eclipse (kesin konuşmak gerekirse, birbirine bağlı projeler ile bir çalışma alanı)
Gönderen belgelerinde (Android Studio Intellij IDEA dayanmaktadır):
IntelliJ IDEA'da ne yaparsanız yapın, bunu bir proje bağlamında yaparsınız. Proje, eksiksiz bir yazılım çözümünü temsil eden bir organizasyon birimidir.
Bitmiş ürününüz bir dizi ayrı, izole modüle ayrılabilir, ancak bu onları bir araya getiren ve daha büyük bir bütün halinde bağlayan bir proje tanımıdır.
Android için bu, uygulama başına bir proje ve kitaplık ve test uygulaması başına bir modül anlamına gelir.
Aynı proje içinde birden fazla uygulama oluşturmaya çalışırsanız birden fazla sorun vardır. Mümkün, ancak denerseniz (benim yaptığım gibi), neredeyse her şeyin proje başına tek bir uygulama ile çalışacak şekilde tasarlandığını göreceksiniz.
Örneğin, birden fazla uygulamayla hiçbir anlam ifade etmeyen "projeyi yeniden oluşturma" seçeneği vardır, diğer birçok proje ayarı işe yaramaz ve birden fazla deponuz olduğunda yerleşik VCS sistemi harika değildir.
Yapı: Klasör Yapısı
Üst Düzey Klasörler
1. Ana Proje
Bu, tüm proje bağlamı olacaktır ( Eclipse Land: Çalışma alanınız gibi, ancak projenizle ilgili olanlarla sınırlıdır). Ör: HelloWorldProject
verdiğiniz başvurunun adıHelloWorld
2.. Fikir
Bu, projeye özel meta verilerin Android Studio (AS) tarafından depolandığı yerdir. ( Eclipse Land: project.properties
dosya)
3. Proje Modülü
Bu gerçek proje. ör: HelloWorld
verdiğiniz uygulama adınız HelloWorld ise
4. dereceli
Bu, gradle oluşturma sisteminin kavanoz paketleyicisinin, yani bu kavanozun, AS'nin Windows'ta kurulu gradle (benim durumumdaki işletim sistemi) ile nasıl iletişim kurduğu yerdir.
5. Dış Kitaplıklar
Bu aslında bir klasör değil, Başvurulan Kitaplıkların ( Eclipse Land: Başvurulan Kitaplıklar) gösterildiği bir yerdir . Hedeflenen Platform burada vb. Gösterilir.
[ Yan not: Bu, Eclipse Land'deki çoğumuzun başvurulan kitaplıkları siler ve referans hatalarını düzeltmek için Proje Özelliklerini Onarırdı, hatırladın mı?]
Ayrıntılı Proje Klasörü
Bu, yukarıdaki listede 3 numara. Aşağıdaki alt dizinlere sahiptir
1. inşa
Bu, make
sürecin tüm çıktılarına sahiptir, yani classes.dex, derlenmiş sınıflar ve kaynaklar vb.
Android Studio GUI'de yalnızca birkaç klasör gösterilir. Önemli olan , R.java'nızın burada ,build/source/<flavor>/r/<build type(optional)>/<package>/R.java
2. kitaplıklar
Bu, tutulma diyarında da gördüğünüz standart libs klasörüdür
3. src
Burada yalnızca Eclipse Land'deki klasör ve klasöre karşılık gelen java
ve res
klasörünü görürsünüz . Bu IMHO sadeleştirmesi çok memnuniyetle karşılanmaktadır.src
res
Modüllere İlişkin Not:
Modüller Eclipse Land projeleri gibidir. Buradaki fikir, uygulama projesinin bağlı olduğu bir uygulama projeniz (yukarıdaki listede Modül # 3) ve birkaç kitaplık projeniz (küresel proje klasörü altında ayrı Modüller olarak (yukarıdaki listede # 1)) olmasıdır. Bu kütüphane projelerinin diğer uygulamalarda nasıl yeniden kullanılabileceğini hala bulamadım.
[ Yan not: Tüm yeniden düzenlemenin src klasöründeki basitleştirme gibi bazı faydaları vardır, ancak pek çok karmaşıklığı vardır. Zorlukların başlıca nedeni bu yeni proje düzenindeki ÇOK ÇOK ince dokümantasyondur.]
Yeni Yapı Sistemi
Yeni Derleme Sistemi için Kullanıcı Kılavuzu
Lezzetlerin ve yapı tiplerinin açıklaması, vb. - Kargaşa ne hakkında?
Tatlar ve yapı tipleri için CheatSheet
BuildType: debug
ve tüm projelerde varsayılan release
olarak buildTypes
mevcuttur. Farklı APK'lar oluşturmak için AYNI KODU oluşturmak / derlemek içindir . Örneğin, release
proguard'ı çalıştırmak isteyeceğiniz APK'larda (gizleme için), anahtarınızla imzalayın (hata ayıklama anahtarına karşı olduğu gibi), optimizasyonları çalıştırın (belki proguard veya diğer araçlar aracılığıyla), biraz farklı packageNames
kullanın ( com.company.product
için release
ve com.company.product.debug
için kullanıyoruz debug
), vb. Ayrıca BuildConfig.DEBUG
, release
derlemelerde ( uygulamayı yavaşlattığı için) logcat'e günlük kaydını kapatmak için bir hata ayıklama bayrağı ( ) kullanırız . Bu, debug
geliştirme sırasında daha hızlı bir derleme, aynı zamanda release
oyun mağazasına koymak için optimize edilmiş bir yapı sağlar.
Ürün Lezzeti: Varsayılan tat yoktur (veya kesin olmak gerekirse, varsayılan lezzet boştur / isimsizdir). FARKLI KODUN bulunduğu ücretsiz sürüm veya ücretli sürümFlavors
olabilir . Aynı Kodu paylaşırlar ancak birkaç kaynak kod dosyasının veya kaynağın farklı sürümlerini (veya sürümlerini paylaşmazlar ).Main
BuildVariant: A buildVariant
, oluşturulan bir APK'nin gerçekte karşılık geldiği şeydir. Öyle (sırayla) Product Flavor
+ Build Type
= olarak adlandırılırlarBuild Variant
.
Örnek 1: Eğer varsa free
ve paid
iki tatlar olarak. Alacağınız derleme varyantları şunlardır:
Ücretsiz - Hata Ayıklama
Ücretsiz -
Ücretli Yayın - Hata
Ayıklama Ücretli - Yayın
Bu, 4 olası APK yapılandırmasıdır. Birkaç yapılandırmaları belirli projede mantıklı olmayabilir, ancak bunlar şunlardır mevcut.
Örnek 2: (yeni projeler için / tat yok) buildVariants
Varsayılan aroma isimsiz / boş olduğundan kullanılabilir 2 veya APK'nız var:
hata ayıklama
sürümü
.İdea (1) klasörü, esas olarak dahili IntelliJ IDEA bilgilerinin bulunduğu bir dizi alt klasör içerir.
Src (2) klasörü, uygulamanızın işlevselliğini uygulayan MyActivity.java (3) dosyası kaynak kodunu içerir. Dosya com.example paketine aittir.
Res (4) klasörü çeşitli görsel kaynakları içerir.
Layout / main.xml dosyası (5) , çeşitli türlerdeki kaynaklardan oluşan uygulamanın görünümünü tanımlar.
Değerler klasörü (6) , çeşitli türlerdeki kaynakları açıklayan .xml dosyalarını depolamaya yöneliktir. Halihazırda, klasör, Dize kaynakları tanımlarına sahip bir strings.xml dosyası içerir. Renk Ekleme bölümünde de göreceğiniz gibi, düzen klasörü ayrıca örneğin bir renk tanımlayıcısı içerebilir.
Çekilebilir klasör (7) görüntüleri içerir.
Klasör gen (8) içeren R.java (9) dosyasını linkleri o görsel kaynakları ve Java kaynak kodu. Aşağıdaki bölümlerde göreceğiniz gibi IntelliJ IDEA, statik kaynaklar ve R.java arasında sıkı entegrasyonu destekler. Herhangi bir kaynak eklenir veya çıkarılır eklenmez, R.java'daki ilgili sınıflar ve sınıf alanları buna göre otomatik olarak oluşturulur veya kaldırılır. R.java dosyası da com.example paketine aittir.