RSS

Tag Archives: android sdk

Seni membaca error log di logcat (DDMS) Android

Ketika saya coba bekerjasama dengan 1 developer Android yang sudah punya produk di PlayStore kemudian komunikasi kami menjadi sedikit missmatch karena ternyata saya baru ngeh kalau developer yang mengajak kerjasama meningkatkan fitur produknya, belum paham membaca error log dan log cat. Dan sering saya dapati komunikasi kami via e-mail dan google docs menjadi tidak harmonis (halah) ketika mengisi waktu kerja proyekan apps android di luar kerjaan kantor, di PKH, Jakarta.

Dan begitu juga pas ngisi workshop, peserta masih bingung membaca error log yang tampil di DDMS yang ter-attached di Eclipse IDE.
Alhasil tempo hari menyisihkan waktu satu jam-an tentang seni membaca error ataupun force close aplikasi dan menemukan bugs dengan cara debugging, error handling ataupun dengan membaca error log.

Mengenai seni trace dan membaca log, perhatikanlah artikel singkat di stackoverflow ini

Mengenai seni dalam mengetahui force close secara langsung dari aplikasi, dapat mencoba cara ini.

Mengenai seni error handling dalam java, bisa baca artikel ini dan khusus Android ada di sini.

Kalau mengecek error di tool DDMS bawaan android SDK/Tools, perlu diketahui, ketika aplikasi berjalan, log yang nampil itu bukan hanya error, jangan dikira kalau ada pesan di log berarti error.
teks warna hijau : seputar tips dan informasi,
teks warna biru : bagian yang diselect, biasanya diisi to-do-list oleh developer,
teks warna orange : ini sebagai peringatan, bisa jadi potensi masalah (namun saat ini belum jadi masalah)
Dan..
teks merah : ini error, dan harus dianalisa masalahnya biar tidak menimbulkan gangguan di aplikasi.

Dan ketika nampak teks warna merah di logcat, sebagai contoh :
02-12 17:50:21.541: E/com.wd.radiodakwahislam.controller.StreamingMediaPlayer(10294): Error updating to newly loaded content.
02-12 17:50:21.541: E/com.wd.radiodakwahislam.controller.StreamingMediaPlayer(10294): java.lang.NullPointerException
02-12 17:50:21.541: E/com.wd.radiodakwahislam.controller.StreamingMediaPlayer(10294): at com.wd.radiodakwahislam.controller.StreamingMediaPlayer.transferBufferToMediaPlayer(StreamingMediaPlayer.java:285)

Di atas, terlihat bahwa ada tulisan : “…(StreamingMediaPlayer.java:285)
artinya, error tersebut terjadi di baris 285 pada class StreamingMediaPlayer.java. So, fokuslah ke class tersebut, dan lihat pada baris 285 terdapat kekeliruan atau tidak (lihat dari editor Eclipse-nya).

Nah, kalau bingung, di awal teks merah tersebut di logcat, copy teks-nya (dengan pilih teks error-nya di logcat, terus tekan ctrl+c), dan buang tanggal dan nama class-nya sehingga yang ter-copy hanya teks error saja : error updating to newly loaded content.
Copy dan paste ke google search di internet browser di PC (bila perlu ditambahkan keyword : Android di akhirnya), terus enter dan lihat di result google, biasanya result 3 besar berisi link stackoverflow, klik salah satunya dan cari apa penyebabnya dari jawaban-jawaban yang ada di stackoverflow.

Pas awal kerja di PKH secara remote, saya langsung ngomong ke team via basecamp, agar coba menerapkan sebuah rules dalam melaporkan bugs dan error dari aplikasi yang dikembangkan kepada teman-teman team yang developer web dan UI designer.

