Android Studio'da Gradle nedir?


1313

Gradle benim için biraz kafa karıştırıcı ve ayrıca herhangi bir yeni android geliştiricisi için. Herkes Android Studio'da Gradle'ın ne olduğunu ve amacının ne olduğunu açıklayabilir mi? Android Studio'ya neden dahil edildi?



14
Neden Gradle gibi bir oluşturma aracı isteyeceğinizi yanıtlamak için Jeff Atwood'un bu gönderisine göz atın .
Adam S

829
Birisi burada evet, Google'da bu konuda çok fazla bağlantıya sahip olduğunu sorduğunda, gerçekten sordukları şey, soruyu sade bir dille cevaplamak ve bağlam içine koymaktır , örneğin neden ihtiyacımız var? , en çok kim kullanacak, Android Studio'da vb. Android uygulamaları oluşturmak için bunu bilmemiz gerekiyor mu? Çünkü çoğu zaman Google'da bulacağınız bağlantılar "tech-speak" dilinde ve yeni başlayanlar için kafa karıştırıcı.
Azurespot

3
@NoniA. Tam olarak düşüncelerim. Hala biraz kafam karıştı, gradle yazdığım kodu derleyen sadece arka plan işlemi mi? Ayrıca, diğer birçok cevaba baktıktan sonra, bağımlılıklardan bahsediyorlar. Onlar ne? Çok teşekkürler!

Özlü Ve burada güzel bir açıklama bakmak etsin gradle Tanıtımı . Oldukça yararlı
eRaisedToX

Yanıtlar:


1531

Kısa cevap

Gradle bir yapı sistemidir.

Uzun cevap

Android Studio'dan önce geliştirme amaçları için Eclipse'yi kullanıyordunuz ve şansınız, Eclipse olmadan Android APK'nızı nasıl oluşturacağınızı bilmiyordunuz.

Bunu komut satırında yapabilirsiniz, ancak SDK'da her aracın (dx, aapt) ne yaptığını öğrenmeniz gerekir. Eclipse, kendi yapı sistemlerini vererek hepimizi bu düşük seviyeli ama önemli, temel detaylardan kurtardı.

Şimdi, resklasörün neden klasörünüzle aynı dizinde olduğunu merak ettiniz srcmi?

Yapı sisteminin resme girdiği yer burasıdır. Derleme sistemi tüm kaynak dosyaları ( .javaveya .xml) otomatik olarak alır , ardından uygun aracı uygular (örneğin javasınıf dosyalarını alır ve dosyalara dönüştürür dex) ve hepsini tek bir sıkıştırılmış dosyada, sevgili APK'mda gruplandırır.

Bu derleme sistemi bazı kurallar kullanır: bunlara örnek olarak kaynak dosyaları (Eclipse bu \srcklasördür) veya kaynak dosyalarını (Eclipse bu \resklasördür) içeren dizini belirtmektir .

Şimdi, tüm bu görevleri otomatikleştirmek için bir senaryo olmalı; Linux'ta toplu komut dosyası veya Windows'ta toplu dosya sözdizimini kullanarak kendi derleme sisteminizi yazabilirsiniz. Anladım?

Gradle, diğer derleme sistemlerinden en iyi özellikleri alan ve bunları tek bir sistemde birleştiren başka bir derleme sistemidir. Eksikliklerine dayanılarak iyileştirildi. Bu bir olan JVM yapı sistemi esas demekse Android Studio kullanan Java kendi el yazısı yazabilirsiniz ne olduğunu.

Gradle hakkında harika bir şey, eklenti tabanlı bir sistem olmasıdır . Bu, kendi programlama diliniz varsa ve kaynaklardan bir paket (Java için bir JAR gibi çıktı) oluşturma görevini otomatikleştirmek istiyorsanız, Java veya Groovy'da tam bir eklenti yazabilirsiniz (veya Kotlin, buraya bakın ) ve dünyanın geri kalanına dağıtın.

Google neden kullandı?

Google, piyasadaki en gelişmiş derleme sistemlerinden birini gördü ve Groovy veya başka bir yeni dil öğrenmeden çok az veya hiç öğrenme eğrisi olmadan kendi komut dosyalarını yazabileceğinizi fark etti. Bu yüzden Gradle için Android eklentisini yazdılar.

build.gradleProjenizde dosya (lar) görmüş olmanız gerekir . Görevlerinizi otomatikleştirmek için komut dosyaları yazabileceğiniz yer burasıdır. Bu dosyalarda gördüğünüz kod Groovy kodudur. Eğer yazarsanız System.out.println("Hello Gradle!");konsolunuzda yazdıracaktır.

Bir derleme komut dosyasında ne yapabilirsiniz?

Basit bir örnek, gerçek oluşturma işlemi gerçekleşmeden önce bazı dosyaları bir dizinden diğerine kopyalamanız gerektiğidir. Bir Gradle derleme betiği bunu yapabilir.


11
Gradle'ın bir AndroidStudio projesini bir yerden bir yere götürürken bana sorunlar verdiğini söylemeliyim. Sürümlerin uyumsuzluğu, eksik modüller, ne olursa olsun ... bana zor zamanlar veriyordu. Proje iskeletini yeniden yarattım ve eski projeden yeni olan kod parçalarını kesip yapıştırdım. Ve bu hem kaynaklar hem de hedef için Windows altında. Şimdi Linux tabanlı bir laboratuvarda taşıyacağım.
jfmessier


4
IntelliJ'in başka bir derleme sistemine ihtiyaç duymadan Android projelerini nasıl oluşturacağını bildiğini düşündüm.
Arne Evertsson

