Những thứ cần thiết khi phát triển một ứng dụng Android mà bạn nên biết

1. Chúng ta nên dùng IDE nào?

Nếu bạn mới bắt đầu và bạn không cần viết code native thì hãy dùng Android Studio. Gần đây bản 2.2 đã được release.

Android Studio

http://developer.android.com/sdk/index.html

2. Emulator của tôi quá chậm!

Đây là một nhận xét chung của rất nhiều người và cũng là một điểm khác so với iOS – emulator của android rất chậm. Bạn hãy sử dụng emulator tốc độ cao có Intel HAXM, hoặc Genymotion – công cụ cho phép bạn tạo máy ảo.

Genymotion

http://www.genymotion.com/

3. Quản lí thư viện bằng cách nào?

Một công cụ tương tự với Cocoapods trên iOS là Gradle dùng cho Android Studio. Một ví dụ điển hình là khi ta import một thư viện networking.

4. Thư viện networking nào nên sử dụng?

Retrofit

http://square.github.io/retrofit/

Nếu muốn sử dụng nó trên Android Studio, bạn viết như sau :

compile 'com.squareup.retrofit2:retrofit:2.1.0'

Hoặc có thể dùng Volley

https://developer.android.com/training/volley/index.html

5. Thư viện giúp cho việc load ảnh trở thành một điều đương nhiên!

Mình luôn ưu tiên sủ dụng thư viện Glide.
Xem tại đây.

Hoặc bạn có thể sử dụng thư viên Picasso

http://square.github.io/picasso/

6. Nếu tôi muốn sử dụng thư viện mới nhất trên phiên bản app cũ thì sao?

Trên Android thì có một thứ gọi là thư viện support dành cho các version cũ, sử dụng nó sẽ khiến cho những gì ta có thể dùng trên version cũ tăng lên.

http://developer.android.com/tools/support-library/index.html

Tất nhiên, không phải thứ gì ta cũng có thể dùng được. Điều này bạn cần chú ý

7. Build chậm không thể chịu được!

Là vậy đó. Đây cũng là nhận xét chung của nhiều ngườ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.


8. Làm những gì liên quan đến navigation như thế nào?

Trên Android, những gì liên quan đến navigation ta sử dụng ActionBar. Trong các SDK gần đây có thêm Toolbar, giúp ta thay đổi design vân vân một cách uyển chuyển hơn.

http://developer.android.com/reference/android/support/v7/widget/Toolbar.html

9. Làm cái menu hiển thị từ bên hông sang như thế nào?

Bạn đang nói đến drawer menu phải không? Cái này có thư viện support của android, ta nên xài luôn.

android.support.v4.widget.DrawerLayout

http://developer.android.com/training/implementing-navigation/nav-drawer.html

10. Tôi muốn tạo view sao cho vuốt sang ngang sẽ chuyển sang màn hình khác!

Trên iOS cái này gọi là UIPageViewController. Trên Android ta dùng ViewPager để làm cái này.

Đây cũng là thư viện support của Android.

http://developer.android.com/reference/android/support/v4/view/ViewPager.html

11. Tôi muốn làm app có chức năng hiển thị danh sách!

Bạn hãy dùng ListView.

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.

Ưu tiên sử RecyclerView (Nguyên nhân)

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

12. Tôi muốn tạo app có filter ảnh!

Hãy sử dụng phiên bản tái tạo của GPUImage – một thư viện mà người ta phải ngả mũ trên iOS.

GPUImage for Android

https://github.com/CyberAgent/android-gpuimage

Còn nếu muốn dùng SDK chuẩn bạn có thể tham khảo Media Effects.

13. Media Effects

http://developer.android.com/reference/android/media/effect/package-summary.html

15. Thế còn video? Tôi muốn làm app chỉnh sửa video nữa!

Trên iOS, chỉ cần sử dụng AVFoundation là ta có thể làm ra một app tàm tạm, còn trên Android thì sao? Media Effects có vẻ là một lựa chọn tốt. Ngoài ra nếu bạn muốn ghép video có thể sử dụng

mp4parser

https://code.google.com/p/mp4parser/

Các SDK xuất hiện gần đây có vẻ đang mở rộng các tính năng liên quan đến MediaCodec nên tôi cảm giác thời kì của video bắt đầu từ đây. Hãy cùng chờ đợi tương lai. Phần này tôi rất thích nên dự định sẽ tìm hiểu riêng.

16. Tôi muốn làm app chạy nhạc!

Bằng cách get ContentResolver và xuất ra SQL, bạn có thể lấy được thông tin bài hát trong máy bao gồm cả tên album, tên ca sĩ, lời bài hát. Hãy tham khảo MediaStore.

MediaStore

http://developer.android.com/reference/android/provider/MediaStore.Audio.html

List albums = new ArrayList();
ContentResolver resolver = activity.getContentResolver();
            Cursor cursor = resolver.query(
                            MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
                            Album.FILLED_PROJECTION, 
                            null, 
                            null,
                            "ALBUM  ASC"
                            );

            while( cursor.moveToNext() ){
                albums.add(new Album(cursor));
            }

