SlideShare una empresa de Scribd logo
1 de 45
1
ANDROID NÂNG CAOANDROID NÂNG CAO
Bài 6:
Multi ThemeMulti Theme
adb tooladb tool
JUnitJUnit
2
Nội dung bài học
● Multi theme.
● adb tool.
● JUnit.
3
Nội dung bài học
● Multi theme.
● adb tool.
● JUnit.
4
Multi Theme
● Có nhiều cách để hỗ trợ nhiều theme cho
chương trình Android. Phần này sẽ giới thiệu
một phương pháp đã thực hiện trong một dự án.
Các phương pháp khác xem ở phần “Tham
khảo”.
● Phương pháp này tổ chức bằng cách sau:
● Hình ảnh (image) của một theme được tổ chức trong
một tập tin zip (nén) có cấu trúc như cấu trúc
Android (có chứa các thư mục ldpi, mdpi, hdpi).
● Màu sắc được khai báo trong một tập tin dạng CSV
hay XML.
5
Multi Theme
● Phương pháp này tổ chức bằng cách sau:
● Tên của tập tin định nghĩa màu sắc và tập tin hình
ảnh được qui định ở tập tin cấu hình xml
(config.xml).
assets
config.xml
ThemeA.xml
ThemeB.xml
ThemeA-mdpi.zip
ThemeA-ldpi.zip
ThemeA-hdpi.zip
ThemeA-xdpi.zip
6
Multi Theme
● Phương pháp này tổ chức bằng cách sau:
● File config.xml có thể có nội dung như sau:
<themes>
<theme>
<id>1</id>
<name>Blue</name>
<description>Mo ta ve theme o day</description>
<img>ThemeA.zip</img>
<color>ThemeA.xml</color>
</theme>
<theme>
<id>2</id>
<name>White</name>
<description>Mo ta ve theme o day</description>
<img>ThemeB.zip</img>
<color>ThemeB.xml</color>
</theme>
</themes>
7
Multi Theme
● Phương pháp này tổ chức bằng cách sau:
● Sơ đồ class
8
Multi Theme
● Phương pháp này tổ chức bằng cách sau:
● Lược đồ tuần tự
9
Nội dung bài học
● Tham khảo:
●
Sanjay Sharma,
How to create and set multiple theme of a android application ?
● Matthias, Understanding Android Themes And Styles
● Styles and Themes
10
Nội dung bài học
● Multi theme.
● adb tool.
● JUnit.
11
adb tool
● Giới thiệu về adb tool:
 adb tool là một công cụ được cung cấp kèm theo
SDK dùng để quản lý trạng thái của các thiết bị cũng
như emulator.
 adb tool sử dụng giao diện dòng lệnh (command
line) để giao tiếp với người dùng.
 Chúng ta nên thêm thư mục <SDK>/tools vào đường
