Bài 2: Cách đóng gói để xuất bản ứng dụng Đồng Hồ Thông Minh

bài 1 Tui đã hướng dẫn một cách chi tiết và đẩy đủ cách thức cấu hình, tạo project, sử dụng máy ảo, kết nối debug ứng dụng trên máy thật thông qua BlueTooth…, trong bài này Tui sẽ hướng dẫn các bạn cách đóng gói để xuất bản ứng dụng Đồng Hồ Thông Minh cho người sử dụng.

Các bạn chú ý là đối với các ứng dụng Đồng Hồ Thông Minh thì người sử dụng không thể truy suất và cài đặt trực tiếp ứng dụng vào đồng hồ được, do đó chúng ta phải đóng gói ứng dụng Đồng Hồ Thông Minh vào bên trong ứng dụng Mobile (Hay nói cách khác là hiện nay Google chưa cung cấp – hay không thể cung cấp Google Play để cho chúng ta có thể cài đặt trực tiếp ứng dụng từ Google Play vào Đồng Hồ Thông Minh bởi do đặc thù của nó).

Để đóng gói đúng ứng dụng thì các bạn phải làm theo 5 bước sau(làm khác cũng được…nhưng mà không chạy nha):

Bước 0:

  • Khi tạo một ứng dụng Wearable thì phải chọn đồng thời cả Mobile&Tablet

Bước 1:

  • Tất cả các permission mà khai báo trong Manifest cho Wearable thì phải đưa y xì qua Manifest của Mobile/Tablet (tức là chỉ việc dùng công nghệ cao là Ctrl+ c==>Ctrl+V)

Bước 2:

  • Phải đảm bảo rằng cả Wearable App và Mobile App phải có cùng package và cùng version (Thông thường khi bạn tạo ở bước 0 thì nó đã giống tên y xì vậy rồi, tuy nhiên một số bạn Sinh Viên hay tỏ vẻ nguy hiểm sửa lung tung trong khi mới học dẫn tới không biết vì sao nó lỗi, do đó mới học thì cứ để mặc định nha… không ai trả lương cho độ nguy hiểm của chúng ta đâu)

Bước 3:

  • Vào file build.gradle(mobile) bổ sung thêm dòng lệnh  wearApp project(‘:wear‘) với wear là tên ứng dụng đồng hồ thông minh, nó tên gì thì đặt tên đó. Thường mặc định tên là wear luôn nên ta không cần đổi gì (Tức là khi ở bước 0 hệ thống đã tự làm giùm ta bước 3 rồi).
  • Ví dụ đại khái như sau:

[code language=”javascript”]

dependencies {
compile ‘com.google.android.gms:play-services:5.0.+@aar’
compile ‘com.android.support:support-v4:20.0.+”
wearApp project(‘:wearable’)
}

[/code]

Bước 4:

Tiến hành build Signed APK.

Bạn vào Menu Build / chọn Generate Signed APK, Android Studio sẽ tiến hành build bản Release cho Mobile (APK này đã đóng gói luôn cái ứng dụng đồng hồ thông minh do bước 3 cấu hình rồi). Nếu như 1 ứng dụng đã được Generate với Signed APK thì khi bạn cài phần mềm này vào điện thoại thì nó sẽ tự động cài đặt luôn ứng dụng Đồng hồ thông minh vào đồng hồ của bạn khi 2 thiết bị này đang kết nối (là đang kết nối bằng blue tooth như ở bài 1 đã hướng dẫn sử dụng phần mềm Android Wear để cấu hình kết nối giữa điện thoại và đồng hồ thông minh).

Khi build ra được Signed APK thì có 2 kịch bản sử dụng:

1- Bạn publish APK này lên Google Play nếu đã đăng ký mua của Google (25USD + 1 USD giao dịch nếu có), lúc này ai sử dụng thì cứ việc vào Google play cài đặt ==> tự động nó cài wear vào đồng hồ nếu mobile và đồng hồ đang kết nối

2- Bạn không có tiền mua Google Play, thì chép Signed APK nó tạo vào điện thoại rồi tự cài==>tự động nó cài wear vào đồng hồ nếu mobile và đồng hồ đang kết nối (bạn có thể gửi Signed APK này cho khách hàng rồi hướng dẫn họ cài đặt là xong)

Tui đã thử và thành công nên nếu các bạn làm không được tức là làm chưa đúng nha.

Tuy nhiên nhiều năm đi dạy Tui thường biết Sinh Viên cương quyết không hiểu mặc dù Tui có nói kỹ tới mấy… Cho nên Tui hay nói đùa với Sinh Viên “Em không làm thì Thầy tưởng em không biết… khi em làm rồi thì … không còn nghi ngờ gì nữa”. Vì vậy Tui sẽ minh họa lại 5 bước bên trên bằng 1 Project cụ thể như sau: Tải 1 hình trên mạng vào Đồng Hồ Thông Minh.

