Những công cụ cần thiết khi làm ứng dụng Android, những class, những thư viện dành cho từng tính năng và so sánh đồng thời với iOS
Nguồn : http://qiita.com/appwatcher/items/7d270de99d63bb9f2be4 Tác giả : http://qiita.com/mixiappwchr Người dịch : Phan Hoàng Minh Gần đây tôi chuyên tâm vào việc làm app Android nên đã thử tổng hợp các công cụ lại một cách đơn giản như dưới đây. Phân phối app Chúng ta nên ...
Nguồn : http://qiita.com/appwatcher/items/7d270de99d63bb9f2be4
Tác giả : http://qiita.com/mixiappwchr
Người dịch : Phan Hoàng Minh
Gần đây tôi chuyên tâm vào việc làm app Android nên đã thử tổng hợp các công cụ lại một cách đơn giản như dưới đây.
Phân phối app
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 1.0 đã được release.
Android Studiohttp://developer.android.com/sdk/index.html
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.
Genymotionhttp://www.genymotion.com/
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.
Thư viện networking nào nên sử dụng?
Trên iOS, nói đến networking tức là ta đang nói đến AFNetworking. Nếu ta muốn import trên iOS thì viết như sau vào podsfile :
pod 'AFNetworking', '~> 2.4'
Trên Android có vài thư viện hay, nhưng tôi nghĩ chúng ta nên sử dụng Retrofit.
Retrofithttp://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.retrofit:retrofit:1.8.0'
Thư viện giúp cho việc load ảnh trở thành một điều đương nhiên!
Trên iOS ta dùng SDWebImage còn trên Android thì Picasso. Picasso có interface rất là tốt.
Picassohttp://square.github.io/picasso/
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 iOS, những tính năng mới của SDK thường là không dùng được.
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ú ý.
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.
Có công cụ nào quản lí thư viện UI và các hoạt động như cocoacontrols trên iOS không?
Có chứ, bạn hãy cài ứng dụng này vào.
DevAppsDirecthttps://play.google.com/store/apps/details?id=com.inappsquared.devappsdirect&hl=ja
Thư viện này giúp bạn kiểm tra được app chạy như thế nào trong thực tế.
Chính vì vậy, bạn đừng cài một mình mà hãy cài cho người anh em designer trong team của bạn nữa nhé.
Chỉ cần cài ứng dụng này là kiểu gì cũng code được thôi – nó khiến mọi người phải nghĩ như vậy.
Phân phối bản test như thế nào?
Ngoài DeployGate ra, chẳng còn gì để nói.
DeployGatehttps://deploygate.com/dashboard?locale=ja
Hơn nữa lại còn có chức năng group, thật tiện biết bao.
http://blog-ja.deploygate.com/post/87151299327
Về việc code
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
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.DrawerLayouthttp://developer.android.com/training/implementing-navigation/nav-drawer.html
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
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.
ListViewhttp://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.
RecyclerViewhttps://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. TrongListView thì đó sẽ là class ListAdapter.
ListAdapterhttp://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?
Tôi muốn tạo ra app có hiển thị các ô grid!
Trên iOS ta dùng CollectionView, còn trên Android thì nên dùng
GridViewhttp://developer.android.com/guide/topics/ui/layout/gridview.html
Tuy nhiên! Bạn phải chú ý rằng thư viện này sẽ không cho bạn gắn header và footer.
Vì thế, chúng ta sẽ cần sử dụng 1 thư viện khác. Đối với tôi, tôi hay phó mặc cho thư viện bên dưới.
Tôi muốn các ô grid phải hiển thị giống kiểu Pinterest cơ!
Được, và có rất nhiều thư viện để bạn làm vậy. Tuy nhiên, trong số đó tôi thấy thư viện sau đây là ổn định nhất.
AndroidStaggeredGridhttps://github.com/etsy/AndroidStaggeredGrid
Không những hiển thị được GridView mà bạn có thể thêm cả header và footer nữa.
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 Androidhttps://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.
Media Effectshttp://developer.android.com/reference/android/media/effect/package-summary.html
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
mp4parserhttps://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.
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.
MediaStorehttp://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)); }
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/
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.