dẫn PATH để có thể truy xuất adb được dễ dàng hơn.
12
adb tools
1.adb -help → Thông tin trợ giúp (help) của adb
được trình bày
2.adb devices → Liệt kê danh sách những
emulator hay thiết bị thật đang hoạt động.
13
adb tools
3.adb uninstall <package name> → Gỡ bỏ một
ứng dụng có tên package là <package name>
khỏi emaulator hoặc thiết bị.
2.adb install <apk path>→ Cài đặt ứng dụng
trong tập tin apk tại <apk path>lên emulator hay
thiết bị.
14
adb tools
5.adb push <local path> <remote path> → Copy
remote path đến local path.
2.adb pull <remote path> <local path>→ Copy
local path đến remote path.
15
adb tools
7.adb shell → Kết nối với thiết bị và launch
shell. Sau khi dấu nhắc shell xuất hiện, chúng ta
có thể sử dụng các lệnh shell như ls, cd, pwd,
rm:
● ls: Trình bày thông tin về tập tin hoặc thư mục.
● cd <path>: Chuyển thư mục hiện tại về thư mục path.
● pwd: Trình bày thư mục hiện tại.
● rm <file>: Xoá tập tin file.
16
adb tools
8.Làm việc với CSDL SQLite
● Đang ở dấu nhắc shell
– sqlite3 <database path>
– Dấu nhắc sqlite xuất hiện, nhập lệnh vào để thực thi.
● .help → Trình bày thông tin trợ giúp
● .dump → Xuất nội dung của csdl ra màn hình
● .schema → Trình bày câu lệnh CREATE
● <Câu lệnh SQL>; → Thực thi câu lệnh SQL
● .exit → Thoát khỏi dấu nhắc sqlite
17
Nội dung bài học
● Multi theme.
● adb tool.
● JUnit.
18
JUnit
● Giới thiệu JUnit
● Android JUnit
● Sample code
● Android test project
19
JUnit
● Giới thiệu JUnit
● Android JUnit
● Sample code
● Android test project
20
JUnit
● Giới thiệu JUnit:
● JUnit là một framework dùng để phát triển
unit test cho các chương trình Java.
● JUnit được dùng để phát triển test code cho
việc xác nhận lại các hành vi của chương trình
cần test là đúng như mong đợi hay không.
Quá trình kiểm tra được tiến hành thông qua
việc thực thi test code.
● Quá trình test có thể tiến hành nhiều lần một
cách tự động do đó đảm bảo chất lượng cho
chương trình cần test.
21
JUnit
● Giới thiệu JUnit
● Android JUnit
● Sample code
● Android test project
22
JUnit
● Android JUnit:
● Android JUnit là bản customize từ JUnit 3.
● Android JUnit cho phép phát sinh các thao tác trên
giao diện người dùng và các sự kiện trong chu trình
sống của Activity (onCreate, onResume, onPause,
…).
● JUnit thực thi trên JVM của máy phát triển; Android
JUnit Runner tiến hành việc test bằng cách cài đặt và
thực thi chương trình test trên Emulator hay thiết bị
thật.
● Để hiện thực code test chúng ta cần kế thừa từ lớp
junit.framework.TestCase. Tuy nhiên trong Android
JUnit đã chuẩn bị sẵn các lớp kế thừa cho các mục
đích đặc biệt
23
JUnit
● Android JUnit:
● Các lớp kế thừa từ TestCase do Android JUnit cung
cấp
TestCase
AndroidTestCase InstrumentTestCase
ServiceTestCase ProviderTestCase2 ApplicationTestCase
ActivityUnitTestCase ActivityInstrumentationTestCase2
Life cycle event test UI operation test
24
JUnit
● Giới thiệu JUnit
● Android JUnit
● Sample code
● Android test project
25
JUnit
● Sample code:
● Junit:Giả sử chúng ta muốn test đoạn code sau
đây:
public class Adder{
public int add(int addend1, int addend2){
return addend1+addend2;
}
}
26
JUnit
● Sample code:
● JUnit:
● Test code:
import junit.framework.TestCase;
public class AdderTest extends TestCase { … 
private Adder adder = null;
protected void setUp() throws Exception { … 
super.setUp();
adder = new Adder();
}
protected void tearDown() throws Exception { … 
super.tearDown();
}
public void testAdd(){ …
int actual = adder.add(4, 5);
assertEquals(9, actual); …
}
}
27
JUnit
● Sample code:
● JUnit:
1. Thừa kế từ lớp junit.framework.TestCase. Tên lớp thường đặt
bằng cách thêm chữ Test vào sau tên của lớp cần test.
2. Phương thức setUp sẽ được thực thi trước tiên. Phương thức này
là nơi để chuẩn bị cho test case như chuẩn bị dữ liệu, khởi tạo
biến, …
3. Phương thức tearDown sẽ được thực thi sau khi test case kết thúc.
Dọn dẹp như xoá các lưu trữ tạm thời, đóng file đã mở, …
4. Tên của phương thức test có dạng testXXX. Phương thức này
không có tham số và là phương thức “public void”
5. assertEquals là phương thức dùng để xác nhận lại hành vi của
code cần test. Tham số thứ nhất là kết quả mong đợi; tham số thứ
2 là kết quả thật sự. Nếu như hai giá trị này giống nhau thì test
“PASS”, ngược lại thì test “FAILED” (ngoài ra còn có assertTrue,
assertFalse, ...)
28
JUnit
● Sample code:
● Android Junit:
● Ví dụ ActivityInstrumentationTestcase2
public class MainActivityTest
extends ActivityInstrumentationTestCase2<MainActivity> {
//public MainActivityTest(){
// super("com.example.junitdemo",MainActivity.class);
//}
public MainActivityTest(){
super(MainActivity.class);
}
public void test0InputTextField(){
EditText edtTest = (EditText)getActivity().findViewById(com.example.junitdemo.R.id.edtTestId);
edtTest.requestFocus();
sendKeys(KeyEvent.KEYCODE_T,
KeyEvent.KEYCODE_E,
KeyEvent.KEYCODE_S,
KeyEvent.KEYCODE_T);
assertEquals("test", edtTest.getText().toString());
}
}
Activity cần test
Class của Activity cần test
Gửi các key event
29
JUnit
● Sample code:
● Android Junit:
● Ví dụ ActivityInstrumentationTestcase2
public class MainActivityTest
extends ActivityInstrumentationTestCase2<MainActivity> {
public void test1PressOnButton(){
final EditText edtTest = (EditText)getActivity().
findViewById(com.example.junitdemo.R.id.edtTestId);
final Button btnGetResult = (Button)getActivity().
findViewById(com.example.junitdemo.R.id.btnGetResultId);
TextView lblResultValue = (TextView)getActivity().
findViewById(com.example.junitdemo.R.id.lblResultValue);
getActivity().runOnUiThread(new Runnable() {
public void run() {
edtTest.setText("xyz");
btnGetResult.performClick();
}});
getInstrumentation().waitForIdleSync();
assertEquals("xyz",lblResultValue.getText().toString());
}
}
Yêu cầu thực thi trên UI thread
Click nút “Get Result”
Chờ chuyển từ UI thread qua
30
JUnit
● Sample code:
● Android Junit:
● Ví dụ ActivityInstrumentationTestcase2
public class MainActivityTest
extends ActivityInstrumentationTestCase2<MainActivity> {
public void test2GoButton(){
ActivityMonitor monitor =
new ActivityMonitor("com.example.junitdemo.MainActivity2", null, false);
getInstrumentation().addMonitor(monitor);
final Button btnGo = (Button)getActivity().findViewById(com.example.junitdemo.R.id.btnGoId);
final String hello = getActivity().getString(com.example.junitdemo.R.string.hello_world);
getActivity().runOnUiThread(new Runnable() {
public void run() {
btnGo.performClick();
}});
Activity m2Activity = getInstrumentation().waitForMonitor(monitor);
assertTrue(m2Activity!=null);
TextView lblHello =(TextView) m2Activity.findViewById(com.example.junitdemo.R.id.lblHello);
assertEquals(hello,lblHello.getText().toString());
m2Activity.finish();
}}
Giám sát Activity sẽ chuyển đến
Truy xuất Activity vừa chuyển đến
31
JUnit
● Sample code:
● Android Junit:
● Ví dụ ActivityUnitTestCase
public class MainActivity2Test extends ActivityUnitTestCase<MainActivity2> {
public MainActivity2Test() {
super(MainActivity2.class);
}
public void testSendResumeEvent() throws Exception {
Intent intent = new Intent(Intent.ACTION_MAIN);
startActivity(intent, null, null);
getInstrumentation().callActivityOnResume(getActivity());
}
}
Activity cần test
Run onResume
32
Bài tập 10
● Viết unit test cho các service demo ở Bài học số
1, content provider ở bài học số 4.
33
JUnit
● Giới thiệu JUnit
● Android JUnit
● Sample code
● Android test project
34
JUnit
● Android test project
● Tạo JUnit project:
● Trong Eclipse, chọn File > New > Other:
35
JUnit
● Android test project
● Tạo JUnit project:
● Chọn “Android Test Project” trong nhóm
“Android” sau đó chọn nút “Next”:
36
JUnit
● Android test project
● Tạo JUnit project:
● Nhập tên của project test, chọn nút “Next”:
37
JUnit● Android test project
● Tạo JUnit project:
● Mặc định dự án cần test được chọn sẵn khi
“An existing Android project” được chọn,
do đó chỉ cần nhất nút “Next”:
38
JUnit● Android test project
● Tạo JUnit project:
● Chọn build target, chọn nút “Finish”:
39
JUnit● Android test project
● Tạo Test case: Để tạo test case:
● File > New > Other
● Trong mục Junit, chọn JUnit Test Case, nhấn nút “Next”
40
JUnit● Android test project
● Tạo Test case:
● Chọn “New JUnit3 test”, nhập “Name”, “Superclass”,
nhấn nút “Finish”
41
JUnit● Android test project
● Tạo Test case:
● Chọn “New JUnit3 test”, nhập “Name”, “Superclass”,
nhấn nút “Finish”
42
JUnit● Android test project
● Tạo Test case:
● ADT tự động thêm vào Android Manifest các dòng màu
đen sau đây:
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.junitdemo" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>
43
JUnit● Android test project
● Thực thi Test case:
Ấn chuột phải vào tên test project,
Chọn Run As > Android JUnit Test
44
JUnit● Android test project
● Xem kết quả thực thi:
Pass Failed
Nguyen Huu Phuoc, MEng.
●  Blog:http://folami.nghelong.com
●  Website http://phuocnh.nghelong.com