17
Android stüdyo öncesi sistem (ler) inden daha iyi bir avantajı bağımlılık yönetimidir. Daha önce bir projede Android kitaplığı kullanmak için kaynak kodunu indirmeniz, projenize eklemeniz ve projenizle derlemeniz gerekirdi. Bunun yerine, gradle ile build.gradle'a tek bir satır eklenebilir ve gradle derlenmiş kütüphaneyi halka açık bir depodan indirir ve projenize ekler. Bazı örnekler: blog.teamtreehouse.com/android-libraries-use-every-project Bu ayrıca standart Java jar dosyaları için lib dizinine koymak yerine çalışır.
Stan Kurdziel

4
Gradle korkunç bir yapı sistemidir. Android Studio'yu kullanırken derlemeyle ilgilenmesini istiyorum. Bazı sınıflar eklemenin neden Gradle'ı yararlı olabilmesi için bir senkronizasyon yapmaya zorladığını anlamıyorum. Visual Studio ile karşılaştırma yaparak çalışmak harika (hatta X-Code) - boktan ekstralara gerek yok. IDE, Android derleme sürecinin zaman zaman ihtiyaç duyduğu ayarlar için veya eski projelerin güncellemeleri yoluyla rastgele dosyalarda gezinmeye gerek kalmadan proje ve çözümü oluşturur. Gradle, Android deneyiminin en kötü yanı.
csmith

162

Google'ın Android için kullanmak istediği yeni oluşturma aracıdır. Karıncadan daha genişletilebilir ve kullanışlı olması nedeniyle kullanılmaktadır. Geliştirici deneyimini geliştirmek içindir.

Google I / O'daki Android Geliştirici Ekibinden Xavier Ducrohet'in bir konuşmasını burada görüntüleyebilirsiniz.

Android Studio'da Xavier ve Tor Norbye tarafından da Google I / O sırasında başka bir konuşma var .


4
IntelliJ'in başka bir derleme sistemine ihtiyaç duymadan Android projelerinin nasıl oluşturulacağını zaten bildiğini düşündüm.
Arne Evertsson

1
Gradle sadece yazdığım kodu derleyen arka plan işlemi mi? Ayrıca, diğer birçok cevaba baktıktan sonra, bağımlılıklardan bahsediyorlar. Onlar ne? Teşekkürler daniel!

2
@ user5562706 Kodu derlemez, ancak kodunuzu derleyen yürütülebilir dosyayı çağırmaktan sorumludur. Kodunuzu derledikten sonra, paketlemek için başka bir görev, seçtiğiniz bir dizine kopyalamak için başka bir görev çalıştırabilir, daha sonra başka bir yere bir sunucuya yüklemek için başka bir görev çalıştırabilir ... Bu tür görevler Gradle veya herhangi bir yapı sistemi, yapacak.
Michael Berry

63

Gradle , Android Studio'da çalışan bir derleme sistemidir .

Diğer dillerde örneğin:


23
GradleBenzer olduğunu söylediğinde make, ben sadece onun konsept var
user3405291


15
Bilinmeyen bir aracın ne yaptığını ve boru hattına nerede düştüğünü öğrenmenin en hızlı yollarından biri Google'a aracın adını ve "vs" yi yazmaktır. Sonuçlar genellikle "X'e karşı Y" yi gösterir, burada Y daha tanıdık olabileceğiniz başka bir araçtır.
James Kuang

javascript için webpack
codepig

47

GradleAndroid Studio'da ne olduğu ve nasıl kullanılacağı hakkında ayrıntılı bir açıklama .

Gradle Dosyalarını Keşfetme

  1. Android Studio'da her proje oluşturduğunuzda, derleme sistemi gerekli tüm Gradle derleme dosyalarını otomatik olarak oluşturur.

Gradle Build Dosyaları

  1. Gradle derleme dosyaları Domain Specific Language or DSL, özel derleme mantığını tanımlamak ve Gradle için Android eklentisinin Android'e özgü öğeleriyle etkileşim kurmak için a kullanır.

  2. Android Studio projeleri, bağımsız olarak oluşturabileceğiniz, test edebileceğiniz ve hata ayıklayabileceğiniz bileşenler olan 1 veya daha fazla modülden oluşur. Her modülün kendi oluşturma dosyası vardır, bu nedenle her Android Studio projesi 2 çeşit Gradle derleme dosyası içerir.

  3. Üst Düzey Derleme Dosyası: Burası, projenizi oluşturan tüm modüller için ortak olan yapılandırma seçeneklerini bulacağınız yerdir.

  4. Modül Seviyesi Derleme Dosyası: Her modülün, modüle özgü derleme ayarlarını içeren kendi Gradle derleme dosyası vardır. Zamanınızın çoğunu projenizin en üst düzey derleme dosyası yerine modül düzeyindeki derleme dosyalarını düzenlemek için harcayacaksınız.

Bu build.gradledosyalara göz atmak için Android Studio'nun Proje panelini açın (Proje sekmesini seçerek) ve Gradle Scripts klasörünü genişletin. Gradle Scripts klasöründeki ilk iki öğe proje düzeyinde ve modül düzeyinde Gradle derleme dosyalarıdır

Üst Düzey Gradle Derleme Dosyası

Her Android Studio projesi tek bir üst düzey Gradle derleme dosyası içerir. Bu build.gradledosya, Gradle Scripts klasöründe görünen ve açıkça Project olarak işaretlenmiş ilk öğedir.

Çoğu zaman, bu dosyada herhangi bir değişiklik yapmanız gerekmez, ancak içeriğini ve projenizde oynadığı rolü anlamak hala yararlıdır.