Rules itu berisi :

  • Ketika melaporkan bugs, harap sertakan device apa yang dipakai dan versi OS android-nya.
  • Bila terdapat bugs/masalah UI tolong sertakan screenshotnya, bila masalah fungsional tolong sertakan logcatnya (dengan mengunduh tools berikut) /** saya sertakan link download zipnya yang berisi tool DDMS dan Android SDK beserta doc singkat cara pakainya **/
  • Sebaikny pakai filtering ketika menjalankan logcat di DDMS, jangan semua proses dicantumkan di logcat, demi memudahkan menelusuri masalahnya
  • DDMS bisa filter logcat aplikasi saja, jadi tidak semua log dari proses di device tercatat, caranya dengan masukan nama project di bagian kolom filter. Nama project sesuai yang saya cantumkan ketika saya upload progress (nama project dapat dilihat di file manifest.xml)
  • Kenapa penting bagi developer untuk tahu itu? Supaya gampang mengetahui errornya
    Jangan dikira ketika aplikasi jalan di device developer maka digeneralisir kalau aplikasi tersebut jalan di device SEMUA users. Bahkan yang terjadi di kantor tempat saya kerja, error itu justru sangat kemungkinan besar terjadi mengingat para teman-teman memakai device Android berbagai merek dan ukuran layar dan versi OS.
    Makanya ada conditional yang diterapkan dicode : IF(SDK version < 10) pake codingan A, IF(SDK version > 14) pake codingan B, dll.
  • Oleh karena itu, penting adanya public testing sebelum melepas ke GooglePlay.
    Dan media yang bagus untuk melakukan public testing gratis ya jejaring sosial facebook dll.
  • Beda ukuran layar beda lagi UInya, makanya ketika saya bekerjasama dengan designer UI ada beberapa rules yang harus dipatuhi bersama agar bisa diterapkan di layout dan mencakup ukuran layar low, mid, high, (ponsel dr ukuran kecil sampe besar) extra (tablet 7″ atau HD) dan double extra (tablet 10″ atau yg full HD). Untuk guidelines buat para designer UI Android, bisa patuhi prinsip-prinsip designnya di sini dan lengkapnya ada di sini untuk setiap bagian design-nya.

Sekian dan terima kasih 😀

 
4 Comments

Posted by on February 13, 2014 in Android

 

Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

[Tips for Android Developer] Using Android Emulator or Android Virtual Device

If you don’t have a android phone, don’t worry..you can still develop apps android and try it through Android Emulator (Android Virtual Device – AVD)

you can use the command via command prompt (don’t forget to set adb tools on system variable path on your PC) :

emulator -avd emulator-name

to start the emulator. If you want to customize the emulator appearance, you can use the command:

emulator -avd emulator-name -skin 480×320

where the Andori emulator appearance standard is:

480×320, landscape: emulator -skin HVGA-L
320×480, portrait : emulator -skin HVGA-P (default)
320×240, landscape: emulator -skin QVGA-L
240×320, portrait : emulator -skin QVGA-P

 
Leave a comment

Posted by on June 5, 2011 in Android

 

Tags: , , , , , , , , , ,

[Tips for Android Developer] Using ADB Tool and DDMS for support.

Hi, everyone! 😀

Welcome back 🙂

First, i want to show you about how important ADB tool for support your Android Development.

There many advantage about using ADB (Android Debug Bridge), such as :

1st : You can install/uninstall application pass through PC via USB debugging mode and mini-USB cable connected.

2nd : You can enter Shell Command (like Linux Command) inside ADB Shell.

3rd : You can detect your device, debug your application, save to log file, and report you if there’s bugs.

4th : You can push/pull file to/from device to your PC through ADB push or ADB pull.

Ok, lets know about interface 🙂

If you want to activate ADB Tools via Command Prompt on Windows, you can entry this path to System Environment Path on Windows, like :

Path” src=”https://butterflydroid.files.wordpress.com/2011/06/05-06-2011-14-21-23.png?w=256″ alt=”” width=”256″ height=”300″ />

Add new variable value on Path System Variable : [drive]:\[Location on Windows]\android-sdk-windows\platform-tools; (if you are using new ADB tool)

Or

[drive]:\[Location on Windows]\android-sdk-windows\tools (if you are using old ADB Tool)

Now, lets try it 😀

Several commands that you should know :

ADB install [APK File] : To install Android Application (APK) to your device (on emulator or Android Phone)

Example : adb install facebook.apk [enter]

ADB push [source_file] [destination_file] : To push your file on your PC to your device.

Example : adb install “c:\Temp\sample.txt” \sdcard\sample.txt [enter]

ADB pull [source_file] [destination_file] : to pull your file on the device to your PC.

Example : adb pull /sdcard/music.mp3 “c:\music\music.mp3” [enter]

ADB Shell : to enter shell command like linux (you can gain superuser access too, if you want to copy file from /sdcard to /system file)

Example : ADB Shell [enter] enter shell command prompt, start with “$” if you are ordinary user, or “#” if you re superuser.

So if you want to access superuser on your Android System, you just go :

adb shell [enter]

$ <= shown like this if you are ordinary user.

$ su [enter]

# <= shown like this if you have superuser.

If failed to access your shell with superuser, maybe your device is not rooted yet.