Más contenido relacionado

La actualidad más candente

Meo lap trinh_tech24.vn
Meo lap trinh_tech24.vnMeo lap trinh_tech24.vn
Meo lap trinh_tech24.vnphiagame
 
Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Đặng Til
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaANHMATTROI
 
Lap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaLap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaANHMATTROI
 
Flutter widget
Flutter widgetFlutter widget
Flutter widgetThnhLong32
 
Flutter widget
Flutter widgetFlutter widget
Flutter widgetThnhLong32
 
Các bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaCác bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaBrand Xanh
 
Báo cáo tuần 5- Xây dựng các class liên quan Đơn hàng, sản phẩm, database
Báo cáo tuần 5- Xây dựng các class liên quan Đơn hàng, sản phẩm, databaseBáo cáo tuần 5- Xây dựng các class liên quan Đơn hàng, sản phẩm, database
Báo cáo tuần 5- Xây dựng các class liên quan Đơn hàng, sản phẩm, databaseDlinh Truong
 
Bài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hookBài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hookjackjohn45
 
Giao trinh java script
Giao trinh java scriptGiao trinh java script
Giao trinh java scripthieusy
 
Core java 5
Core java 5Core java 5
Core java 5. .
 
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng YênGiáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng YênTrần Thiên Đại
 
