04/11/2023 2
Tháng 7/2008, Apple ra mắt AppStore. Đến nay, App Store đã có hơn 400,000 ứng dụng với 10 tỷ lượt tải về, dẫn đầu ngành về dịch vụ ứng dụng cho di động .
Ovi Store của Nokia, Android Market của Google, App World của Blackberry , Huawei Technology.
TẠI SAO NÊN THEO NGÀNH NÀY?
04/11/2023 3
AppStore: 400,000 ứng dụng với 10 t ỉ lượt tải vềOviStore: 55,000 ứng dụng, 760 triệu downloadAndroid Market: 200,000 ứng dụng, 4,5 tỉ downloadApp World: 30,000 ứng dụng, 3 triệu download/ngàyHuawei Technology: 80.000 ứng dụng
TẠI SAO NÊN THEO NGÀNH NÀY?
$ = 7 tỷ USD >>> 30 tỷ USD trong 3 năm tới
04/11/2023 4
iOS Android Tizen Windows Phone 7 Blackberry OS & Qnx WebOS MeeGo Symbian.
CÁC MOBILE OS
04/11/2023 5
THỐNG KÊ THỊ TRƯỜNG
04/11/2023 6
THỐNG KÊ LẬP TRÌNH VIÊN
04/11/2023 7
THỐNG KÊ LẬP TRÌNH VIÊN
04/11/2023 8
Vậy, Mobile OS nào là tốt nhất?
ANDROID, IOS, WINDOWS PHONE…
04/11/2023 9
Lấy ứng dụng làm trung tâm.
Mọi biểu tượng ứng dụng có thể di chuyển hoặc xóa được.
Nổi bật với các Widget.
Noti fi cati on bar…
GIAO DIỆN NGƯỜI DÙNG
04/11/2023 10
Sự kết hợp phần cứng và phần mềm hoàn hảo.
Màn hình thoáng đãng với các biểu tượng ứng dụng dàn ngay hàng thẳng lối rõ ràng.
11 màn hình chính.
Nâng cấp với Noti fi cati on bar.
ANDROID, IOS, WINDOWS PHONE…
04/11/2023 11
Thay vì lấy ứng dụng làm trung tâm, như với các nền tảng iOS và Android, Microsoft sử dụng khái niệm mới, gọi là hub (trung tâm), để tổ chức nội dung trong Windows Phone 7.
Mỗi hub là một bộ sưu tập các ứng dụng cùng nhóm.
2 màn hình chính.
ANDROID, IOS, WINDOWS PHONE…
04/11/2023 12
ỨNG DỤNG VÀ TÍNH MỞ
04/11/2023 13
KHẢ NĂNG TÙY BIẾN
04/11/2023 14
KHẢ NĂNG TÍCH HỢP DỮ LIỆU
04/11/2023 15
GOOGLE ANDROID
Là gì ?
Open Source OS
Linux kernel (2.6)
Mobile platform (smartphone)
Liên minh OHA (Open Handset Allien): HTC, LG, Samsung, Motorola, T-Mobile, Sprint, NVIDIA, Intel, Broadcom, Qualcom,…)
GOOGLE ANDROID
Có gì nổi bật ? Full web (Html/html5, javascript, flash)
Game 2D/3D
Đa điểm (Multi touch)
Đa luồng (Multi thread)
Media (Video fullHD, MPeg4, H.264, Mp3, Acc, Ogg,…)
Wifi, 3G, GPS, Sensor,…
GOOGLE ANDROID
Lịch sử phát triển:
Google mua Android Inc 17-8-2005
Ra mắt cộng đồng tháng 11-2007, thành lập OHA (Open Handset Allien)
Phiên bản 1.0 ra mắt tháng 9-2008, T-Mobile G1
Phiên bản 1.1 ra mắt tháng 2-2009
GOOGLE ANDROID
Các phiên bản
1.5 (Cupcake) – 04/2009
1.6 (Donut) – 09/2009
2.0/2.1 (Eclair) – 10/2009, 01/2010
2.2 (Froyo) – 05/2010
2.3 (Gingerbread) – 06/12/2010
3.0/3.1/3.2 (HoneyComb) – 03 – 7 /2011
4.0 (Ice cream sandwich) – 9/2011
GOOGLE ANDROID
Ice cream sandwich
GOOGLE ANDROID
Thị phần (Toàn cầu)
150 triệu điện thoại
500.000 lượt active/ngày40%
24%2%
34%
Thị phần Android toàn cầu
AndroidiOsPhone 7Others
GOOGLE ANDROID
Thị phần (Việt Nam)
28.71
59.76
2.32
0.36
5.392.93 0.52
Thị phần Android tại Việt Nam
AndroidSymbianWM7/WMBlacBerryLinuxiOSMaemo/Meego
200.000 android device
5 triệu vào năm 2015
GOOGLE ANDROID
Android Market
GOOGLE ANDROID
Android Market
Số lượng ứng dụng/game: 500.000+
Số lượt tải: 8,1 tỉ lượt
Số lượt tải: 31.8 tỉ lượt vào năm 2016
GOOGLE ANDROID
Android phone
HTC G1 Google Nexus One
GOOGLE ANDROID
Android phone
Motorola Droid/Milestone Samsung Galaxy S
GOOGLE ANDROID
Android phone
HTC Desire HTC Wildfire
GOOGLE ANDROID
Android phone
Samsung Galaxy SII SonyEricsson Arc
GOOGLE ANDROID
Tiếp cận thế nào ?
Sản xuất device
Sản xuất ứng dụng, game
Cung cấp giải pháp: nhúng, mini board,..
GOOGLE ANDROID
Lợi nhuận từ đâu ? Sản xuất device:
Bán device to end user
Sản xuất ứng dụng, game: Bán qua Android Market, Vimarket, F-Store,.. Free và thu lợi nhuận từ quảng cáo in app Outsoucing cho đối tác nước ngoài
Cung cấp giải pháp: nhúng, mini board,.. Nghiên cứu và bán giải pháp Outsourcing
GOOGLE ANDROID
Làm ứng dụng loại nào ?
GOOGLE ANDROID
Làm thế nào để phát triển ứng dụng/game ?
GOOGLE ANDROID
Kiến trúc
PHÁT TRIỂN ỨNG DỤNG
Chuẩn bị những gì ?
Logic lập trình
Java, C/C++ language
Kiến thức căn bản về Android OS
Khái niệm lập trình trên mobile
Các cộng cụ phát triển
PHÁT TRIỂN ỨNG DỤNG
Công cụ phát triển ?
Android SDK (Software Development Kit) - Free
Android NDK (Native Development Kit) - Free
Windows / Linux (Ubuntu,…)
Eclipse / Netbean IDE - Free
Máy ảo/ máy thật chạy Android
PHÁT TRIỂN ỨNG DỤNG
Vimarket VietNam 3.0 KarDroid
PHÁT TRIỂN GAME
Chuẩn bị những gì ?
Tư duy đồ họa căn bản
Kiến thức về đồ họa 2D/3D (sprite, camera, projector, model, animation, Texture…)
OpenGL/ES
Game engine
PHÁT TRIỂN GAME
Công cụ phát triển ?
Công cụ tạo hình: map, nhân vật, vật thể, bối cảnh
Công cụ lập trình
Game engine / Game framework
Tập trung vào C/C++ language
Máy ảo/ máy thật chạy Android: debug, kiểm thử
PHÁT TRIỂN GAME
Game engine:
AndEngine (andengine.org): 2D, java (Free)
Libgdx (code.google.com/p/libgdx/) : Java (JNI) (Free)
Unity (unity3d.com/unity): 3D, C#, C++
PHÁT TRIỂN ỨNG DỤNG
Ô ăn quan Jewel 1 Jewel 2
DOWNLOAD ECLIPSE
IDE cho lập trình: EclipseDownload: http://www.eclipse.org/downloads/
Vào link bên trên, download eclipse classic về rồi giải nén.
CÀI ĐẶT ADT PLUGIN
• Mở Eclipse lên, bấm vào Help Install new software.• Ở form hiện ra, chọn Add…• Ở mục Name, nhập tên gì cũng được, ví dụ như ADT
plugin• Ở mục Location, nhập vào link:
http://dl-ssl.google.com/android/eclipse/• Sau đó bấm OK, chọn hết tất cả rồi bấm next cho đến
lúc xong.
CÀI ĐẶT ANDROID SDK
Có thể xem hướng dẫn cài đặt gốc tại đây http://developer.android.com/sdk/installing.html
Muốn cài đặt offl ine: http://dl-ssl.google.com/android/repository/repository.xmlhttp://dl-ssl.google.com/android/repository/<package name>
CÀI ĐẶT ANDROID SDK
Tải Android SDK tại link này http://developer.android.com/sdk/index.html (nhớ chú ý là nó chia ra Window, Mac và Linux)
Mở Eclipse window preferences Android trong mục SDK location chọn Browse đưa đường dẫn đến thư mục SDK bấm apply.
CÀI ĐẶT ANDROID SDK
Eclipse window Android SDK and AVD manager Available packages chọn và cài hết (hơi lâu một chút) hoặc bạn có thể chỉ chọn mấy cái liên quan đến Android 1.6 thôi cũng được (API level 4).
CÀI ĐẶT ANDROID SDK
Sau khi xong thì bấm vào Installed packages
TẠO MỘT ĐIỆN THOẠI ẢO (AVD)
• Eclipse window Android SDK and AVD manager ở cái cửa sổ mới đó, chọn mục Virtual devices bấm nút New…
• Mục Name: đặt tên gì cũng được• Mục target: chọn API level 4• Sdcard size: bạn gõ vào 1024 (hoặc có thể cao hơn)• Sau đó bấm Create AVD.
TẠO MỘT PROJECT MỚI
Ở màn hình eclipse, bấm File New Project Android Android Project Next
Hoặc trên thanh công cụ bấm vào icon như trong hình
TẠO MỘT PROJECT MỚI
Ở màn hình kế nhập liệu vào các ô như sau: Project name: HelloWorld (tên project hiển trị trên eclipse
cũng sẽ là thư mục chứ ứng dụng trong workspace) Application name: Hello World (tên ứng dụng sẽ hiện thị
trên điện thoại) Package name: org.multiuni.android.hellowrold (tên của
package sẽ chứa source code, tương tự trong java http://en.wikipedia.org/wiki/Java_package#Package_naming_conventions)
Create activity: HelloWorldActivity (tạo một lớp con của lớp Activity, dùng để hiển thị một màn hình ở đây là màn hình HelloWorld của chúng ta)
Min SDK version: 4 (tức SDK 1.6, ở đây chúng ta khai báo là ứng dụng này có thể đáp ứng được phiên bản SDK cũ nhất là phiên bản nào)
Sau khi hoàn tất bấm Finish, project mới đã được tạo.
TẠO MỘT PROJECT MỚI
CẤU TRÚC MỘT PROJECT
Thư mục src chứa source code ứng dụng. Gồm các package và các class.
Thư mục gen chứa các fi le tự động phát sinh (mà thường gặp nhất là R.class)
Thư mục res để chứa các resource dùng trong ứng dụng (thông qua ID)
Thư mục assets chứa các resource fi le mà ứng dụng cần dùng (dưới dạng fi le)
CẤU TRÚC MỘT PROJECT
File Manifest là fi le khai báo thông tin về ứng với hệ thống (như ứng dụng gồm những màn hình nào, có service nào… xin các quyền gì, phiên bản bao nhiêu, dùng từ SDK phiên bản nào…)
Ngoài ra còn có fi le thư viện.
CHẠY ỨNG DỤNG HELLO WORLD
Với ứng dụng vừa tạo nếu có báo lỗi thì bạn sửa lại thông số cho ứng dụng như sau: bấm chuột phải vào project Properties Java compiler Compiler compliance settings: 1.6
CHẠY ỨNG DỤNG HELLO WORLD
Bấm Ctrl + F11 để chạy ứng dụng, sẽ hiện lên emulator
TẠO UI TRỰC TIẾP TỪ CODE
Code ban đầu của ứng dụng:
public class HelloWorldActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}
TẠO UI TRỰC TIẾP TỪ CODE
Sửa lại như bên dưới rồi chạy lại (nếu thấy báo lỗi thiếu thư viện, thử bấm Ctrl + Shift + O)
public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("Hello, Android"); setContentView(tv); }}
THỬ XỬ LÝ SỰ KIỆN
Ở code bên trên, đổi TextView lại thành Button.Button bt = new Button(this);
Sau đó, implement phương thức xử lý sự kiện khi user click vào nút này
bt.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {
Toast.makeText(getApplicationContext(), "Hello World",
Toast.LENGTH_LONG).show();}
});
MỘT SỐ PHÍM TẮT
Để import các thư viện còn thiếu bấm Ctrl + Shift + O
Để xóa một dòng code bấm Ctrl + DĐể hiển thị bảng suggestion bấm Ctrl +
SpaceĐể comment một dòng code Ctrl + /
THỬ XOAY MÀN HÌNH
Tạo 1 project mới tên là Orientaion.Sau đó, bấm phải chuột vào thư mục res new
Folder nhập tên folder là layout-land (nhập chính xác)
THỬ MỘT CHÚT VỀ XOAY MÀN HÌNH
Trong thư mục layout ban đầu có fi le main.xml, copy fi le đó, cho vào thư mục layout-land, vậy là mỗi thư mục đều có một fi le main.xml
Ở mỗi fi le main trong 2 thư mục đó, đều có đoạn này:
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text=“@string/hello"
/>
THỬ MỘT CHÚT VỀ XOAY MÀN HÌNH
Các bạn sửa cái nội dung android:text trong đoạn xml lại, để cho 2 fi le main đó có 2 nội dung text khác nhau là được.
Chạy chương trình, sau khi màn hình hiển thị, bấm Ctrl + F11 (Ctrl bên trái) thử xem kết quả.
KẾT THÚC
Tham khảo bản tiếng Anh tại link này: http://developer.android.com/resources/tutorials/hello-world.html
Có thể thử các view khác nhau và xử lý một số sự kiện khác như sự kiện long click, sự kiện touch, sự kiện focus… trên các đối tượng view như Button, TextView, ImageView, ImageButton…
THIẾT KẾ GIAO DIỆN TRÊN ANDROID
Trong Android, dùng Activity để hiển thị màn hình.Mỗi activity sẽ chứa các View theo dạng cấu trúc cây,
nghĩa là một Layout gốc chứa các view/layout con bên trong hoặc chỉ có 1 view duy nhất (lưu ý Layout cũng là một view).
Có thể thiết kế giao diện trong code java hoặc trong fi le xml trong thư mục layout.
TREE VIEW
LAYOUT MẪU CỦA HELLOWORLD
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fil l_parent"
android:layout_height="fil l_parent”>
<TextView
android:layout_width="fil l_parent"
android:layout_height="wrap_content"
android:text=“@string/hello“ />
</LinearLayout>
MỘT SỐ THUỘC TÍNH CƠ BẢN
Layout_width, layout_height: chiều rộng của view (fi ll_parent là to bằng kích thước của layout chứa view này, wrap_content là vừa đủ nội dung cần hiển thị của view)
Orientation: với LinearLayout, việc sắp xếp các view là nằm kề nhau theo hàng ngang hoặc hàng dọc, ta khai báo orientation để chọn sắp theo kiểu nào (horizontal/vertical)
MỘT SỐ THUỘC TÍNH CƠ BẢN
Gravity: thuộc tính này qui định các view nằm bên trong layout sẽ đặt theo vị trí nào so với layout (trung tâm, trái, phải, trên dưới…)
Weight: để các view phan chia tỉ lệ diện tích hiển thị trên màn hình (tỉ lệ tính theo weight của từng view trên tổng số weight, các view ko khai báo weight thì sẽ xem qua width và height)
VÍ DỤ CƠ BẢN
Vào link này lấy code cho vào ứng dụng: http://developer.android.com/resources/tutorials/views/hello-linearlayout.html
THỰC HÀNH
Làm một layout hiển thị như trong hình:
Các bước như sau: Phân tích thành phần layout trên giấy Phân tích đặc điểm các view Add thêm resource ảnh Thử trước với với tab layout (khi view file xml trong
eclipse) Đưa vào thực thi trên máy, đánh giá
MỘT SỐ LOẠI LAYOUT KHÁC
FrameLayout: các view bên trong được qui định vị trí bằng khoảng cách so với biên trái và trên so với layout, các view có thể đè lên nhau.
RelativeLayout: các view được thiết kế dựa trên quan hệ giứa chúng với nhau và với layout chứa chúng.
AbsoluteLayout: dành cho bạn nào làm nhiều với C#, nhưng không khuyến khích với Android.
…
LƯU Ý KHI THIẾT KẾ GIAO DIỆN
Hạn chế độ sau của câyVới các Layout phức tạp, đừng dùng RelativeLayoutNên chèn vào dữ liệu tạm để xem trước layout hiển
thị ra sao bên tab layout (trong eclipse), nhưng xong rồi thì nhớ xóa dữ liệu tạm đi.
FrameLayout có vấn đề với backgroundMuốn tìm thuộc tính gì, bấm “android:” rồi đợi
suggestion xổ ra xem.
THỰC HÀNH NHANH
Thử thực hành các ví dụ sau:http://developer.android.com/resources/tutorials/views/hello-formstuff.htmlhttp://developer.android.com/resources/tutorials/views/hello-webview.html
LIST
Rất hay dùng trong Android. Đặc biệt các ứng dụng cần lưu trữ và hiển thị nhiều dữ liệu.
List là một danh sách các view thông thường có cùng dạng layout đặt liền nhau.
APIDEMOS
Mở ứng dụng ApiDemos đã có sẵn: New android project Create project from existing source
Browse mở thư mục SDK platforms android-1.6 samples ApiDemos OK Finish.
Mở thư mục project trong eclipse src mở com.example.android.apis.view mở file List1.java
LIST1
Trong code của List1, các bạn tách bạch phần tạo mới ArrayAdapter ra nhé
ArrayAdapter adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mStrings);
setListAdapter(adapter);Adapter dùng để kết nối dữ liệu cần đưa vào list với
layout hiển thị và cung cấp cho ListView hiển thị.
LIST1
Với đoạn tạo một adapter, ta phân tích ra: this: context, lúc nào làm view cũng cần rồi android.R.layout.simple_list_item_1: layout để hiển thị mỗi
item trong list, ở đây chỉ có một TextView mStrings: mảng các chuỗi kí tự, là dữ liệu cần hiển thị
Sau khi tạo xong adapter, truyền vào cho list hiển thị.
LIST1
Tạo một project mới, copy code List1 bỏ qua, rồi làm thêm các thao tác sau: Tạo 1 file layout có 1 TextView và 1 ImageView Trong TextView thêm dòng này
android:id=“@+id/text” Sửa lại đoạn tạo mới adapter cho nó dùng cái layout vừa
tạo. (tìm xem có cái constructor nào giúp chỉ chính xác đến cái TextView trong layout hay ko) Dạng này: ArrayAdapter(Context context, int resource, int
textViewResourceId, T[] objects) Chạy ứng dụng