12/08/2018, 14:18

Các thư viện và công cụ hữu ích khi làm 1 ứng dụng Android

Trong những năm vừa qua, các ứng dụng Android ra đời ngày càng nhiều, kéo theo đó là các thư viện hỗ trợ cho việc phát triển android ngày càng mạnh mẽ, và đầy đủ cho lập trình viên. Việc nắm bắt và sử dụng các thư viện giúp cho việc phát triển ứng dụng android trở nên nhanh chóng hơn, an toàn hơn ...

Trong những năm vừa qua, các ứng dụng Android ra đời ngày càng nhiều, kéo theo đó là các thư viện hỗ trợ cho việc phát triển android ngày càng mạnh mẽ, và đầy đủ cho lập trình viên. Việc nắm bắt và sử dụng các thư viện giúp cho việc phát triển ứng dụng android trở nên nhanh chóng hơn, an toàn hơn và tiết kiệm chi phí cũng như công sức của lập trình viên. Dưới đây là một trong những nguồn công cụ và thư viện giúp bạn phát triển android một cách tốt hơn

I. Công cụ

  • Những IDE cần sử dụng : Android Studio 1.0 và 2.0, đối với bản Android Studio 2.0 vấn đề emulator đã được cải thiện khá nhiều, tốc độ đã tăng lên so với bản 1.0. Tuy nhiên, nếu bạn vẫn gặp vấn đề emulator quá chậm thì nên chú ý tới 1 số emulator tốc độ cao có Intel HAXM, hoặc Genymotion – Công cụ cho phép bạn tạo máy ảo nhanh nhất và tiện lợi nhất. Nếu bạn muốn sử dụng thêm CHPLAY để có thể tải và test ứng dụng thì emulator cũng hỗ trợ cho bạn, nói chung Genymotion là 1 emulator rất mạnh mẽ và đang được ưa chuộng hiện nay.

    Genymotion: Genymotion

Build quá chậm, không thể chịu đựng nổi ?

  • Nếu bạn sử dụng gradle thì ngoài cách thêm thư viện hỗ trợ vào, bạn có thể vào Preference của Gradle và check vào mục Offline work.

  • Công cụ quản lý thư viện UI và các hoạt động trên android :

  • DevAppsDirect Thư viện này giúp bạn kiểm tra được app chạy như thế nào trong thực tế.

Công cụ phân phối bản test

  • Ngoài DeployGate ra, chẳng còn gì để nói.
  • DeployGate DeployGate
  • Hơn nữa lại còn có chức năng group, thật tiện biết bao.

Tham khảo deploygate http://blog-ja.deploygate.com/post/87151299327

II. Thư viện và các tính năng cần làm

  • Làm chức năng hiển thị danh sách

  • ListView : http://developer.android.com/reference/android/widget/ListView.html Gần đây có một thư viện mới được thêm vào là RecyclerView, bạn dùng cái này cũng OK.

  • RecyclerView : https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html

  • Nếu so sánh với TableView trên iOS thì có thể hiểu là class Adapter sẽ có vai trò Delegate – phần xử lí hiển thị của TableView. Trong ListView thì đó sẽ là class ListAdapter.

  • ListAdapter : http://developer.android.com/reference/android/widget/ListAdapter.html

  • Chúng ta sẽ viết xử lí của từng cell vào đó.

  • Ngoài ra, chúng ta sẽ cache từng dòng xử lí View để tối ưu performance. Cũng như trong iOS bạn cũng dùng lại Cell đúng không?

  • StickyListHeaders : Giống Instagram, cung cấp header bám theo scroll của ListView.

  • StickyGridHeaders : Phiên bản GridView của library phía trên.

  • Android StaggeredGrid : Có thể đối phó grid có độ cao khác nhau.

  • AdapterView Animator : Helper Library thực hiện animation khi thêm hàng vào

  • AdapterView. cwac-touchlist : Library thực hiện drag-and-drop cho List. UI Component

Pull to refresh

  • ActionBar PullToRefresh: UI Component xuất ra hiển thị có update tại ActionBar khi người dùng pull.
  • Android PullToRefresh: UI Component update khi pull theo phong cách Twitter. Hiện nay đã không maintain nữa nên khuyến khích sử dụng ActionBar PullToRefresh sẽ tốt hơn.

ActionBar:

  • FadingActionBar: Library áp dụng effect fade-out tại ActionBar.
  • GlassActionBar: Library áp dụng effect như cửa sổ trong suốt tại ActionBar.

WebView:

  • Chromium WebView: Backport Library Webview của Chromium engine được đưa vào từ version KitKat. Sử dụng library này có thể giúp giải quyết được vấn đề tương thích OS version hay device khi implement Webkit.

TextFont:

  • emojicon: Library giúp sử dụng emoji trên TextView.
  • IonIconView: Library giúp hiển thị icon được cung cấp bởi ionicons.com được trên View.
  • Android Iconify: Library giúp sử dụng được các loại font của FontAwesome trong app.
  • Calligraphy: Library giúp làm dễ dàng custom font.

Calendar:

  • ExtendedCalendarView: Library cung cấp calendar view có thể hiển thị event, tạo thành set với DB lưu trữ content của calendar.
  • GoogleCalendarView: Backport từ calendar app của Google.

ImageView

  • CustomShape ImageView: ImageView có thể cắt chỉnh ảnh rồi tạo nhiều hình đa dạng.
  • Rounded ImageView: Library tạo ImageView có góc tròn.
  • PhotoView ImageView có chức năng phóng to thu nhỏ ảnh.
  • ImageViewZoom: ImageView có chức năng phóng to thu nhỏ ảnh.