Modül Seviyesi Gradle Derleme Dosyaları

Proje düzeyinde Gradle derleme dosyasına ek olarak, her modülün kendi Gradle derleme dosyası vardır. Aşağıda, temel, modül düzeyinde bir Gradle derleme dosyasının açıklamalı sürümü bulunmaktadır.

Diğer Gradle Dosyaları

Build.gradle dosyalarına ek olarak, Gradle Scripts klasörünüz diğer bazı Gradle dosyalarını da içerir. Çoğu zaman projenizde alakalı değişiklikler yaptığınızda otomatik olarak güncelleneceği için bu dosyaları el ile düzenlemeniz gerekmez. Ancak, bu dosyaların projenizdeki rolünü anlamak iyi bir fikirdir.

gradle-wrapper.properties (Gradle Sürümü)

Bu dosya, makinelerinde Gradle yüklü olmasa bile diğer kişilerin kodunuzu oluşturmasına izin verir. Bu dosya, Gradle'ın doğru sürümünün kurulu olup olmadığını kontrol eder ve gerekirse gerekli sürümü indirir.

settings.gradle

Bu dosya, projenizi oluşturan tüm modülleri referans alır.

gradle.properties (Proje Özellikleri)

Bu dosya tüm projeniz için yapılandırma bilgilerini içerir. Varsayılan olarak boştur, ancak projenize bu dosyaya ekleyerek çok çeşitli özellikler uygulayabilirsiniz.

local.properties (SDK Konumu)

Bu dosya, Android Gradle eklentisine Android SDK kurulumunuzu nerede bulabileceğini söyler.

Not: local.properties Android SDK'nın yerel kurulumuna özgü bilgiler içerir. Bu, bu dosyayı kaynak denetimi altında tutmamanız gerektiği anlamına gelir.

Önerilen okuma - Tutsplus Eğitimi

Bundan kepçeyi açıkça anladım.


1
Not o bağlantı sadece cevaplar tavsiye edilmez, SO cevaplar çözüm (vs. henüz zamanla bayat almak eğilimindedir referanslar, başka mola) için bir aramanın son nokta olmalıdır. Lütfen bağlantıyı referans olarak tutarak bağımsız bir özet eklemeyi düşünün.
Kleopatra

30

Gradle, programın kaynak kodunu oluşturan bir tür oluşturma aracıdır . Bu nedenle, Android Studio'nun önemli bir parçasıdır ve uygulamanızı geliştirmeye başlamadan önce yüklenmesi gerekir.

Ayrı olarak yüklememiz gerekmiyor, çünkü ilk projemizi yaptığımızda Android Studio bunu bizim için yapıyor.


4
Programın kaynak kodunu oluşturarak ne demek istiyorsun? Bu bir geliştiricinin işi değil mi?
committedandroider

Bu cevap, ifade biçiminde tamamen yanlıştır. Gradle, Android Studio ile birlikte gelen paketleme aracıdır, bu yüzden dikkat etmesi gereken şey apk oluşturmaktır. Kaynak kodu her zaman derleyici tarafından oluşturulur ve başka bir şey değildir.
AutomEng

Yine de başka bir sorudan, Gradle'ın güvenilir bir internet bağlantısı olmadan düzgün çalışmadığı anlaşılıyor, bu düzeltilene kadar Android Studio'yu atmam gerektiği anlamına mı geliyor?
Michael

2
@committedandroider: Bir geliştiricinin iş etmektir yazmak değil, kaynak kodu inşa onu. Sistem gelişimini biz sürecini ifade etmek için kelime "Yapı" kullanma ambalaj derlenen kaynak kodunu nihai bir ürüne ( paket veya çalıştırılabilir )
MestreLion

1
İnsanlar ben bu sohbet sunucusu, bu uygulamayı inşa onların projeleri- için kaynak kod yazarken referans 'bina' kullanılmış çünkü @MestreLion lol ben çok ... sonra tekrar karıştı
committedandroider

26

TANIM :: Gradle o araçları ve oluşturmak için bir projenin kaynaklarını yönetmek için esneklik yapýlar bir geliştirici sağlayan bir yapılandırılmış yapı mekanizması tarif edilebilir smaller in size, targeting specific requirementsbelli yapılandırmaları belli cihazlarda


TEMEL YAPILANDIRMALAR

  1. minimumSdk
  2. maximumSdk
  3. targettedSdk
  4. versionCode
  5. versionName

KÜTÜPHANELER :: Daha önce sıkıcı bir görev olan android kütüphanelerini veya diğer üçüncü taraf kütüphanelerini gereksinimlere göre kolayca ekleyebiliriz. Kütüphane mevcut projeye uymuyorsa, geliştiriciye kişinin projede değişiklik yapmak için uygun bir çözüm bulabileceği bir kütüphane gösterilir, böylece kütüphane eklenebilir. Sadece bir bağımlılık hattı


YAPI ÇEŞİTLERİ ÜRETİMİ

Yapı çeşitlerini elde etmek için yapı türlerini yapı aromalarıyla birleştirmek

 ====================                         ====================
|     BuildTypes     |                       |   ProductFlavours  |
 --------------------  ====================== --------------------
|  Debug,Production  |      ||       ||      | Paid,Free,Demo,Mock|
 ====================       ||       ||       ==================== 
                            ||       ||
                            VV       VV
 =================================================================
|           DebugPaid, DebugFree, DebugDemo, DebugMock            |
|  ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
 =================================================================

KÜÇÜK BOYUT

Gradle, kullanılmayan kaynakları ve kullanılmayan şeyleri entegre kitaplıklardan kaldırarak oluşturulan yapının boyutunu azaltmaya yardımcı olur