Android chapter22-services
Android chapter22-servicesAndroid chapter22-services
Android chapter22-servicesmanhvokiem
 
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPTBÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPTMasterCode.vn
 
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)Slide bài giảng lập trình Android DTU - Phần 4 (Activity)
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)Techacademy Software
 
Core java 6
Core java 6Core java 6
Core java 6. .
 

La actualidad más candente (20)

Auto it (upload_by_nguyentin2703)
Auto it (upload_by_nguyentin2703)Auto it (upload_by_nguyentin2703)
Auto it (upload_by_nguyentin2703)
 
Meo lap trinh_tech24.vn
Meo lap trinh_tech24.vnMeo lap trinh_tech24.vn
Meo lap trinh_tech24.vn
 
Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Slide3 - Co ban HTML5
Slide3 - Co ban HTML5
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong java
 
Lap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaLap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi Java
 
Laptrinh jdbc
Laptrinh jdbcLaptrinh jdbc
Laptrinh jdbc
 
Flutter widget
Flutter widgetFlutter widget
Flutter widget
 
Flutter widget
Flutter widgetFlutter widget
Flutter widget
 
Các bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaCác bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với java
 
Báo cáo tuần 5- Xây dựng các class liên quan Đơn hàng, sản phẩm, database
Báo cáo tuần 5- Xây dựng các class liên quan Đơn hàng, sản phẩm, databaseBáo cáo tuần 5- Xây dựng các class liên quan Đơn hàng, sản phẩm, database
Báo cáo tuần 5- Xây dựng các class liên quan Đơn hàng, sản phẩm, database
 
Bài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hookBài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hook
 
Giao trinh java script
Giao trinh java scriptGiao trinh java script
Giao trinh java script
 
Tuan 3
Tuan 3Tuan 3
Tuan 3
 
Core java 5
Core java 5Core java 5
Core java 5
 
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng YênGiáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
 
Android chapter22-services
Android chapter22-servicesAndroid chapter22-services
Android chapter22-services
 
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPTBÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
 
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)Slide bài giảng lập trình Android DTU - Phần 4 (Activity)
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)
 
Core java 6
Core java 6Core java 6
Core java 6
 
Java Tieng Viet
Java Tieng VietJava Tieng Viet
Java Tieng Viet
 

Destacado

Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Phuoc Nguyen
 
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...Ngo Trung
 
Test Driven development
Test Driven developmentTest Driven development
Test Driven developmentMU VN
 
Android presentation
Android presentationAndroid presentation
Android presentationNguyen Duong
 
Google Android Security (Basic2Advanced)
Google Android Security (Basic2Advanced)Google Android Security (Basic2Advanced)
Google Android Security (Basic2Advanced)Giap Le Van
 
IT120-1. Giới thiệu về Android SDK
IT120-1. Giới thiệu về Android SDKIT120-1. Giới thiệu về Android SDK
IT120-1. Giới thiệu về Android SDKMultiUni
 
Android chapter03-life-cycle
Android chapter03-life-cycleAndroid chapter03-life-cycle
Android chapter03-life-cycleVu Dang
 
Slide hội thảo Google Android BKHN 26-10
Slide hội thảo Google Android BKHN 26-10Slide hội thảo Google Android BKHN 26-10
Slide hội thảo Google Android BKHN 26-10Giap Le Van
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTÓc Đỏ XuÂn
 
Bài 1: Giới thiệu Android
Bài 1: Giới thiệu AndroidBài 1: Giới thiệu Android
Bài 1: Giới thiệu Androidhoccungdoanhnghiep
 
56123159 android
56123159 android56123159 android
56123159 androidHieu Pham
 
Lập trình Androi
Lập trình AndroiLập trình Androi
Lập trình AndroiDung Duong
 

Destacado (18)

Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development
 
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
 
Lanh dao va TPP
Lanh dao va TPPLanh dao va TPP
Lanh dao va TPP
 
Test Driven development
Test Driven developmentTest Driven development
Test Driven development
 
Android presentation
Android presentationAndroid presentation
Android presentation
 
Android chapter03-life-cycle
Android chapter03-life-cycleAndroid chapter03-life-cycle
Android chapter03-life-cycle
 
Google Android Security (Basic2Advanced)
Google Android Security (Basic2Advanced)Google Android Security (Basic2Advanced)
Google Android Security (Basic2Advanced)
 
Android ios wp7
Android ios wp7Android ios wp7
Android ios wp7
 
IT120-1. Giới thiệu về Android SDK
IT120-1. Giới thiệu về Android SDKIT120-1. Giới thiệu về Android SDK
IT120-1. Giới thiệu về Android SDK
 
Android chapter03-life-cycle
Android chapter03-life-cycleAndroid chapter03-life-cycle
Android chapter03-life-cycle
 