# reboot [enter] (for reboot your device) or on ADB Tools, you can entry command : adb shell reboot [enter]

now, lets talk about DDMS (Dalvik Debug Monitor)

This software is used for examining and tracing your application process, you can check every process, debug your application, take a capture of interface and logcat (event log).

If you want to check your application that supporting multitouch, you can use DDMS to check how it’s works.

You can access DDMS via command prompt or Run command : ddms [enter]

Enough 🙂

 
Leave a comment

Posted by on June 5, 2011 in Android

 

Tags: , , , , , , , ,

[Tips for Android developer] : Android SDK tools PATH setting

After you installed the Android SDK, it’s a good idea to add the tools directory to your search path, which includes a useful collection of command-line tools.

Windows:

Supposu you have download and install Android SDK, and extract it in another drive, except C:\. There are two methods to set PATH, such as :

  1. Use command prompt :
    set path=%path%;D:\android-sdk-windows\tools;
  2. Another is follow the inscructions :
    My Computer->Property->Advanced->Environment Variables->Edit Path Variable and add “D:\ android-sdk-windows\tools” into the Path Variables.

Linux and Mac:

Edit the ~/.bashrc or ~/.bash_profile file on that OS,

add “export PATH=$PATH:/tools”, such as:

1. Linux:export PATH=$PATH: /android-sdk-linux/tools

2. Mac:export PATH=$PATH: /android-sdk-Mac_x86/tools

After saved the file, excuting “source ./.bashrc ” to make the PATH setting become effective.

That’s it! 😀

 
3 Comments

Posted by on May 31, 2011 in Android

 

Tags: , , , , , , , , ,

[Tips for Android developer] Failed to copy file to system on AVD?

As Android Developer, if you use the following command like:

adb push [your_file] /system/..

and problem shown : “failed to copy file to /system/…”,

such as:

failed to copy ‘[your_file] ’ to ‘/system/…’: No space left on device
failed to copy ‘[your_file] ’ to ‘/system/…’: Out of memory

to resolve that problem, you can use this method :

Start your Emulator…not using Eclipse IDE or AVD Manager, but use the following command :

$emulator –avd [your_avd_name] –partition-size 128

Then you can try the command “adb push [your_file] /system/…”, and the problem solved. Now you can push your file to the system of android on Emulator 😀

 
2 Comments

Posted by on May 31, 2011 in Android

 

Tags: , , , , , , , , , ,

Apa itu Dalvik VM – Dalvik Virtual Machine?

Bagi programmer Android ataupun yang seneng ngoprek-ngoprek Android tentunya gak asing lagi dengan kata “Dalvik”, namun sudah tahukah kamu apa itu dalvik? ya..masih jarang yang mengetahuinya. Untuk itu saya akan mencoba menulis artikel tentang dalvik ini secara continuous..karena cakupannya cukup luas dan dalam, saya coba step by step mengulas Dalvik VM ini 😀

Apakah Dalvik VM itu?

Kalo kita melihat Arsitektur OS Android, kita akan menemukan Dalvik VM itu pada bagian Android Runtime, yak..Dalvik VM inilah yang menjadi tempat berjalannya aplikasi-aplikasi dari Android.

Core Libraries yang berada pada sistem Android sebagian besar merupakan core libraries yang terdapat pada bahasa pemrograman java.

Setiap aplikasi yang kita jalankan di android, memiliki proses tersendiri dan memiliki instance masing-masing pada Dalvik Virtual Machine.

Dengan Dalvik inilah, proses jalannya aplikasi menjadi efisien. Dalvik mengeksekusi file berekstensi dex yang disimpan dan dioptimalkan sehingga penggunaan memory di Android OS menjadi minimal.

Dalvik VM bergantung pada kernel Linux (android memakai Linux kernel versi 2.6 untuk core sistemnya yang terdiri dari security, memory management, process management, network stack dan driver model) untuk fungsionalitas dasar seperti threading dan low-level memory management

 
Leave a comment

Posted by on May 27, 2011 in Android

 

Tags: , , , , , , ,

Masalah Android, Memory dan Bitmap

“Ngoding” adalah hal yang mengasyikkan bagi kalangan programmer 😀
Tentunya yang menghasilkan hehe.

Namun secara tidak sadar, kadang kita tidak begitu memperhatikan bagaimana keterbatasan resource (memori, ukuran layar, dan bandwidth)

Mengabaikan hal tersebut, tentu akan berakibat pada kekecewaan pada pengguna aplikasi kita.