İZİNLERİ YÖNETME

Gereksinimlere dayalı olarak belirli senaryolara belirli izinler ekleyerek belirli derlemeler için belirli izinleri belirtebiliriz


BELİRLİ CİHAZLAR İÇİN YAPILAR

Belirli yoğunlukları ve belirli API düzeylerini içeren belirli cihazlar için oluşturma oluşturmayı yönetebiliriz. Bu, birden fazla cihaz türündeki gereksinimlere göre uygulama mağazasında ürün dağıtımlarına yardımcı olur


İYİ REFERANS

Vogella Eğiticileri


25

Gradle hakkında bilmeniz gereken her şeyi burada bulabilirsiniz: Gradle Plugin Kullanım Kılavuzu

Yeni Derleme Sisteminin Hedefleri

Yeni inşa sisteminin amaçları:

  • Kodu ve kaynakları yeniden kullanmayı kolaylaştırın
  • Çoklu apk dağıtımı veya uygulamanın farklı tatları için bir uygulamanın çeşitli varyantlarını oluşturmayı kolaylaştırın
  • Oluşturma işlemini yapılandırmayı, genişletmeyi ve özelleştirmeyi kolaylaştırın
  • İyi IDE entegrasyonu

Neden Gradle?

Gradle, gelişmiş bir derleme sistemi ve eklentiler aracılığıyla özel derleme mantığı oluşturmaya izin veren gelişmiş bir derleme araç takımıdır.

Gradle'ı seçmemizi sağlayan özelliklerinden bazıları şunlardır:

  • Yapı mantığını tanımlamak ve değiştirmek için Etki Alanına Özel Dil (DSL)
  • Derleme dosyaları Groovy tabanlıdır ve bildirici öğelerin DSL aracılığıyla karıştırılmasına ve özel mantık sağlamak için DSL öğelerini değiştirmek için kod kullanılmasına izin verir.
  • Maven ve / veya Ivy aracılığıyla yerleşik bağımlılık yönetimi.
  • Çok esnek. En iyi uygulamaların kullanılmasına izin verir, ancak kendi yöntemlerini yapmaya zorlamaz.
  • Eklentiler, yapı dosyalarını kullanmak için kendi DSL'lerini ve kendi API'lerini gösterebilir.
  • IDE entegrasyonuna izin veren İyi Takım API'sı

25

Cevap bir , iki yazmak için iki öğreticiye başvuruyorum

Gradle genel amaçlı, bildirim oluşturucu bir araçtır. Genel amaçlıdır, çünkü derleme betiğinde uygulamak istediğiniz hemen hemen her şeyi oluşturmak için kullanılabilir. Yapı dosyasında okunamayan ve daha az bakım gerektirmeyen çok sayıda kod görmek istemediğiniz için bildirimseldir. Gradle, konvansiyonlar fikri ve basit ve beyan edici bir yapı sağlarken, aynı zamanda aracı uyarlanabilir hale getirir ve geliştiricileri genişletme yeteneği sağlar. Ayrıca, varsayılan davranışı özelleştirmek için kolay bir yol ve herhangi bir üçüncü taraf özelliği eklemek için farklı kancalar sağlar.

Gradle, her iki aracın da iyi bölümlerini birleştirir ve ek özellikler sağlar ve Groovy'yi Etki Alanına Özel Dil (DSL) olarak kullanır. Yapı yaşam döngüsü ve kullanım kolaylığı gibi Maven özellikleri ile Ant aracının gücüne ve esnekliğine sahiptir.

Neden Gradle? Neden şimdi?

Derleme aracının yanıtı, standart olmayan uzantı mekanizmaları aracılığıyla komut dosyası işlevselliği eklemektir. Komut dosyası kodunu XML ile karıştırır veya oluşturma mantığınızdan harici komut dosyaları çağırırsınız. Zaman içinde daha fazla özel kod eklemeniz gerektiğini hayal etmek kolaydır. Sonuç olarak, kaçınılmaz olarak kazara karmaşıklık getirirsiniz ve sürdürülebilirlik pencereden dışarı çıkar.

Projenizin yayın sürümünü oluştururken dosyayı belirli bir konuma kopyalamak istediğinizi varsayalım. Sürümü tanımlamak için, meta verilerde projenizi açıklayan bir dizeyi kontrol edersiniz. Belirli bir numaralandırma düzeniyle eşleşiyorsa (örneğin, 1.0-RELEASE), dosyayı A noktasından B noktasına kopyalarsınız. Dış perspektiften önemsiz bir görev gibi gelebilir. Birçok geleneksel aracın yapı dili olan XML'e güvenmeniz gerekiyorsa, bu basit mantığı ifade etmek oldukça zorlaşır.

Java Derleme Araçlarının Gelişimi

Java derleme mantığı XML'de açıklanmalıdır. XML, hiyerarşik verileri tanımlamak için mükemmeldir, ancak program akışını ve koşullu mantığı ifade etmede yetersiz kalır. Bir yapı komut dosyası karmaşık bir şekilde büyüdükçe, bina kodunu korumak kabus haline gelir.

Ant'de , JAR hedefini derleme hedefine bağlı yaparsınız. Ant, projenizi nasıl yapılandıracağınız konusunda herhangi bir rehberlik vermez. Maksimum esnekliğe izin verse de, Ant her derleme betiğini benzersiz ve anlaşılması zor hale getirir. Projeniz için gereken harici kütüphaneler genellikle sürüm kontrolüne tabi tutulur, çünkü bunları merkezi bir konumdan çekmek için otomatik bir mekanizma yoktur.