Slide hội thảo Google Android BKHN 26-10
Slide hội thảo Google Android BKHN 26-10Slide hội thảo Google Android BKHN 26-10
Slide hội thảo Google Android BKHN 26-10
 
Android OS
Android OSAndroid OS
Android OS
 
Lap trinh android – kiem tien ngay trong khi hoc
Lap trinh android – kiem tien ngay trong khi hocLap trinh android – kiem tien ngay trong khi hoc
Lap trinh android – kiem tien ngay trong khi hoc
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành android
 
Bài 1: Giới thiệu Android
Bài 1: Giới thiệu AndroidBài 1: Giới thiệu Android
Bài 1: Giới thiệu Android
 
56123159 android
56123159 android56123159 android
56123159 android
 
Lập trình Androi
Lập trình AndroiLập trình Androi
Lập trình Androi
 
Unit testing with JUnit
Unit testing with JUnitUnit testing with JUnit
Unit testing with JUnit
 

Similar a Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit

mp_hag_slide_android_2321.pptx
mp_hag_slide_android_2321.pptxmp_hag_slide_android_2321.pptx
mp_hag_slide_android_2321.pptxKhngNguyn81
 
Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2hoccungdoanhnghiep
 
IT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldIT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldMultiUni
 
Bài tập Lập trinh viên thiết bị di động
Bài tập Lập trinh viên thiết bị di độngBài tập Lập trinh viên thiết bị di động
Bài tập Lập trinh viên thiết bị di độngRobert Commando
 
Lập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng ViệtLập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng Việtlaptrinhandroid
 
7. xu ly bat dong bo
7. xu ly bat dong bo7. xu ly bat dong bo
7. xu ly bat dong boJustin Hoang
 
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong bo
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong boHướng Dẫn Lập Trình Android: 7. Xu ly bat dong bo
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong boWendy587439
 
Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#Văn Dũng
 
Unit Test with test JUNIT
Unit Test with test JUNIT Unit Test with test JUNIT
Unit Test with test JUNIT Cusanlui
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.netvvpcdsptin
 
Bai tap testing junit…..
Bai tap testing junit…..Bai tap testing junit…..
Bai tap testing junit…..Mua Xuong
 
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...CodeGym Đà Nẵng
 
OOP in Java - Ver1.1
OOP in Java -  Ver1.1OOP in Java -  Ver1.1
OOP in Java - Ver1.1vdlinh08
 
Oop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiệnOop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiệnTráng Hà Viết
 
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)Techacademy Software
 

Similar a Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit (20)

mp_hag_slide_android_2321.pptx
mp_hag_slide_android_2321.pptxmp_hag_slide_android_2321.pptx
mp_hag_slide_android_2321.pptx
 
Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2
 
IT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldIT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello World
 
Unit Test
Unit TestUnit Test
Unit Test
 
Bài tập Lập trinh viên thiết bị di động
Bài tập Lập trinh viên thiết bị di độngBài tập Lập trinh viên thiết bị di động
Bài tập Lập trinh viên thiết bị di động
 
Lập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng ViệtLập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng Việt
 
7. xu ly bat dong bo
7. xu ly bat dong bo7. xu ly bat dong bo
7. xu ly bat dong bo
 
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong bo
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong boHướng Dẫn Lập Trình Android: 7. Xu ly bat dong bo
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong bo
 
Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#
 
Unit Test with test JUNIT
Unit Test with test JUNIT Unit Test with test JUNIT
Unit Test with test JUNIT
 
Lab04 mapview
Lab04 mapviewLab04 mapview
Lab04 mapview
 
Introduction Android For Begineer
Introduction Android For BegineerIntroduction Android For Begineer
Introduction Android For Begineer
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.net
 
Bai tap testing junit…..
Bai tap testing junit…..Bai tap testing junit…..
Bai tap testing junit…..
 
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...
 
OOP in Java - Ver1.1
OOP in Java -  Ver1.1OOP in Java -  Ver1.1
OOP in Java - Ver1.1
 
Baocaocuoiki
BaocaocuoikiBaocaocuoiki
Baocaocuoiki
 
Oop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiệnOop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiện
 
Hdsd eclipse
Hdsd eclipseHdsd eclipse
Hdsd eclipse
 
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)
 

Más de Phuoc Nguyen

Hiberbate Framework
Hiberbate FrameworkHiberbate Framework
Hiberbate FrameworkPhuoc Nguyen
 
Introduction to Hibernate Framework
Introduction to Hibernate FrameworkIntroduction to Hibernate Framework
Introduction to Hibernate FrameworkPhuoc Nguyen
 
Webservice performance testing with SoapUI
Webservice performance testing with SoapUIWebservice performance testing with SoapUI
Webservice performance testing with SoapUIPhuoc Nguyen
 
Web application security test tools
Web application security test toolsWeb application security test tools
Web application security test toolsPhuoc Nguyen
 
