Tổng quan về cấu trúc dự án Android

Một phần của tài liệu Bài giảng lập trình di động android (Trang 25 - 29)

Dưới đây là hình ảnh cây tổng quát của một dự án trên Android Studio (theo chế độ hiển thị Android):

T chức thư mục

- “java” – đây chính là nơi chứa các package của dự án, bạn có thể tạo các package

ở đây và bên trong là các file mã nguồn Java. Trong ví dụở trên, ta chỉ có một file mã nguồn là “MainActivity.java” nằm trong package “com.example.helloandroid” - đây chính là package chính của ứng dụng.

- “res” –là nơi chứa tất cảcác tài nguyên được sử dụng trong ứng dụng như: hình ảnh (drawable), bố cục giao diện (layout), các chỗi, màu sắc, kích thước (values),...

ThS. Bùi Trung Úy 26

+ layout: đây chính là thư mục chứa các file xml về bố cục giao diện các màn hình trong ứng dụng. Ở phần trên bạn có thư mục java lưu các class, các class này sẽ kết nối với các file xml trong thư mục layout nào để tạo nên một màn hình có giao diện cho người dùng thao tác.

+ drawable: đây chính là thư mục chứa các file hình ảnh, các file xml là thiết lập giao diện. Nếu bạn muốn ứng dụng sử dụng một hình ảnh nào đó là làm nền thì ảnh đó

sẽ bỏ vào thư mục này. Hoặc nếu muốn điều chỉnh một nút button khi click vào màu xanh còn khi không click vào màu trắng thì bạn sẽ config trong file xml và lưu vào

trong này.

+ mipmap: đây là thư mục để chứa hình ảnh logo của ứng dụng. Nó tương tự như thư mục drawable, nhưng mipmap chỉ chứa các icon của ứng dụng với các thiết lập để

phù hợp với từng loại kích thước màn hình khác nhau.

Một trong các vấn đề chúng ta hay gặp khi tạo ứng dụng Android là các ảnh mờ, nhòe, hoặc giãn không chuẩn trên một số thiết bị với màn hình lớn. Để giải quyết vấn

đề này, Android hỗ trợ sử dụng nhiều hình ảnh cho mỗi mật độ (density) điểm ảnh khác nhau để các hình ảnh thu nhỏ hay phóng to một cách chính xác. Khi bạn tạo icon hoặc hình ảnh từ công cụ, hệ thống Android Studio sẽ sinh ra nhiều loại folder của drawable hay mipmap khác nhau, tương ứng với các loại kích thước màn hình.

Một số mật độ mà Android hỗ trợ:

ldpi: dành cho các màn hình độ phân giải thấp; ~120dpi

mdpi: dành cho các màn hình độ phân giải trung bình, ~160dpi

hdpi: dành cho các màn hình phân giải cao; ~240dpi

xhdpi: dành cho các màn hình phân giải cao hơn nữa; ~ 320dpi. Được thêm vào trong API Level 8.

nodpi: có thểđược sử dụng cho tài nguyên hình ảnh mà bạn không muốn được thu nhỏ hoặc phóng to với mật độ thiết bị.

tvdpi: một số màn hình độ phân giải nằm giữa mdpi và hdpi; ~213dpi. Nó không

ThS. Bùi Trung Úy 27

File AndroidManifest.xml

Đây là file để liệt kê những thông tin cần thiết của ứng dụng. Là file dùng để thiết lập những thuộc tính cho ứng dụng, xác định các quyền cần cấp cho ứng dụng, các activity và các thành phần khác mà khi ứng dụng chạy hệ điều hành có thể hiểu được và xử lý.

Một sốđặc tả kê khai trong manifest này bao gồm:

• Xác định tên gói của ứng dụng, là định danh (identifier) duy nhất cho ứng dụng. • Mô tả các thành phần của ứng dụng - activity, service, broadcast receiver và Content Provider.

• Khai báo các quyền mà ứng dụng cần,…

Nội dụng một file AndroidManifest mẫu như sau:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.helloandroid"> <!-- PERMISSION --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> Trong đó một số thành phần chính:

- Khai báo package name - định danh duy nhất của ứng dụng trên hệ thống