Temmuz 2004'te serbest bırakılan Maven 1 bu süreci hafifletmeye çalıştı. Standart bir proje ve dizin yapısı ile bağımlılık yönetimi sağlamıştır. Ne yazık ki, özel mantığın uygulanması zordur

Gradle , bu oluşturma araçları nesline tam olarak uyar ve modern oluşturma araçlarının birçok gereksinimini karşılar (Şekil 1). Etkileyici bir DSL, yapılandırma yaklaşımı üzerinde bir sözleşme ve güçlü bağımlılık yönetimi sağlar. XML'den vazgeçmek ve yapı mantığınızı tanımlamak için dinamik Groovy dilini tanıtmak için doğru hareketi yapar. Zorlayıcı geliyor, değil mi?

Gradle, diğer oluşturma araçlarının en iyi özelliklerini birleştirir.

resim açıklamasını buraya girin

Gradle'ın İlgi Çekici Özellik Seti

resim açıklamasını buraya girin

Neden Java Projelerinizi Karınca veya Maven'den Daha Derecede Yapabilirsiniz?

Android için varsayılan derleme aracı (ve JVM'deki derleme araçlarının yeni yıldızı) karmaşık, çok dilli derlemelerin komut dosyalarını kolaylaştırmak için tasarlanmıştır. Yine de Ant veya Maven kullanıyorsanız değiştirmelisiniz?

Derleme komut dosyanızdaki Gradle'ın güç özelliklerinin kilidini açmanın anahtarı, aşağıdaki resimde gösterildiği gibi etki alanı modelini bulmak ve uygulamaktır. resim açıklamasını buraya girin

Gradle, kurumsal yapınıza özgü tüm gereksinimleri bilemez. Kancaları yaşam döngüsü aşamalarına maruz bırakarak Gradle, yapı komut dosyasının yürütme davranışını izlemeye ve yapılandırmaya izin verir.

Gradle, Groovy'de uygulanan bir DSL'i açığa çıkararak modeli için bir kelime haznesi oluşturur. Karmaşık bir problem etki alanı ile uğraşırken, bu durumda, mantığı ifade etmek için ortak bir dil kullanabilmek, yazılım oluşturma görevi güçlü bir araç olabilir.

Başka bir örnek, derleme araçları tarafından çözülen çok yaygın bir sorun olan dış kitaplıklara bağımlılıkları ifade etme yöntemidir. Kullanıma hazır Gradle, derleme komut dosyanız için, onları almak istediğiniz bağımlılıkları ve depoları tanımlamanıza olanak tanıyan iki yapılandırma bloğu sağlar. Standart DSL elemanları ihtiyaçlarınızı karşılamıyorsa, Gradle'ın genişletme mekanizması aracılığıyla kendi kelime bilginizi bile tanıtabilirsiniz.

Diğer Derleme Araçlarıyla Entegrasyon

Gradle, aşağıdaki resimde gösterildiği gibi öncekilerden Ant, Maven ve Ivy ile iyi oynuyor.

resim açıklamasını buraya girin

Projenizi Derlemeden Dağıtmaya Otomatikleştirme

resim açıklamasını buraya girin

Resimde: Dağıtım hattının aşamaları.

  • Kodu derleme

  • Koşu birimi ve entegrasyon testleri

  • Statik kod analizi yapma ve test kapsamı oluşturma

  • Dağıtım oluşturma

  • Hedef ortamı sağlama

  • Teslim edilebilir ürünü dağıtma

  • Duman ve otomatik fonksiyonel testlerin yapılması

Cevap bir , iki yazmak için iki öğreticiye başvuruyorum


1
Buna ek olarak, Android uygulamalarınızı makinenizdeki komut satırından veya Android Studio'nun yüklü olmadığı makinelerde (sürekli entegrasyon sunucuları gibi) oluşturabilirsiniz.
jettimadhuChowdary

23

Gradle bir yapı sistemidir . Derleme sistemleri , program derleme işlemini otomatikleştirmek için tasarlanmış yazılım araçlarıdır. Derleme sistemleri çeşitli biçimlerde gelir ve çeşitli yazılım derleme görevleri için kullanılır. Birincil amaçları verimli bir şekilde yürütülebilir dosyalar oluşturmaktır.

Bir diğer ilgili terim, bir yazılım derlemesinin oluşturulmasını otomatikleştirme işlemi olan Build otomasyonudur ve aşağıdakileri içeren ilişkili işlemleri içerir: bilgisayar kaynak kodunun ikili koda derlenmesi, ikili kodun paketlenmesi ve otomatik testlerin çalıştırılması.

Diğer diller için birkaç benzer yapı sistemi vardır ( buradaki tam listeye bakın ):

  1. Apache Ant ve Apache Maven - Java
  2. sbt (Basit Oluşturma Aracı) - Scala için (Oyun çerçevesi vb.)
  3. AAP - Python tabanlı derleme aracı
  4. Tırmık (Apache Builder) - Ruby
  5. Clojure için Leiningen

17

Söylemsel olma riski altında, bunun arkasında Android Studio / Gradle deneyiminin neden bu kadar kötü olduğu sorusu olduğunu düşünüyorum.

Tipik Clojure deneyimi:

  • project.clj'de listelenen bağımlılıkları olan projeyi indir.
  • Leiningen bağımlılıkları Clojars ve Maven sayesinde alıyor.
  • Proje derlemeleri.

Tipik Android Studio / Gradle deneyimi:

  • "Eclipse projemi içeri aktar".
  • Tamam proje içe aktarıldı.
  • Gradle bunu yapıyor ... bekle ... bekle ... bekle ... Gradle bitti.
  • Derleme ... derleyemiyorum çünkü X'in ne olduğunu bilmiyorum / Y kütüphanesini bulamıyorum.

Bunun Gradle'ın hatası olduğuna emin değilim. Ancak "Eclipse projesinden içe aktarma" oldukça lapa lapa görünüyor. Gradle'ın iddia edilen tüm karmaşıklığı ve bir inşa sisteminin erdemleri için Android Studio, derleme bağımlılıklarını veya inşa sürecini Eclipse'den çok iyi ithal etmiyor gibi görünüyor.

Tam bir bağımlılık grafiğini içe aktarmanın ne zaman başarısız olduğunu söylemez. Android Studio, sorunun nasıl çözüleceği konusunda yararlı bir yardım veya ipucu vermemektedir. Eclipse klasörlerinde nereye bakabileceğinizi söylemez. Hangi kütüphanenin eksik olduğunu söylemiyor. Ya da onlar için Maven vb.

2016'da Leiningen / Clojars veya düğümün npm'si, Python'un pipi veya Debian apkg (ve diğer diller ve sistemler için birçok benzer paket yöneticisinin) iyi çalışır ... eksik bağımlılıklar geçmişte kaldı.

Android hariç. Android Studio artık eksik bağımlılık cehennemi yaşadığım tek yer.

Bunun Google'ın hatası olduğunu söylemeye meyilliyim. Güçlü bir dönüştürme işlemi üretmeden Eclipse'den Android Studio / Gradle'a geçmeye karar verdiklerinde Android ekosistemini (ve mevcut binlerce Android projesini / çevrimiçi öğreticiyi) kırdılar. Eclipse'de projeleri çalışan insanlar onları AS'ye adapte etmiyorlar (muhtemelen onlar için bir acı olduğu için). AS'de bu projeleri kullanmaya çalışan insanlar da aynı sorunlara çarpıyor.

Her neyse, Gradle bu süper güçlü yapı sistemiyse, neden hala sdk yöneticisinde diğer birçok bağımlılığı yönetiyorum? Diyelim ki ndk bunu gerektiren bir proje neden Gradle dosyasında belirtmiyor, böylece gerektiğinde otomatik olarak kuruluyor ve oluşturuluyor? NDK neden özel? Hedef platformlar için benzer şekilde mi? Neden sadece projemi onlara karşı kontrol etmek ve tüm bunları benim için sahne arkasında sıralamak yerine IDE'ye açıkça yüklüyorum?


4
Gradle'ın korkunç bir inşa sistemi olduğuna tamamen katılıyorum. Android Studio'yu X-Code veya Visual Studio'dan çok daha kötü yapan bileşendir. Bunların sistemi perde arkasına "inşa etmesi" gerektiğinin farkındayım, ama içlerinden bilmek / bakım / tamircilik yapmak zorunda değilim. Gradle, her Android Studio güncellemesiyle kırılıyor gibi görünüyor ve hatta sadece bir sınıf ekleyerek sistemi kapatıyor. Başka hiçbir IDE bunu yapmaz.
csmith

14

Gradle gelişmiş bir derleme sistemi ve eklentiler aracılığıyla özel derleme mantığı oluşturmayı sağlayan gelişmiş derleme araç takımıdır!

Avantajları:

  • Dsl - Groovy tabanlı alan adına özel dil
  • DAG - Yönlendirilmiş Asiklik Grafiği
  • Artımlı yapılar
  • Genişletilebilir alan adı modeli
  • Gradle her zaman günceldir
  • Bir görev yürütülmeden önce Gradle, görevinin girdi ve çıktısının anlık görüntüsünü alır.
  • Anlık görüntünün değişmesi veya mevcut olmaması durumunda Gralde bu görevi yeniden yürütür.

Bildiri girişleri

DSL ile aşağıdaki manifest girişlerini yapılandırmak mümkündür:

Yapı varyantı

Varsayılan olarak, Android eklentisi projeyi otomatik olarak uygulamanın hem hata ayıklamasını hem de yayın sürümünü oluşturacak şekilde ayarlar.

Bağımlılıklar

  1. Yerel Bağımlılıklar:

Yerel dosya sisteminizde JAR dosyaları gibi bir modülün bağlı olduğu ikili arşivleriniz varsa, bu bağımlılıkları söz konusu modülün derleme dosyasında bildirebilirsiniz.

  1. Uzaktan Bağımlılıklar:

Önce depo listeye eklenmeli, daha sonra bağımlılık Maven veya Ivy'nin eserlerini beyan edecek şekilde beyan edilmelidir.


13

Gradle, Groovy JVM diline Java'nın karıncasıdır. Temel olarak, Groovy'nin oluşturma aracı. Ant'in aksine, tam Groovy diline dayanır. Örneğin, Gradle komut dosyasına belirli bir etki alanı diline güvenmek yerine bir şeyler yapmak için Groovy komut dosyası kodu yazabilirsiniz.

IntelliJ'in özel entegrasyonunu bilmiyorum, ancak Groovy'yi "özel" dil ilkelleri yazabileceğiniz ve "Groovy dilinin bir parçası" olacak şekilde "genişletebildiğinizi" hayal edin. (Groovy'nin meta programlaması kendi başına bütün bir tartışmadır.) IntelliJ / Google, Gradle'ı çok üst düzey bir oluşturma dili oluşturmak için kullanabilir, ancak bu, genişletilebilir, açık bir standart üzerinde bir dil derlemesidir.


2
"Groovys yapı aracı" değil - DSL'in harika üzerine inşa edilen çok amaçlı bir yapı aracıdır
martyglaubitz

10

Gradle, bağımlılıkları yöneten ve özel yapı mantığı tanımlamanıza izin veren android için gelişmiş bir yapı araç takımıdır. özellikler gibidir

  • Derleme işlemini özelleştirin, yapılandırın ve genişletin.

  • Aynı projeyi kullanarak uygulamanız için farklı özelliklere sahip birden fazla APK oluşturun.

  • Kodu ve kaynakları yeniden kullanın.

başvurmak


9

Gradle, yalnızca Android projeleri için değil, birçok farklı ortama entegre edilebilen otomatik bir derleme araç takımıdır.

Burada gradle ile yapabileceğiniz birkaç şey var.

  • Gradle'ın android stüdyo projeleriniz için varsayılan yapılandırmaları olduğundan Yeni Projeler için Minimum Yapılandırma Gerekli.

  • Bağımlılık Beyanı. Yerel veya uzak sunucuda barındırılan bağımlılık jar dosyalarını veya kitaplık dosyalarını bildirebilirsiniz.

  • Gradle, projenizin kaynağından otomatik olarak bir test dizini ve bir test APK'si oluşturur.

  • Gerekli tüm bilgileri eklerseniz, örneğin keyPasswordkeyAliasGradle derleme dosyanıza ve , imzalı APK'ler oluşturmak için Gradle'ı kullanabilirsiniz.

  • Gradle, farklı paketlerle birden fazla APK oluşturabilir ve tek bir modülden yapılandırmalar oluşturabilir.


8

Android Studio'da Gradle, bağımlılıkları yöneterek ve özel oluşturma mantığı sağlayarak android paketleri (apk dosyaları) oluşturmak için kullanılan özel bir oluşturma aracıdır.

APK dosyası (Android Uygulama paketi), özel olarak biçimlendirilmiş bir zip dosyasıdır

  • Bayt kodu
  • Kaynaklar (resimler, kullanıcı arayüzü, xml vb.)
  • Bildirim dosyası

Bir apk dosyası imzalanır ve yürütüldüğü ADB (Android Hata Ayıklama Köprüsü) kullanılarak cihaza aktarılır.


6

Gradle özel bir derleme aracıdır ve APK oluşturmak için kullanılır veya uygulama paketi kiti olarak bilinir.


4

tarafından @Brian Gardner:

Gradle, programlama projeleri için kapsamlı bir derleme aracı ve bağımlılık yöneticisidir. Groovy tabanlı bir etki alanına özgü dili vardır. Gradle ayrıca Java, Android ve Scala da dahil olmak üzere birçok proje türü için konvansiyonel inşa desteği sağlar.

Gradle Özelliği:

  1. Bağımlılık Yönetimi
  2. Gradle'dan Ant Kullanımı
  3. Gradle Eklentileri
  4. Java Eklentisi
  5. Android Eklentisi
  6. Çoklu Proje Yapıları

3

Gradle, birden fazla kaynaktan, projeden, kütüphaneden vb. 10 bin satır kod içeren karmaşık Android projelerinin oluşturulmasını otomatikleştirmeyi mümkün kılan şeydir. diğer cevaplar Gradle'ın bu yönüyle ilgili daha fazla ayrıntı sağlar.

Ancak, Android geliştirmede yeniyseniz,% 99 oranında Gradle , projenizin oluşturulmasını durduran şeydir . Android oluşturma sürecini etkili bir şekilde gizleyen ve temelde deneyimsiz geliştiriciler tarafından kullanılamaz hale getiren, yani basit bir giriş seviyesi Android Uygulaması oluşturmak için, şüphesiz yeni başlayanların pazarlık etmedikleri birçok şeyi incelemesi ve anlaması gerekebilecek, anlaşılmaz, karmaşık bir sistemdir. gibi:

  • Android APK yapısı ve ekosistemi
  • Android Studio
  • Java Sınıfyolları ve bağımlılıkları
  • harika
  • Gradle build scriptleri
  • Diğer birçok karmaşık ve ilginç teknoloji

Tüm bunlar Android geliştiricilerinin bilmesi ilginç ve faydalıdır, ancak kolay olmaktan uzaktır ve girişe karşı müthiş bir engel sunmaktadır. OP'ye bu soruyu sorması için ilham veren şeyin, Grappy tarafından sürekli olarak engellenmek ve inşa etmek için basit bir uygulama almaya çalışarak çok uzun zaman geçirdikten sonra kaçınılmaz olarak neofit geliştiricisine çarpan hayal kırıklığı hissi olduğundan şüpheleniyorum. Sorun, tüm bu teknolojiler için mevcut olan oldukça yüksek miktarda teknik dokümantasyon nedeniyle aşırı derecede artmaktadır. Ayrıca büyük miktarda geliştirme ihtiyaçları için Gradle aşırıya kaçar.

Bir alternatif, android SDK'da bulunan araçları otomatikleştirerek projenizi oluşturan bir kabuk komut dosyası yazmaktır. Bu yaklaşımın erdemleri çoktur, yeni başlayanlar için muhtemelen inşa sürecini ve Android ekosistemini incelemek ve anlamak için en iyi yoldur ve uygulamanızın nasıl oluşturulduğunu tamamen kontrol etmenizi sağlar. Ancak bu yaklaşım derinlemesine tamir edilemeyen teknoloji kafaları için android'i deneyen deneyimsiz noobs'lara göre daha uygundur.

Yokluğu ile dikkat çeken şey (lütfen böyle bir şey varsa beni bilgilendirin), oluşturma sürecini gizlemeden aynı anda basitleştiren (netbeans veya eclipse değil) azaltılmış özellik setine sahip bir giriş seviyesi, hafif IDE'dir. Gradle kullanın (Ant ile yanlış olan ne). Birkaç yaygın yapılandırmaya uyan APK'ları oluşturmayı ve bu şekilde kullanmaya karar verirseniz, tam bir Android Studio projesine dönüşebilecek bir proje yapısı kullanmayı kolaylaştırmalıdır.


1

Kısacası Gradle, Android Studio tarafından iki önemli işlemi uygulamak için sağlanan bir araçtır:

  1. Projelerimizi oluşturun
  2. AndroidManifest.xml, res klasörü ve ikili kodu APK olarak adlandırılan özel olarak biçimlendirilmiş bir zip dosyasına paketleyin

1

Arama Sonuçları Web üzerinden sunulan snippet | inşa etmek. gradle. Gradle, oluşturma, test etme, dağıtma vb. süreç olur.


1

Android Studio'da Gradle, android uygulama projelerimizi oluşturmak için kullanılır, dolayısıyla bir yapı sisteminin rolünü oynar. Android Studio'dan önce, Eclipse'de, uygulamaları ANT kullanarak tutulmada Android Uygulamaları oluşturmak ve çalıştırmak için GUI tabanlı adımlar tarafından devralınan komut satırı aracını kullanarak derleyip oluşturduk. Her android uygulama geliştirme aracı kaynakları, java kaynak kodunu, harici kütüphaneleri derlemeli ve bunları son APK olarak birleştirmelidir.

Gradle , kod derleme, test etme, dağıtma ve kodun .dex dosyalarına dönüştürülmesinden ve böylece uygulamanın cihazda çalıştırılmasından sorumlu olan bir derleme sistemidir.

Android Studio önceden yüklenmiş Gradle sistemi ile birlikte geldiğinden, projemizi oluşturmak için ek çalışma zamanı yazılımları yüklemeye gerek yoktur. Ne zaman tıklarsanÇalıştırmakAndroid stüdyosundaki düğmeyi , bir gradle görevi otomatik olarak tetiklenir ve projeyi oluşturmaya başlar ve gradle görevini tamamladıktan sonra uygulama AVD'de veya bağlı cihazda çalışmaya başlar.

Gradle gibi bir derleme sistemi bir derleyici, bağlayıcı vb. Değildir, ancak derleme, dosya bağlama, test senaryoları çalıştırma ve sonunda kodu Android Uygulamanız için bir apk dosyasına paketlemeyi kontrol eder ve denetler.

Biri uygulama için ve diğeri proje seviyesi (modül seviyesi) yapı dosyaları için olan her android stüdyo projesi için iki build.gradle dosyası vardır .

Derleme işleminde, derleyici kaynak kodunu, kaynakları, dış kütüphaneleri JAR dosyalarını ve AndroidManifest.xml dosyasını (uygulama hakkındaki meta verileri içerir) alır ve bunları bytecode içeren .dex (Dalvik Yürütülebilir dosyaları) dosyalarına dönüştürür . Bu bayt kodu uygulamanızı çalıştırmak için tüm android cihazlar tarafından desteklenir. Daha sonra APK Manager, .dex dosyalarını ve diğer tüm kaynakları tek bir apk dosyasında birleştirir. APK Paketleyici hata ayıklama veya serbest bırakma işaretleriilgili hata ayıklama veya serbest bırakma anahtar deposunu kullanarak apk.

Hata ayıklama apk genellikle test amaçlı kullanılır veya sadece geliştirme aşamasında kullanıldığını söyleyebiliriz. Uygulamanız istenen özelliklerle tamamlandığında ve uygulamanızı harici kullanım için yayınlamaya hazır olduğunuzda,bir sürüm anahtar deposu kullanılarak imzalanmış Sürüm apk'sine.

Şimdi gradle dosyalarına biraz ışık tutalım.

setting.gradle setting.gradle (Gradle ayarı) dosyası, uygulamanızda kullanılan tüm modülleri belirtmek için kullanılır.

build.gradle (proje seviyesi) Üst düzey (modül) build.gradle dosyası, proje düzeyinde derleme yapılandırmalarını tanımlayan proje düzeyinde derleme dosyasıdır. Bu dosya android uygulama projesindeki tüm modüllere yapılandırmalar uygular.

build.gradle (uygulama düzeyi) Uygulama seviyesi build.gradle dosyası android projesinin her modülünde bulunur. Bu dosya belirli bir uygulama modülü için applicationID, sürüm adı (apk sürümü), sürüm kodu, minimum ve target sdk olarak paket adınızı içerir. Harici kütüphaneleri (jar dosyalarını değil) eklediğinizde, bunları projenize uygulamanın bağımlılıkları olarak dahil etmek için uygulama düzeyi sınıf dosyasında belirtmeniz gerekir.

Not: Akıllı Telefon, Tablet veya TV gibi ayrı modüller için varyasyonlarda belirli bir uygulama geliştirilirse, herkes için ayrı not dosyaları oluşturulmalıdır. Gradle sisteminizi komut satırı üzerinden bile başlatabilirsiniz aracıyla . Bunun için aşağıdaki komutlar kullanılır:

./gradlew build - (derleme projesi)
./gradlew clean derleme - (projeyi tam sıfırdan
derleme ) ./gradlew clean derleme - (testi çalıştırma)
./gradlew wrapper - (mevcut tüm görevleri görmek için)


0

Gradle = Groovy + Beşik Hans Dockter forum yorumu

Android Studio'da "Build" veya başka bir şey olarak adlandırılabilecek karmaşa biraz gereksiz.

Geliştirme topluluğunda kendimiz için işleri zorlaştırmayı seviyoruz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.