A successful project sharing
A successful project sharingA successful project sharing
A successful project sharingPhuoc Nguyen
 
Buồn vui nghề IT (Pros & cons of IT Career)
Buồn vui nghề IT (Pros & cons of IT Career)Buồn vui nghề IT (Pros & cons of IT Career)
Buồn vui nghề IT (Pros & cons of IT Career)Phuoc Nguyen
 

Más de Phuoc Nguyen (6)

Hiberbate Framework
Hiberbate FrameworkHiberbate Framework
Hiberbate Framework
 
Introduction to Hibernate Framework
Introduction to Hibernate FrameworkIntroduction to Hibernate Framework
Introduction to Hibernate Framework
 
Webservice performance testing with SoapUI
Webservice performance testing with SoapUIWebservice performance testing with SoapUI
Webservice performance testing with SoapUI
 
Web application security test tools
Web application security test toolsWeb application security test tools
Web application security test tools
 
A successful project sharing
A successful project sharingA successful project sharing
A successful project sharing
 
Buồn vui nghề IT (Pros & cons of IT Career)
Buồn vui nghề IT (Pros & cons of IT Career)Buồn vui nghề IT (Pros & cons of IT Career)
Buồn vui nghề IT (Pros & cons of IT Career)
 

Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit

  • 1. 1 ANDROID NÂNG CAOANDROID NÂNG CAO Bài 6: Multi ThemeMulti Theme adb tooladb tool JUnitJUnit
  • 2. 2 Nội dung bài học ● Multi theme. ● adb tool. ● JUnit.
  • 3. 3 Nội dung bài học ● Multi theme. ● adb tool. ● JUnit.
  • 4. 4 Multi Theme ● Có nhiều cách để hỗ trợ nhiều theme cho chương trình Android. Phần này sẽ giới thiệu một phương pháp đã thực hiện trong một dự án. Các phương pháp khác xem ở phần “Tham khảo”. ● Phương pháp này tổ chức bằng cách sau: ● Hình ảnh (image) của một theme được tổ chức trong một tập tin zip (nén) có cấu trúc như cấu trúc Android (có chứa các thư mục ldpi, mdpi, hdpi). ● Màu sắc được khai báo trong một tập tin dạng CSV hay XML.
  • 5. 5 Multi Theme ● Phương pháp này tổ chức bằng cách sau: ● Tên của tập tin định nghĩa màu sắc và tập tin hình ảnh được qui định ở tập tin cấu hình xml (config.xml). assets config.xml ThemeA.xml ThemeB.xml ThemeA-mdpi.zip ThemeA-ldpi.zip ThemeA-hdpi.zip ThemeA-xdpi.zip
  • 6. 6 Multi Theme ● Phương pháp này tổ chức bằng cách sau: ● File config.xml có thể có nội dung như sau: <themes> <theme> <id>1</id> <name>Blue</name> <description>Mo ta ve theme o day</description> <img>ThemeA.zip</img> <color>ThemeA.xml</color> </theme> <theme> <id>2</id> <name>White</name> <description>Mo ta ve theme o day</description> <img>ThemeB.zip</img> <color>ThemeB.xml</color> </theme> </themes>
  • 7. 7 Multi Theme ● Phương pháp này tổ chức bằng cách sau: ● Sơ đồ class
  • 8. 8 Multi Theme ● Phương pháp này tổ chức bằng cách sau: ● Lược đồ tuần tự
  • 9. 9 Nội dung bài học ● Tham khảo: ● Sanjay Sharma, How to create and set multiple theme of a android application ? ● Matthias, Understanding Android Themes And Styles ● Styles and Themes
  • 10. 10 Nội dung bài học ● Multi theme. ● adb tool. ● JUnit.
  • 11. 11 adb tool ● Giới thiệu về adb tool:  adb tool là một công cụ được cung cấp kèm theo SDK dùng để quản lý trạng thái của các thiết bị cũng như emulator.  adb tool sử dụng giao diện dòng lệnh (command line) để giao tiếp với người dùng.  Chúng ta nên thêm thư mục <SDK>/tools vào đường dẫn PATH để có thể truy xuất adb được dễ dàng hơn.
  • 12. 12 adb tools 1.adb -help → Thông tin trợ giúp (help) của adb được trình bày 2.adb devices → Liệt kê danh sách những emulator hay thiết bị thật đang hoạt động.
  • 13. 13 adb tools 3.adb uninstall <package name> → Gỡ bỏ một ứng dụng có tên package là <package name> khỏi emaulator hoặc thiết bị. 2.adb install <apk path>→ Cài đặt ứng dụng trong tập tin apk tại <apk path>lên emulator hay thiết bị.
  • 14. 14 adb tools 5.adb push <local path> <remote path> → Copy remote path đến local path. 2.adb pull <remote path> <local path>→ Copy local path đến remote path.
  • 15. 15 adb tools 7.adb shell → Kết nối với thiết bị và launch shell. Sau khi dấu nhắc shell xuất hiện, chúng ta có thể sử dụng các lệnh shell như ls, cd, pwd, rm: ● ls: Trình bày thông tin về tập tin hoặc thư mục. ● cd <path>: Chuyển thư mục hiện tại về thư mục path. ● pwd: Trình bày thư mục hiện tại. ● rm <file>: Xoá tập tin file.
  • 16. 16 adb tools 8.Làm việc với CSDL SQLite ● Đang ở dấu nhắc shell – sqlite3 <database path> – Dấu nhắc sqlite xuất hiện, nhập lệnh vào để thực thi. ● .help → Trình bày thông tin trợ giúp ● .dump → Xuất nội dung của csdl ra màn hình ● .schema → Trình bày câu lệnh CREATE ● <Câu lệnh SQL>; → Thực thi câu lệnh SQL ● .exit → Thoát khỏi dấu nhắc sqlite
  • 17. 17 Nội dung bài học ● Multi theme. ● adb tool. ● JUnit.
  • 18. 18 JUnit ● Giới thiệu JUnit ● Android JUnit ● Sample code ● Android test project
  • 19. 19 JUnit ● Giới thiệu JUnit ● Android JUnit ● Sample code ● Android test project
  • 20. 20 JUnit ● Giới thiệu JUnit: ● JUnit là một framework dùng để phát triển unit test cho các chương trình Java. ● JUnit được dùng để phát triển test code cho việc xác nhận lại các hành vi của chương trình cần test là đúng như mong đợi hay không. Quá trình kiểm tra được tiến hành thông qua việc thực thi test code. ● Quá trình test có thể tiến hành nhiều lần một cách tự động do đó đảm bảo chất lượng cho chương trình cần test.
  • 21. 21 JUnit ● Giới thiệu JUnit ● Android JUnit ● Sample code ● Android test project
  • 22. 22 JUnit ● Android JUnit: ● Android JUnit là bản customize từ JUnit 3. ● Android JUnit cho phép phát sinh các thao tác trên giao diện người dùng và các sự kiện trong chu trình sống của Activity (onCreate, onResume, onPause, …). ● JUnit thực thi trên JVM của máy phát triển; Android JUnit Runner tiến hành việc test bằng cách cài đặt và thực thi chương trình test trên Emulator hay thiết bị thật. ● Để hiện thực code test chúng ta cần kế thừa từ lớp junit.framework.TestCase. Tuy nhiên trong Android JUnit đã chuẩn bị sẵn các lớp kế thừa cho các mục đích đặc biệt
  • 23. 23 JUnit ● Android JUnit: ● Các lớp kế thừa từ TestCase do Android JUnit cung cấp TestCase AndroidTestCase InstrumentTestCase ServiceTestCase ProviderTestCase2 ApplicationTestCase ActivityUnitTestCase ActivityInstrumentationTestCase2 Life cycle event test UI operation test
  • 24. 24 JUnit ● Giới thiệu JUnit ● Android JUnit ● Sample code ● Android test project
  • 25. 25 JUnit ● Sample code: ● Junit:Giả sử chúng ta muốn test đoạn code sau đây: public class Adder{ public int add(int addend1, int addend2){ return addend1+addend2; } }
  • 26. 26 JUnit ● Sample code: ● JUnit: ● Test code: import junit.framework.TestCase; public class AdderTest extends TestCase { …  private Adder adder = null; protected void setUp() throws Exception { …  super.setUp(); adder = new Adder(); } protected void tearDown() throws Exception { …  super.tearDown(); } public void testAdd(){ … int actual = adder.add(4, 5); assertEquals(9, actual); … } }
  • 27. 27 JUnit ● Sample code: ● JUnit: 1. Thừa kế từ lớp junit.framework.TestCase. Tên lớp thường đặt bằng cách thêm chữ Test vào sau tên của lớp cần test. 2. Phương thức setUp sẽ được thực thi trước tiên. Phương thức này là nơi để chuẩn bị cho test case như chuẩn bị dữ liệu, khởi tạo biến, … 3. Phương thức tearDown sẽ được thực thi sau khi test case kết thúc. Dọn dẹp như xoá các lưu trữ tạm thời, đóng file đã mở, … 4. Tên của phương thức test có dạng testXXX. Phương thức này không có tham số và là phương thức “public void” 5. assertEquals là phương thức dùng để xác nhận lại hành vi của code cần test. Tham số thứ nhất là kết quả mong đợi; tham số thứ 2 là kết quả thật sự. Nếu như hai giá trị này giống nhau thì test “PASS”, ngược lại thì test “FAILED” (ngoài ra còn có assertTrue, assertFalse, ...)
  • 28. 28 JUnit ● Sample code: ● Android Junit: ● Ví dụ ActivityInstrumentationTestcase2 public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { //public MainActivityTest(){ // super("com.example.junitdemo",MainActivity.class); //} public MainActivityTest(){ super(MainActivity.class); } public void test0InputTextField(){ EditText edtTest = (EditText)getActivity().findViewById(com.example.junitdemo.R.id.edtTestId); edtTest.requestFocus(); sendKeys(KeyEvent.KEYCODE_T, KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_T); assertEquals("test", edtTest.getText().toString()); } } Activity cần test Class của Activity cần test Gửi các key event
  • 29. 29 JUnit ● Sample code: ● Android Junit: ● Ví dụ ActivityInstrumentationTestcase2 public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { public void test1PressOnButton(){ final EditText edtTest = (EditText)getActivity(). findViewById(com.example.junitdemo.R.id.edtTestId); final Button btnGetResult = (Button)getActivity(). findViewById(com.example.junitdemo.R.id.btnGetResultId); TextView lblResultValue = (TextView)getActivity(). findViewById(com.example.junitdemo.R.id.lblResultValue); getActivity().runOnUiThread(new Runnable() { public void run() { edtTest.setText("xyz"); btnGetResult.performClick(); }}); getInstrumentation().waitForIdleSync(); assertEquals("xyz",lblResultValue.getText().toString()); } } Yêu cầu thực thi trên UI thread Click nút “Get Result” Chờ chuyển từ UI thread qua
  • 30. 30 JUnit ● Sample code: ● Android Junit: ● Ví dụ ActivityInstrumentationTestcase2 public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { public void test2GoButton(){ ActivityMonitor monitor = new ActivityMonitor("com.example.junitdemo.MainActivity2", null, false); getInstrumentation().addMonitor(monitor); final Button btnGo = (Button)getActivity().findViewById(com.example.junitdemo.R.id.btnGoId); final String hello = getActivity().getString(com.example.junitdemo.R.string.hello_world); getActivity().runOnUiThread(new Runnable() { public void run() { btnGo.performClick(); }}); Activity m2Activity = getInstrumentation().waitForMonitor(monitor); assertTrue(m2Activity!=null); TextView lblHello =(TextView) m2Activity.findViewById(com.example.junitdemo.R.id.lblHello); assertEquals(hello,lblHello.getText().toString()); m2Activity.finish(); }} Giám sát Activity sẽ chuyển đến Truy xuất Activity vừa chuyển đến
  • 31. 31 JUnit ● Sample code: ● Android Junit: ● Ví dụ ActivityUnitTestCase public class MainActivity2Test extends ActivityUnitTestCase<MainActivity2> { public MainActivity2Test() { super(MainActivity2.class); } public void testSendResumeEvent() throws Exception { Intent intent = new Intent(Intent.ACTION_MAIN); startActivity(intent, null, null); getInstrumentation().callActivityOnResume(getActivity()); } } Activity cần test Run onResume
  • 32. 32 Bài tập 10 ● Viết unit test cho các service demo ở Bài học số 1, content provider ở bài học số 4.
  • 33. 33 JUnit ● Giới thiệu JUnit ● Android JUnit ● Sample code ● Android test project
  • 34. 34 JUnit ● Android test project ● Tạo JUnit project: ● Trong Eclipse, chọn File > New > Other:
  • 35. 35 JUnit ● Android test project ● Tạo JUnit project: ● Chọn “Android Test Project” trong nhóm “Android” sau đó chọn nút “Next”:
  • 36. 36 JUnit ● Android test project ● Tạo JUnit project: ● Nhập tên của project test, chọn nút “Next”:
  • 37. 37 JUnit● Android test project ● Tạo JUnit project: ● Mặc định dự án cần test được chọn sẵn khi “An existing Android project” được chọn, do đó chỉ cần nhất nút “Next”:
  • 38. 38 JUnit● Android test project ● Tạo JUnit project: ● Chọn build target, chọn nút “Finish”:
  • 39. 39 JUnit● Android test project ● Tạo Test case: Để tạo test case: ● File > New > Other ● Trong mục Junit, chọn JUnit Test Case, nhấn nút “Next”
  • 40. 40 JUnit● Android test project ● Tạo Test case: ● Chọn “New JUnit3 test”, nhập “Name”, “Superclass”, nhấn nút “Finish”
  • 41. 41 JUnit● Android test project ● Tạo Test case: ● Chọn “New JUnit3 test”, nhập “Name”, “Superclass”, nhấn nút “Finish”
  • 42. 42 JUnit● Android test project ● Tạo Test case: ● ADT tự động thêm vào Android Manifest các dòng màu đen sau đây: <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.junitdemo" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner" /> </application>
  • 43. 43 JUnit● Android test project ● Thực thi Test case: Ấn chuột phải vào tên test project, Chọn Run As > Android JUnit Test
  • 44. 44 JUnit● Android test project ● Xem kết quả thực thi: Pass Failed
  • 45. Nguyen Huu Phuoc, MEng. ●  Blog:http://folami.nghelong.com ●  Website http://phuocnh.nghelong.com