78
Lập trình trên thiết bị di động 06/22/2022 1 Huỳnh Công Thịnh – [email protected] MOBILE PROGRAMMING

Mobile programming

Embed Size (px)

DESCRIPTION

Mobile Programming

Citation preview

Page 1: Mobile programming

04/11/2023

Lập trình trên thiết bị di động

1Huỳnh Công Thịnh –

[email protected]

MOBILE PROGRAMMING

Page 2: Mobile programming

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?

Page 3: Mobile programming

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

Page 4: Mobile programming

04/11/2023 4

iOS Android Tizen Windows Phone 7 Blackberry OS & Qnx WebOS MeeGo Symbian.

CÁC MOBILE OS

Page 5: Mobile programming

04/11/2023 5

THỐNG KÊ THỊ TRƯỜNG

Page 6: Mobile programming

04/11/2023 6

THỐNG KÊ LẬP TRÌNH VIÊN

Page 7: Mobile programming

04/11/2023 7

THỐNG KÊ LẬP TRÌNH VIÊN

Page 8: Mobile programming

04/11/2023 8

Vậy, Mobile OS nào là tốt nhất?

ANDROID, IOS, WINDOWS PHONE…

Page 9: Mobile programming

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

Page 10: Mobile programming

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…

Page 11: Mobile programming

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…

Page 12: Mobile programming

04/11/2023 12

ỨNG DỤNG VÀ TÍNH MỞ

Page 13: Mobile programming

04/11/2023 13

KHẢ NĂNG TÙY BIẾN

Page 14: Mobile programming

04/11/2023 14

KHẢ NĂNG TÍCH HỢP DỮ LIỆU

Page 15: Mobile programming

04/11/2023 15

Page 16: Mobile programming

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,…)

Page 17: Mobile programming

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,…

Page 18: Mobile programming

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

Page 19: Mobile programming

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

Page 20: Mobile programming

GOOGLE ANDROID

Ice cream sandwich

Page 21: Mobile programming

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

Page 22: Mobile programming

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

Page 23: Mobile programming

GOOGLE ANDROID

Android Market

Page 24: Mobile programming

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

Page 25: Mobile programming

GOOGLE ANDROID

Android phone

HTC G1 Google Nexus One

Page 26: Mobile programming

GOOGLE ANDROID

Android phone

Motorola Droid/Milestone Samsung Galaxy S

Page 27: Mobile programming

GOOGLE ANDROID

Android phone

HTC Desire HTC Wildfire

Page 28: Mobile programming

GOOGLE ANDROID

Android phone

Samsung Galaxy SII SonyEricsson Arc

Page 29: Mobile programming

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,..

Page 30: Mobile programming

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

Page 31: Mobile programming

GOOGLE ANDROID

Làm ứng dụng loại nào ?

Page 32: Mobile programming

GOOGLE ANDROID

Làm thế nào để phát triển ứng dụng/game ?

Page 33: Mobile programming

GOOGLE ANDROID

Kiến trúc

Page 34: Mobile programming
Page 35: Mobile programming

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

Page 36: Mobile programming

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

Page 37: Mobile programming

PHÁT TRIỂN ỨNG DỤNG

Vimarket VietNam 3.0 KarDroid

Page 38: Mobile programming

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

Page 39: Mobile programming

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ử

Page 40: Mobile programming

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++

Page 41: Mobile programming

PHÁT TRIỂN ỨNG DỤNG

Ô ăn quan Jewel 1 Jewel 2

Page 42: Mobile programming

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.

Page 43: Mobile programming

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.

Page 44: Mobile programming

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>

Page 45: Mobile programming

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.

Page 46: Mobile programming

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).

Page 47: Mobile programming

CÀI ĐẶT ANDROID SDK

Sau khi xong thì bấm vào Installed packages

Page 48: Mobile programming

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.

Page 49: Mobile programming

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

Page 50: Mobile programming

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)

Page 51: Mobile programming

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

Page 52: Mobile programming

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)

Page 53: Mobile programming

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.

Page 54: Mobile programming

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

Page 55: Mobile programming

CHẠY ỨNG DỤNG HELLO WORLD

Bấm Ctrl + F11 để chạy ứng dụng, sẽ hiện lên emulator

Page 56: Mobile programming

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); }}

Page 57: Mobile programming

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); }}

Page 58: Mobile programming

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();}

});

Page 59: Mobile programming

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 + /

Page 60: Mobile programming

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)

Page 61: Mobile programming

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"

/>

Page 62: Mobile programming

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ả.

Page 63: Mobile programming

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…

Page 64: Mobile programming

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.

Page 65: Mobile programming

TREE VIEW

Page 66: Mobile programming

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>

Page 67: Mobile programming

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)

Page 68: Mobile programming

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)

Page 69: Mobile programming

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

Page 70: Mobile programming

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á

Page 71: Mobile programming

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.

Page 72: Mobile programming

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.

Page 73: Mobile programming

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

Page 74: Mobile programming

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.

Page 75: Mobile programming

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

Page 76: Mobile programming

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ị.

Page 77: Mobile programming

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ị.

Page 78: Mobile programming

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