Mengingat pengguna aplikasi itu memiliki berbagai macam perangkat dan model yang berbeda-beda (dengan memory, ukuran layar dan bandwidth yang berbeda pula), khususnya perangkat mobile atau gadget.

Jika kamu telah banyak menghabiskan waktu dengan Android SDK bawaan Google, mungkin sudah mencoba mempraktekan membaca file JPEG ke dalam Bitmap menggunakan function Media.getBitmap. Sudah bisa dipastikan pasti ketemu masalah error :

bitmap size exceeds VM budget

Apa itu?

Ketika saya menarik analogi hal yang berbeda, yaitu pada PHP, mungkin sudah pernah mengotak-atik php.ini, di mana ada memory_limit PHP..yup, kita bakal ngotak-atik itu ketika masalah upload gambar tiba2 muncul pesan error memory size error.

Nah di android, ada file yang serupa dengan php.ini, yaitu build.prop, di situ kamu bisa mengatur memory limitnya, yaitu DalvikVM.heapsize. Di file build.prop juga kita dapat mengatur hal-hal lain, selain memory limit VM ini.

Yak, semua activity app android, bekerja pada Dalvik Virtual Machine ini, dengan bahasa pemrograman Java pada tingkat aplikasi dan bahasa pemrograman C/C++ pada tingkat library.

Namun, alangkah sulitnya, ketika kita mencoba menerapkan “setting vm.heapsize” di berbagai gadget, di mana Aplikasi sebagian besar berjalan pada gadget dengan setting heapsize=16mb.

Akan menjadi kesulitan, jikalau kita mencoba membaca file yang besar dan banyak dalam satu atau dua waktu, yang dihitung-hitung ukurannya lebih besar dari 16mb, bakal muncul pesan kesalahan : bitmap size exceeds VM budget ini.

Dan untuk mengatasi hal tersebut, perlu adanya recycling atau daur ulang “cache” memory, yang membuat kebutuhan akan memory tercukupi dari waktu ke waktu.

Jadi apa yang harus programmer lakukan?

Satu hal yang penting, kita hanya butuh membaca apa yang dibutuhkan dan masuk ke dalam memory. Jikalau file gambarnya besar atau banyak, dalam 1 gambar bertipe JPEG misal 10 MB, dibutuhkan trim/memangkas ukuran/resolusi gambar tersebut ke dalam beberapa bit.

// baca file bitmap
public Bitmap readBitmap(Uri selectedImage) {
Bitmap bm = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 5;
AssetFileDescriptor fileDescriptor =null;
try {
fileDescriptor = this.getContentResolver().openAssetFileDescriptor(selectedImage,”r”);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
finally{
try {
bm = BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, options);
fileDescriptor.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return bm;
}

Pada function di atas, terdapat sedikit “jamu” buat nge-trim bitmap yang ukurannya besar, menjadi beberapa bagian kecil options.inSampleSize. Mengurangi size gambar menjadi 1/5 dari ukuran aslinya (atau 20% dari ukuran sebenarnya)

🙂

Namun ada hal praktis lain yang bisa dipraktekkan, yaitu “daur ulang” seperti yang saya bilang di atas tadi.

Ketika kita berhubungan dengan Bitmap, tentunya memungkinkan untuk “daur ulang” ini, karena terdapat method recycle() di Bitmap ini.

Apa fungsinya?

Fungsinya yaitu membebaskan memory yang terkait dengan pixel bitmap, dan menandai bitmap tersebut sebagai bitmap yang “mati”, yang berarti tidak akan pernah dipakai lagi ketika function getPixels() atau setPixels() dipanggil.

Hal ini berarti, bitmap yang mati ini bisa diisi sebagai “cache” baru di dalam memory untuk dipakai untuk proses Bitmap berikutnya. 😀

Contohnya sebagai berikut :

public static void clearBitmap (Bitmap bm) {

bm.recycle ();

bm = null;

System.gc ();

}

Beberapa kasus juga membuktikan masalah OOM (Out Of Memory) ini bisa diatasi dengan System.gc(); ini.

System.gc() berfungsi buat nge-cleanup memory //garbage collector, dalam artian sampah-sampah “cache” ini dibersiin oleh System class tersebut.

@Override

public void onLowMemory(){

super.onLowMemory();

ImageLoader.clearCache();

}

Tentunya dengan hal tersebut di atas, masalah VM Budgets ini dapat teratasi 😀

 
1 Comment

Posted by on May 25, 2011 in Android

 

Tags: , , , , , , , , , , ,