Bước 0: Tạo ứng dụng Đồng hồ thông minh tên là “TaiHinhVeDongHo” (hiện nay Đồng hồ thông minh chưa cho phép lấy hình ảnh trực tiếp từ internet, nhưng Tui đặt tên này để xem lỡ Tui tìm ra cách thì tính sau), tạm thời Project này đơn giản chỉ là kiểm tra Đồng hồ thông minh có đang kết nối internet không mà thôi:

h1Bấm next :

h2Ở màn hình này bạn tick vào cả Phone/Tablet và Wear rồi bấm next… để tạo được cấu trúc ứng dụng như hình dưới đây:

h3Bạn nhìn thấy có 2 Module ứng dụng đồng thời là: mobilewear

Bước 1: Vì bài này Tui muốn kiểm tra xem đồng hồ có kết nối internet hay không và muốn tải 1 hình từ trên mạng về hiển thị lên đồng hồ vì vậy Tui phải cấp quyền internet, access wifi… trong Manifest của wear ==> sao chép các quyền này vào Manifest của mobile:

h17Bước 2: Đảm bảo wear và mobile có y xì package name(như đã nói mặc định là giống), tuy nhiên bạn có thể kiểm tra:

h5Bước 3: Thêm lệnh wearApp project(‘:wear‘) vào build.gradle. Thường là mặc định hệ thống làm giùm ta, xem hình:

h6Trước khi qua bước 4 tạo Signed APK thì bây giờ Tui coding để Kiểm tra xem Đồng hồ thông minh có đang kết nối internet không thôi nha:

  • Trong layout của wear có rect_activity_main.xmlround_activity_main.xml, sửa lại như sau cho cả 2 xml này giống y xì như đây:

[code language=”xml”]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.tranduythanh.taihinhvedongho.MainActivity"
tools:deviceIds="wear_square">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kiểm tra kết nối"
android:id="@+id/btnKiemTra"
android:layout_gravity="center_horizontal" />

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/txtKetNoi" />
</LinearLayout>
[/code]

  • Tiếp theo coding MainActivity của wear:

[code language=”java”]
package com.tranduythanh.taihinhvedongho;

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.support.wearable.view.WatchViewStub;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

Button btnKiemTra;
TextView txtKetNoi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
@Override
public void onLayoutInflated(WatchViewStub stub) {
addControls(stub);
addEvents();
}
});
}

private void addEvents() {
btnKiemTra.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
xuLyKiemTraKetNoi();
}
});
}

private void xuLyKiemTraKetNoi() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

if(cm.getActiveNetworkInfo() != null)
{
txtKetNoi.setText("Có internet");
}
else
{
txtKetNoi.setText("Không Có internet");
}
}

private void addControls(WatchViewStub stub) {
btnKiemTra= (Button) stub.findViewById(R.id.btnKiemTra);
txtKetNoi= (TextView) stub.findViewById(R.id.txtKetNoi);
}
}
[/code]

Bước 4: Tạo Signed APK, bước này là khó nhất.

Vào menu Build/ chọn Generate Signed APK…:

h7Sau khi chọn Generate Signed APK… bạn chọn mobile trong màn hình dưới đây:

h8Bấm Next để tiếp tục:

h9Mục Key store path: Là nơi lưu trữ key, bạn nhấn vào nút “Create New…”:

h10Sau khi đặt tên file rồi nhấn OK :

h12Ở màn hình trên bạn tiến hành đặt mật khẩu cho Key Store, nhập thông tin cho Certificate. Bạn chú ý là thông tin này vô cùng quan trọng , nếu như bạn làm mất nó thì về sau bạn muốn cập nhật phiên bản sẽ không bao giờ được, đồng nghĩa với việc phải viết lại ứng dụng (đặt package khác vì google chỉ cho tồn tại 1 package không trùng nhau). Do đó lưu ở đâu thì phải nhớ, tốt nhất là backup ở đâu đó trên mạng.

Sau khi bạn nhấn OK ở màn hình trên thì thông tin sẽ được hiển thị lại màn hình đâu như sau:

h13Bạn tiếp tục bấm Next:

h14Chọn Release rồi bấm Finish, sau đó ngồi chờ hơi lâu nha để đợi Android studio tạo ra file xuất bản phần mềm, khi build xong thì nó hiển thị “Show in explorer”, bạn bấm vào để lấy file xuất bản:h15Bạn xem thư mục chứ file xuất bản:

h16Sau khi cài xong trên điện thoại, bạn chờ nó tự động cài wear vào đồng hồ thông minh (chú ý là 2 thiết bị này phải đang kết nối với nhau nha – thường bằng blue tooth mà Tui đã hướng dẫn ở bài 1). Tui đã test thành công.

Bạn có thể tải source code mẫu tại đây: http://www.mediafire.com/download/j869oscr5p10q3y/bai2_TaiHinhVeDongHo.rar

Các bạn cố gắng, chúc các bạn thành công

Leave a Reply