Dưới đây là một số thư viện cực kì hữu ích mà mọi lập trình viên Android nên biết.

Thư viện làm việc với internet, mạng (networking)

1. Gson

  • Gson là thư viện Android dùng để tạo ra Json từ Java Object hoặc gắn giá trị cho Java Object từ Json. Thư viện này thường được sử dụng khi tương tác với API. Chúng ta thường sử dụng Json bởi vì nó nhẹ và đơn giản hơn so với XML.
// Serialize
String userJSON = new Gson().toJson(user);
// Deserialize
User user = new Gson().fromJson(userJSON, User.class);

Bạn có thể tìm hiểu kỹ hơn về gson ở bài viết này :

https://viblo.asia/nguyen.van.tung/posts/7rVRqwNJG4bP

2. Retrofit

  • Trên trang chủ của Retrofit có câu: “Retrofit turns your REST API into a Java interface” nói lên đầy đủ chức năng của nó. Đây là một giải pháp tuyệt vời để tổ chức các lời gọi API trong một dự án. Các lời gọi request được thêm đơn giản và tiện dụng. Ta sử dụng Callback để lấy kết quả các request gửi lên.

  • Đa số ứng dụng Android hiện nay đều đi kèm với một backend server nên một thư viện giúp hỗ trợ giao tiếp với server sẽ rất hữu ích. Retrofit là một trong những thư viện nổi tiếng trong việc hỗ trợ Netwoking.

  • Một số lý do mà mình dùng Retrofit cho Networking:

Performance tốt.

Dễ sử dụng.

  • Dùng chung được với RxAndroid.Dưới đây là phần so sánh performance với Volley và AsyncTask:

alt

Nguồn http://stackoverflow.com/questions/16902716/comparison-of-android-networking-libraries-okhttp-retrofit-volley

Cú pháp thông dụng khi sử dụng thư viện Retrofit:

Định nghĩa API

public interface GitHubService {
  @GET("/users/{user}/repos")
  List<Repo> listRepos(@path("user") String user);
}

Config cho Endpoint

RestAdapter restAdapter = new RestAdapter.Builder()
  .setEndpoind("https://api.github.com/")
  .build();

GitHubService service = restAdapter.create(GitHubService.class);

Gọi API

List<Repo> repos = service.listRepos("octocat");

Database

  • GreenDAO: Sử dụng class định nghĩa riêng biệt schema, entity rồi mapping.
  • Active Android: Tại khai báo entity class, thêm annotation rồi mapping. ActiveAndroid là một ORM dành cho Android. Nó là một trừu tượng của SQLite cho phép bạn giao tiếp với database trong một device khi không phải viết câu lệnh SQL.
  • EvenBus là thư viện làm đơn giản giao tiếp giữa các phần trong ứng dụng của bạn. Ví dụ, để gửi dữ liệu từ Activity tới Service đang chạy, hoặc gửi dữ liệu giữa các Fragment. Đây là ví dụ mình sử dụng nếu lỗi kết nối Internet, hiển thị cách thông báo một Activity.
public class NetworkStateReceiver extends BroadcastReceiver {

    // post event if there is no Internet connection
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        if(intent.getExtras()!=null) {
            NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
            if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
                // there is Internet connection
            } else if(intent
                .getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
                // no Internet connection, send network state changed
                EventBus.getDefault().post(new NetworkStateChanged(false));
            }
}

// event
public class NetworkStateChanged {

    private mIsInternetConnected;

    public NetworkStateChanged(boolean isInternetConnected) {
        this.mIsInternetConnected = isInternetConnected;
    }

    public boolean isInternetConnected() {
        return this.mIsInternetConnected;
    }
}

public class HomeActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EventBus.getDefault().register(this); // register EventBus
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this); // unregister EventBus
    }

    // method that will be called when someone posts an event NetworkStateChanged
    public void onEventMainThread(NetworkStateChanged event) {
        if (!event.isInternetConnected()) {
            Toast.makeText(this, "No Internet connection!", Toast.LENGTH_SHORT).show();
        }
    }

}

Android Asynchronous Http Client

  • Là một thư viện Http Client xây dựng trên cơ chế callback bất đồng bộ dựa vào Apache’s Http Libraries.Mọi request được thực hiện bên ngoài thread UI chính trong ứng dụng của bạn, nhưng bất kì một callback logic nào sẽ được lại trên cùng một thread như callback sử dụng Handler của Android.

  • Các tính năng chính:

  • Tạo các request Http bất đồng bộ, xử lý các kết quả trả về trong các callback ẩn danh.

  • Thực hiện HTTP requests bên ngoài UI thread…

Tối ưu hóa code: DI container

  • Dagger: DI container dùng cho Java hay Android của công ty square. Sử dụng annotation javax.inject.Inject. Tạo code khi compile.
  • Proton: DI container dùng cho Android. Sử dụng annotation javax.inject.Inject. Đưa instance vào tại thời điểm execute.
  • ButterKnife: Chuyên hóa cho injection của View.
  • RoboGuice: Wrapper dùng cho Android được Google cung cấp. Bên cạnh sử dụng annotation javax.inject.Inject, cung cấp độc lập annotation dành cho injection.

Một số link tham khảo về DI:

Dependency_injection

articles/injection

dependency-injection-android-dagger-part1

Những kiến thức cơ bản trên có thể làm cho các bạn phát triển được một số app , cũng như trong công việc của các bạn. Minh xin cảm ơn.

0