17. Tôi muốn làm app đồng hồ!

Bạn hãy sử dụng Android Wear.

Tương ứng với Android Wear, trên iOS thì WatchKit đã được công khai nhưng chưa làm được gì to tát. Android Wear cũng có những phần cần phải cải thiện nhưng về cơ bản bạn có thể làm được những việc tương tự khi sử dụng SDK của Android.

Hiện nay những sản phẩm wearable của Android cũng đã được bán rộng rãi. Tại thời điểm này, tôi thấy làm việc với Android Wear đem lại nhiều niềm vui hơn.

http://www.android.com/wear/

18. Về 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.
  • Text・Font:
    • 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.

19. 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.
  • RXjava :RxJava là một mã nguồn mở implement từ ReactiveX trên ngôn ngữ Java. Mà ReactiveX là sự kết hợp của những ý tưởng tốt nhất từ Observer pattern, Iterator pattern và Functional programming. ReactiveX cung cấp các API để giải quyết vấn đề đồng bộ dữ liệu trên các luồng dữ liệu khác nhau.

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. Một đối tượng kế thừa ActiveAndroid Model có thể lưu database như sau:
user.save();
user.save();
Thay thế cho câu lệnh phức tạp SQLite như sau


INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES ('Batman','Bruce W','Palisades 21','Gotham','40000','USA');
INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES ('Batman','Bruce W','Palisades 21','Gotham','40000','USA');
Ví dụ để lấy tất cả users


List<User> users = new Select().from(User.class).execute();
List<User> users = new Select().from(User.class).execute();
Thay thế cho câu lện SQlite


SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;
SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;
ActiveAndroid là một cách hay để xoá đi nhiều đoạn code khi làm việc với databases. Một số thư viện tương tự như GreenDAO và ORMLite .

 

GSON : là một java library hỗ trợ việc convert Java Objects sang định dạng JSONtương ứng, và ngược lại, nó cũng có thể sử dụng để convert từ JSON sang Java Objects. Có một vài thư viên Java cũng có khả năng làm việc này, những Google Gson hỗ trợ tối ưu hơn cả và đặc biệt nó được update liên tục.Nó có thể làm việc với các Java Object tùy ý ngay cả với việc các object trong hệ thống cũ không có source code.Mục đích của Google Gson

      • Cung cấp kỹ thuật xử lý đơn giản để convert từ Java Object sang JSON và ngược lại.
      • Cho phép các unmodifiable objects converted từ Java sang JSON và ngược lại.
      • Hỗ trợ mở rộng Java Generics.
      • Cho phép custom format của object.
      • Hỗ trợ custom các objects phức tạp.
      • Và rất nhiều nữa

Ngoài ra, GSON cũng là nhân của Retrofit đã nói ở trên.

Những so sánh khác so với iOS


Trong khi làm app, có nhiều hướng tư duy từ phía iOS ta có thể dùng lại được trên Android. Tuy nhiên, những vấn đề sau sẽ khiến ta phải khổ :

  • Vấn đề số lượng method nhiều (bao gồm các thư viện ngoài) và vấn đề size màn hình (trên 2.3): giải quyết những vấn đề xong thì app lại không install được, không chạy được. Nếu dùng multidex để giải quyết thì build rất chậm, thậm chí tùy vào cách code mà app có thể không hoạt động, lúc đó lại đành phải cố sử dụng proguard.
  • Mà bản thân việc dùng proguard rất là khổ.
  • Có giải pháp GC, nhưng lằng nhằng hơn ARC nhiều.
  • Các vấn đề đến từ thao tác của chính device.
  • Build rõ là chậm.
  • Bạn designer hay giải thích theo chuẩn iOS, nghe rất mệt.

Chẳng hạn như vậy. Còn những điểm tốt hơn so với iOS là :

  • Quản lí resource tốt, rất dễ thao tác.
  • Làm team nhiều người trên Android dễ hơn (iOS bị conflict project file, lúc nào cũng cần chú ý không để chồng chéo storyboard, mệt mà lại ít thành quả…).
  • Android làm layout cho nhiều màn hình dễ hơn. Maintain cũng nhẹ nhàng hơn do việc quản lí resource tốt (có lẽ khỏi phải so sánh với AutoLayout trên iOS – chỉ được cái tên rõ là hay trong khi chẳng tự động được một cái gì, tính maintain thì xấp xỉ bằng 0…).
  • Có nhiều chủng loại device nên nếu bạn là người thích mân mê các kiểu device thì sẽ thấy rất vui.

Những bạn mới bắt đầu lập trình thì tất nhiên rồi, những bạn đang làm iOS cũng hãy thử làm Android xem? Chắc chắn các bạn sẽ phát hiện ra rất nhiều niềm vui và cả những bí ẩn thú vị nữa đấy.

Bài viết được tham khảo và cập nhật tại:
https://viblo.asia/minhp/posts/3KbvZq1lGmWB
https://vietnamlab.vn/

Nguyễn Linh

Chia sẻ để cùng tiến bộ...