Misteri: Struktur Proyek dan Sistem Bangun Android Studio
Saya tidak tahu apakah ini karena Gradle Build System (saya berani bertaruh), tetapi saya akan memberi tahu Anda apa yang telah saya pahami sejauh ini.
Pembaruan 4: 2014/09/11 Menambahkan Lembar Cheat untuk BuildTypes
, Flavors
dan Variants
(akhirnya saya merasa percaya diri untuk menulis ini: D)
Pembaruan 3: 2014/09/11 Memperbarui ruang kerja perbandingan dan proyek tepatnya
Pembaruan 2: 2014/04/17 Menambahkan lebih banyak detail ke struktur proyek AS
Pembaruan 1: 2013/07/29 Menambahkan Struktur Proyek IntelliJ
Struktur Proyek IntelliJ (ditampilkan di bagian akhir) adalah untuk IntelliJ dengan plugin android. Android Studio, bagaimanapun, memiliki struktur proyek yang dibagi seperti ini:
Struktur: Proyek dan Modul
modul di Android Studio seperti proyek di Eclipse
proyek di Android Studio seperti ruang kerja di Eclipse (tepatnya, ruang kerja dengan proyek yang saling bergantung)
Dari dokumentasi (Android Studio didasarkan pada Intellij IDEA):
Apa pun yang Anda lakukan di IntelliJ IDEA, Anda melakukannya dalam konteks proyek. Proyek adalah unit organisasi yang mewakili solusi perangkat lunak lengkap.
Produk jadi Anda dapat diuraikan menjadi serangkaian modul terpisah dan terpisah, tetapi ini adalah definisi proyek yang menyatukannya dan mengikatnya menjadi keseluruhan yang lebih besar.
Untuk Android, ini berarti satu proyek per aplikasi, dan satu modul per pustaka dan per aplikasi pengujian.
Ada banyak masalah jika Anda mencoba membangun beberapa aplikasi dalam proyek yang sama. Itu mungkin, tetapi jika Anda mencoba (seperti yang saya lakukan), Anda akan melihat bahwa hampir semuanya dirancang untuk bekerja dengan satu aplikasi per proyek.
Misalnya, ada opsi untuk "membangun kembali proyek", yang tidak masuk akal dengan banyak aplikasi, banyak pengaturan proyek lainnya tidak akan berguna, dan sistem VCS bawaan tidak bagus bila Anda memiliki banyak repositori.
Struktur: Struktur Folder
Folder Tingkat Atas
1. Proyek Utama
Ini akan menjadi konteks keseluruhan proyek ( Eclipse Land: Seperti ruang kerja Anda tetapi terbatas pada apa yang relevan dengan proyek Anda). Mis: HelloWorldProject
jika nama aplikasi yang Anda berikan adalahHelloWorld
2. ide
Di sinilah metadata spesifik proyek disimpan oleh Android Studio (AS). ( Eclipse Land: project.properties
file)
3. Modul Proyek
Ini adalah proyek sebenarnya. mis .: HelloWorld
jika nama aplikasi yang Anda berikan adalah HelloWorld
4. gradle
Di sinilah pembungkus jar sistem build gradle yaitu jar ini adalah bagaimana AS berkomunikasi dengan gradle yang diinstal di Windows (OS dalam kasus saya).
5. Perpustakaan Eksternal
Ini sebenarnya bukan folder tetapi tempat di mana Perpustakaan yang Dirujuk ( Eclipse Land: Perpustakaan yang Dirujuk) ditampilkan. Di sinilah Platform Target ditampilkan, dll.
[ Catatan tambahan: Di sini banyak dari kita di Eclipse Land biasa menghapus perpustakaan yang direferensikan dan Perbaiki Properti Proyek untuk memperbaiki kesalahan referensi, ingat?]
Folder Proyek secara Detail
Ini adalah nomor # 3 dari daftar di atas. Memiliki sub dirs berikut
1. membangun
Ini memiliki semua output lengkap dari make
proses yaitu class.dex, class dan resource yang dikompilasi, dll.
Di GUI Android Studio, hanya beberapa folder yang ditampilkan. Bagian yang penting adalah R.java Anda ditemukan di sini di bawahbuild/source/<flavor>/r/<build type(optional)>/<package>/R.java
2. libs
Ini adalah folder libs standar yang Anda lihat di tanah gerhana juga
3. src
Di sini, Anda hanya melihat folder java
dan res
yang sesuai dengan src
folder dan res
folder di Eclipse Land . Ini sangat disambut IMHO penyederhanaan.
Catatan tentang Modul:
Modul seperti proyek Eclipse Land . Di sini idenya adalah Anda memiliki satu proyek aplikasi (Modul # 3 dalam daftar di atas) dan beberapa proyek perpustakaan (sebagai Modul terpisah di bawah folder proyek global (# 1 dalam daftar di atas)) yang bergantung pada proyek aplikasi. Bagaimana proyek perpustakaan ini dapat digunakan kembali di aplikasi lain, saya masih belum menemukannya.
[ Catatan tambahan: Seluruh penataan ulang memiliki beberapa manfaat seperti penyederhanaan di folder src, tetapi begitu banyak komplikasi. Komplikasi tersebut terutama disebabkan oleh dokumentasi yang SANGAT SANGAT tipis tentang layout proyek baru ini.
Sistem Bangun Baru
Panduan Pengguna untuk Sistem Bangun baru
Penjelasan flavours dan buildTypes, dll - Apa keributan itu?
CheatSheet untuk rasa dan tipe build
BuildType: debug
dan release
yang buildTypes
tersedia secara default pada semua proyek. Mereka digunakan untuk membuat / mengompilasi KODE YANG SAMA untuk menghasilkan APK yang berbeda. Misalnya pada release
APK Anda ingin menjalankan proguard (untuk obfuscation), menandatanganinya dengan kunci Anda (berlawanan dengan kunci debug), menjalankan pengoptimalan (mungkin melalui proguard atau alat lain), gunakan sedikit berbeda packageNames
(kami gunakan com.company.product
untuk release
dan com.company.product.debug
untuk debug
), dll. Kami juga menggunakan flag debug ( BuildConfig.DEBUG
) untuk mematikan logging ke logcat (karena membuat aplikasi menjadi lambat) pada release
build. Ini membuat debug
build lebih cepat selama pengembangan tetapi juga release
build yang dioptimalkan untuk digunakan di play store.
Rasa Produk: Tidak ada rasa default yang tersedia (atau tepatnya, rasa default adalah kosong / tanpa nama). Flavors
bisa versi gratis atau versi berbayar di mana mereka memiliki KODE BERBEDA . Mereka berbagi Main
Kode yang sama tetapi versi yang berbeda (atau tanpa versi) dari beberapa file kode sumber atau sumber daya.
BuildVariant: A buildVariant
adalah sesuai dengan APK yang dihasilkan. Mereka diberi nama seperti itu (dalam urutan) Product Flavor
+ Build Type
=Build Variant
.
Contoh 1: jika Anda memiliki free
dan paid
sebagai dua rasa. Varian build yang akan Anda dapatkan adalah:
Gratis - debug
Gratis - rilis
Berbayar - debug
Berbayar - rilis
Jadi itu adalah 4 kemungkinan konfigurasi APK. Beberapa konfigurasi mungkin tidak masuk akal dalam proyek tertentu, tetapi mereka yang tersedia.
Contoh 2: (untuk proyek baru / tanpa ragam) Anda memiliki 2 buildVariants
atau APK yang tersedia, karena ragam defaultnya adalah tanpa nama / kosong:
rilis
debug
Folder .idea (1) berisi sejumlah subfolder, terutama dengan informasi internal IntelliJ IDEA.
Folder src (2) berisi kode sumber file MyActivity.java (3) yang mengimplementasikan fungsionalitas aplikasi Anda. File tersebut termasuk dalam paket com.example.
Folder res (4) berisi berbagai sumber daya visual.
File layout / main.xml (5) mendefinisikan tampilan aplikasi yang terdiri dari sumber daya dari berbagai jenis.
Folder nilai (6) dimaksudkan untuk menyimpan file .xml yang menjelaskan sumber daya dari berbagai jenis. Saat ini, folder tersebut berisi file strings.xml dengan definisi resource String. Seperti yang akan Anda lihat dari bagian Menambahkan Warna, folder tata letak juga dapat berisi, misalnya, deskripsi warna.
Folder drawable (7) berisi gambar.
Folder gen (8) berisi file R.java (9) yang menghubungkan sumber daya visual dan kode sumber Java. Seperti yang akan Anda lihat dari bagian di bawah ini, IntelliJ IDEA mendukung integrasi yang erat antara sumber daya statis dan R.java. Segera setelah sumber daya ditambahkan atau dihapus, kelas yang sesuai dan bidang kelas di R.java secara otomatis dibuat atau dihapus. File R.java juga termasuk dalam paket com.example.