“com.example.helloandroid”.

- Thẻ uses-permission – khai báo các quyền mà ứng dụng yêu cầu từngười dùng. Khi bạn cài bất kỳ một ứng dụng nào, đâu tiên thường hiện ra quyền yêu cầu bạn đồng ý thì mới cài nó. Với ví dụ trên là 2 quyền yêu cầu để truy cập internet, và quyền truy cập ghi dữ liệu trên thẻ nhớ ngoài.

- Thẻ application – mô tả cách hiển thị và hoạt động của ứng dụng. Cụ thể là có những activity nào, có những service (các dịch vụ chạy ngầm) nào trong ứng dụng. Nếu Activity hoặc service mà không khai báo ởđây thì sẽ không thểdùng được.

ThS. Bùi Trung Úy 28

+ android:icon="@mipmap/ic_launcher"– khai báo sử dụng file ảnh ic_launcher.png

trong thư mục res/mipmap để làm biểu tượng cho ứng dụng

+ android:label="@string/app_name" – khai báo sử dụng chuỗi có tên là app_name trong file string.xml làm tên của ứng dụng (chuỗi này có giá trị là “HelloAndroid”).

- Thẻ activity – khai báo các activity trong ứng dụng. Mặc định khi tạo Activity thì nó sẽ tự động thêm khai báo vào file AndroidManifest này. Bên trong khai báo Activity có các mục:

+ android:name là tên Activity, ví dụ trên chỉ có một activity là ".MainActivity”, ở đây có dấu chấm (.) đằng trước nó biểu thị là nằm trong cùng package với ứng dụng. Nếu bạn tạo thêm một package con với một Activity khác thì phải khai báo đầy đủ

package của nó.

+ intent-filter là bộ lọc thông báo các điều kiện của Activity, ở đây thiết lập nó là activity chính “android.intent.action.MAIN”, và “android.intent.category.LAUNCHER” chỉ

ra rằng Activity này sẽđược tạo biểu tượng (shortcut) trên màn hình chủ của Android và được mở đầu tiên khi chạy ứng dụng.

File build.gradle

Đây là file cấu hình biên dịch, khai báo các thư viện cần dùng và các thiết lập hệ thống để biên dịch ứng dụng Android. Ở ví dụ trên, ta thấy có 2 file build.gradle, nhưng chỉđể ý đến file của Module app, nội dung file build.gradle mặc định như sau:

apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "com.example.helloandroid" minSdkVersion 15 targetSdkVersion 28 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' }

} }

dependencies {

implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation 'com.android.support:appcompat-v7:28.0.0'

implementation 'com.android.support.constraint:constraint-layout:1.1.3'

androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }

ThS. Bùi Trung Úy 29

Dòng đầu tiên apply plugin: 'com.android.application' thể hiện module này là một ứng dụng Android. Nếu các bạn muốn tạo một module có chức năng như một thư viện, có thể dùng cho nhiều Project khác nhau thì nó là apply plugin: „com.android.library‟, nhưng ởđây chúng ta chỉ quan tâm tới ứng dụng.

Tiếp theo dòng compileSdkVersion và buildToolsVersion lần lượt là phiên bản SDK và bản build-tool để tạo ra ứng dụng.

Dòng applicationId “com.example.helloandroid”, chính là package của ứng dụng. Tiếp dòng minSdkVersion 15 và targetSdkVersion 28 lần lượt là phiên bản Android API thấp nhất có thể chạy và phiên bản chạy tốt nhất đối với dự án này.

Dòng versionCode=1 và versionName=“1.0” lần lượt là phiên bản code và tên phiên bản ứng dụng. Khi các bạn cập nhật ứng dụng thì phải sửa phiên bản code lớn hơn phiên bản trước, tên phiên bản phải khác đi thì mới đưa lên store được.

Khối dependencies là để thêm các thư viện hỗ trợ. Để biết cấu trúc add thư viện thì hãy làm theo hướng dẫn của người tạo ra thư viện đó hoặc search google.

Một phần của tài liệu Bài giảng lập trình di động android (Trang 25 - 29)

Tải bản đầy đủ (PDF)

(133 trang)