Senin, 15 Agustus 2016

Perbedaan Encoding, Encryption, Hashing dan Obfuscation

Pada dunia ICT (Information Communication and Technologies) yang telah kita ketahui. Tidak jarang kita menemukan istilah - istilah baru saat kita belajar atau membaca suatu artikel terkait dunia ICT. Bahkan kita juga sering menemui istilah yang antara istilah satu dengan istilah lainnya seperti sekilas hampir sama artinya, namun sebenarnya berbeda. Pada tulisan kali ini, saya akan mencoba sedikit menjabarkan apa perbedaan dari istilah Encoding, Encryption, Hashing dan yang mungkin orang jarang sekali dengar yaitu Obfuscation. Mari kita jabarkan satu per satu mulai dari Encoding.

1. Encoding
Apa itu Encoding? Kita biasanya sering menemui istilah ini, misal saat ingin melakukan Save suatu file HTML :D. Sebagian dari kita mungkin akan identik dengan UTF-8, UTF-16, Unicode, ASCII dan seterusnya saat menemui kata Encoding ini. Saya tidak akan membahas apa itu UTF-8, UTF-16 dan teman - temannya yang lain pada kesempatan kali ini. Jadi, sebenarnya apa itu Encoding? apabila ditinjau dari tujuannya yaitu mentransformasikan data menjadi format lain untuk tetap dapat dikonsumsi dengan baik oleh sistem yang berbeda. Tujuan dari Encoding ini bukan untuk menjaga data tetap bersifat rahasia. Karena saat format data diubah oleh proses Encoding menjadi format data lainnya, proses Encoding menggunakan sebuah skema yang mana skema tersebut tersedia secara publik. Sehingga mudah saja jika kita ingin melakukan proses Reverse (Decoding).    

Gambar Skema ASCII

2.Encryption
Istilah Encryption ini sepertinya yang cukup populer di antara yang lainnya. Menurut ilmu yang pernah saya dapat dari kuliah dulu :P, Encryption ini adalah istilah yang sebenarnya berada pada cabang ilmu Kriptografi (ilmu seni merahasiakan data). Beda dengan Encoding tadi, bahwa Encryption justru bertujuan untuk menjaga kerahasiaan sebuah data setelah data tersebut diubah formatnya. Biasanya ada istilah - istilah yang terkait dengan Encryption yaitu Plain Text (data sebelum dikenakan proses Encryption) dan Cipher Text (data sesudah dikenakan proses Encryption). Untuk format data setelah dilakukannya Encryption, tidak sembarangan pihak yang bisa mengubahnya kembali / Reverse (Decryption) menjadi Plain Text. Karena dibutuhkan suatu kunci / key untuk mengubah data Cipher tersebut menjadi Plain. Contoh - contoh dari Encryption biasanya seperti RSA, Blowfish, AES dan seterusnya silahkan dicari sendiri :D.

Gambar Cipher Text

3. Hashing
Saya suka mengikuti beberapa komunitas terkait bahasa pemrograman, seperti PHP Indonesia misalnya. Disana saya masih suka melihat pertanyaan - pertanyaan yang misalnya "Bagaimana cara mengubah kembali password yang sudah menjadi MD5 ke text biasa lagi?". Kurang lebih seperti itu pertanyaannya. Jika ada yang masih belum tau MD5, itu adalah salah satu teknik hashing yang cukup populer namun konon sudah tidak aman lagi :D. Hashing tidak sama dengan Encryption yang bisa dikembalikan lagi dari cipher text ke plain text. Hashing hanya memiliki proses satu arah (one way), hanya bisa melakukan pengubahan plain text ke cipher text. Lalu, apa tujuan dari menggunakan hashing ? sebenarnya hashing adalah cara memberikan suatu tanda integritas pada suatu object, bisa suatu pesan atau file. Terkadang saat suatu pesan atau file dikirim melewati suatu network atau jaringan. Kita tidak tau apakah file atau pesan kita saat menuju destinasi tidak ada yang mencoba mengubahnya. Jika ada yang mengubahnya, pasti cipher dari hashing file atau pesan tersebut berbeda dari cipher hashing awal saat file atau pesan itu akan dikirimkan. Sehingga cipher tersebut bisa dijadikan indikasi terkait integritas file atau pesan tersebut.

Gambar Logic Scheme SHA512
4.Obfuscation
Obfuscation adalah istilah yang mungkin tidak begitu populer dibandingkan Encoding, Encryption dan Hashing. Tetapi mungkin kita semua pernah menemukannya. Misal pada saat kita memilih library Jquery yang sizenya lebih kecil (Jquery.min.js). Jika kita buka file jquery.min.js tersebut, kita tidak akan dengan mudah membaca source code yang ada di dalamnya. Jadi sekarang sudah tau apa itu Obfuscation ? Ya benar, Obfuscation bertujuan untuk membuat source code menjadi sulit dibaca, dimengerti, atau digandakan.

Gambar Obfuscation


Itulah penjelasan singkat dari perbedaan Encoding, Encryption, Hashing dan Obfuscation. Semoga bermanfaat. Terimakasih

Selasa, 22 Maret 2016

Penggunaan Begin, Rollback dan Commit Tran

Pada kesempatan kali ini, saya ingin berbagi sedikit tentang cara menggunaan perintah BEGIN, ROLLBACK dan COMMIT TRAN pada SQL Server. Perintah - perintah ini erat kaitannya bersamaan dengan perintah DML (Data Manipulation Language) seperti DELETE, UPDATE, INSERT dan lain - lain. Terkadang saat kita melakukan transaksi baik itu delete, update ataupun insert pada data di suatu table, bisa saja terjadi kesalahan transaksi misal seperti salah melakukan delete atau update pada suatu data. Atau kita terlanjur melakukan insert data yang padahal seharusnya data itu tidak dilakukan insert. Karena itulah kita sebenarnya dalam melakukan transaksi perlu menggunakan perintah seperti BEGIN, ROLLBACK, dan COMMIT TRAN.

Arti dari kata BEGIN TRAN artinya adalah suatu tanda awal bahwa kita akan melakukan transaksi baik itu delete, update ataupun insert. ROLLBACK TRAN adalah jika suatu transaksi telah terjadi, maka dengan perintah tersebut kita bisa mengembalikan data dimana transaksi tersebut sebelum dijalankan. Kemudian untuk COMMIT TRAN adalah lawan dari ROLLBACK TRAN, kita akan mengunci atau membuat permanen data dari hasil transaksi yang telah dilakukan, sehingga kita tidak bisa mengembalikan data sesaat sebelum dilakukannya transaksi.

Untuk lebih jelasnya saya akan mencoba memberikan contoh dalam penggunaan BEGIN TRAN - ROLLBACK TRAN dan BEGIN TRAN - COMMIT TRAN berikut di bawah ini

Gambar Contoh BEGIN TRAN - ROLLBACK TRAN
Pada script di atas menjelaskan bahwa terdapat transaksi delete data dari table Category dengan ID = 16. Ketika dilakukan select sebelum dan sesudah perintah delete, terlihat data untuk ID = 16 tidak ada setelah dilakukan delete. Namun dilakukannya select kembali setelah perintah ROLLBACK TRAN maka data untuk ID = 16 kembali muncul. Artinya adalah setelah dilakukannya Rollback, data dikembalikan kepada saat sebelum transaksi itu dijalankan.

Gambar Contoh BEGIN TRAN - COMMIT TRAN
Pada script di atas menjelaskan bahwa terdapat transaksi delete data dari table Category dengan ID = 16. Ketika dilakukan select sebelum dan sesudah perintah delete, terlihat data untuk ID = 16 tidak ada setelah dilakukan delete. Namun dilakukannya select kembali setelah perintah COMMIT TRAN maka data untuk ID = 16 juga tidak muncul. Artinya adalah setelah dilakukannya Commit, data secara permanen telah berubah setelah transaksi itu dijalankan.

Sekian dan semoga bermanfaat. Terimakasih

Minggu, 28 Februari 2016

Debug program di Visual Studio 2015

Debug adalah suatu fitur yang diidamkan bagi hampir seluruh developer. Setiap pengembangan suatu system khususnya pada coding, tidak dapat dipungkiri bahwa Debugging sangat diperlukan sekali bagi para developer. Dengan adanya debug, para developer tidak harus selalu mengawang-awang logic yang telah dibuatnya saat setelah melakukan proses compile.

Terkadang saat kita sudah merangkai code pada program yang kita buat, pada proses compile memang success (berhasil), namun tidak selamanya code yang kita buat berhasil pada tahap compile-nya, berhasil pula berjalan mulus pada saat dijalankan (running). Karena seyogyanya kita memang perlu memikirikan berbagai kemungkinan (test case) pada code yang telah kita buat.

Pada artikel kali ini, saya akan berbagi cerita tentang bagaimana saya melakukan debug pada IDE Visual Studio 2015. Sebelum saya lanjut pada topik intinya, saya akan menjelaskan sedikit tentang IDE Visual Studio 2015. Belum lama ini Microsoft telah me-release IDE Visual Studio 2015 yang banyak sekali enhancement pada fitur-fitur yang lebih memudahkan para developer .Net Framework dalam mengembangkan system yang dibuatnya. Dibanding versi-versi sebelumnya. Terdapat penambahan dan perbaikan fitur-fitur yang semakin canggih dalam memudahkan para developer. Salah satunya adalah fitur untuk Debug.

Sebenarnya fitur untuk debug ini adalah fitur lama dan memang sudah ada pada Visual Studio versi sebelum-sebelumnya. Namun, pada Visual Studio 2015 ini. Ada kelebihan yang cukup membantu sekali menurut pribadi saya sendiri. Kelebihannya adalah selain kita bisa melakukan debug, saat melakukan debug kita bisa langsung pula mengubah code kita jika memang kita menemukan kesalahan yang kita sadari saat program didebug. Dengan adanya fitur seperti ini, kita tidak perlu melakukan compile ulang lagi saat setelah kita mengubah code kita. Kita bisa saja cukup melakukan satu kali compile lalu saat kita debug dan kita menemukan kesalahan logic pada code kita, kita bisa langsung mengubah code kita saat kita melakukan debug tanpa harus stopping proses. Berikut adalah contoh sederhana dari debugging yang saya lakukan.

Gambar Proses Debugging Pada Visual Studio 2015
Pada gambar diatas, jika dijalankan maka akan menghasilkan output "Nilai b lebih besar dari a". Asumsi misal logic tersebut salah dan kita mau mengganti nilai variable a menjadi a = 13. Kita tidak perlu melakukan stop terlebih dahulu kemudian kita ganti variable tersebut. Maka saat setelah kita langsung mengganti variable a menjadi a = 13 saat sedang debug, output dari program tersebut akan menghasilkan "Nilai b lebih besar dari a".

Seperti itulah keunggulan melakukan debug pada Visual Studio 2015. Kurang lebihnya semoga bermanfaat. Terimakasih.



Sabtu, 17 Oktober 2015

Template Function Vs Overloading Function Pada C++

Halo pembaca setia digital saintis. Maaf rasanya sudah lama sekali saya tidak kembali menulis, mungkin karena mengingat waktu yang hanya tetap 24 jam sehari, namun hal yang harus dikerjakan terus bertambah :D. Ok langsung saja saya akan mencoba membahas topik yang akan saya tulis kali ini. Topik kali ini adalah perbandingan antara penggunaan Template Function dengan Overloading Function. Kenapa saya mencoba menulis topik ini, karena saya pernah bertemu sebuah situasi yang mana ada sebuah method atau fungsi memerlukan nilai kembalian (return) yang berbeda, namun dengan type parameter yang sama. Kemudian saya menjadi teringat dengan penggunaan Template Function.

Pada situasi tersebut, memang ada solusi lain untuk menjawabnya, kita tinggal melakukan casting pada nilai hasil kembalian dari fungsi tersebut menjadi nilai type yang kita inginkan. Tetapi menurut hemat saya, cara itu tidak akan selamanya berhasil. Karena misal jika ada sebuah fungsi dengan nilai kembalian (return) bertipe float, kemudian kita ingin melakukan casting nilai tersebut menjadi int, maka akan ada pembuangan nilai seperti 3.3 akan menjadi 3. Kita kehilangan originalitas nilai sebesar 0.3. Jadi karena itu saya mencoba memilih solusi dengan menggunakan Template Function.

Untuk situasi seperti itu, teknik overloading dari salah satu cabang ilmu Object Oriented Programming juga tidak bisa menjadi solusi. Karena overloading tidak bisa membuat 2 fungsi yang memiliki nama sama, jumlah parameter yang sama, tipe parameter yang sama namun tipe kembalian nilainya yang berbeda. Pada topik ini saya lebih mengulas fungsi yang mengembalikan nilai, karena yang kita tahu sebenarnya fungsi itu sendiri memiliki 2 macam, yang mengembalikan nilai (return) dan yang tidak mengembalikan nilai (void).

Saya akan mencoba menjelaskan terlebih dahulu tentang apa itu Template Function. Template Function adalah salah satu feature atau keunggulan dari C++. Dengan Template Function, kita bisa membuat sebuah fungsi secara general dengan akan menerima berbagai macam tipe data. Berikut adalah rumusan umum untuk membuat sebuah Template Function pada C++.

template <class type> type func_name(type arg1, ...);
*http://www.cprogramming.com/tutorial/templated_functions.html

Dari rumusan umum di atas, saya mencoba membuat sebuah program sederhana dengan membuat dan menggunakan Template Function sebagai contohnya. Berikut adalah program sederhana yang saya buat.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>

using namespace std;

template <class type> type addWithTemplate(type a, type b)
{
    return a + b;
}

int addWithOverloading(int a, int b)
{
    return a + b;
}

float addWithOverloading (float a, float b)
{
    return a + b;
}

int main()
{        
    cout << "addWithTemplate(5, 5) : " << addWithTemplate(5, 5) << endl;
    cout << "addWithTemplate(5.5f, 5.5f) : " << addWithTemplate(5.5f, 5.5f) << endl;
    cout << "\n******************************************************************\n" << endl;
    cout << "addWithOverloading(3.5f, 3.5f) : " << addWithOverloading (3.5f, 3.5f) << endl;
    cout << "addWithOverloading(3, 3) : " << addWithOverloading (3, 3) << endl;
    return 0;
}

Pada baris 5 - 8 menjelaskan bahwa saya membuat sebuah Template Function dengan nama addWithTemplate dengan dua parameter yang bernama a dan b. Tipe parameter - parameter tersebut tidak dideklarasikan secara eksplisit, namun diganti menggunakan type. Dari identifier type tersebut yang akan membuat fungsi addWithTemplate bisa menerima tipe data apa saja. Dapat kita lihat bersama, fungsi tersebut hanyalah tidak lebih dari sebuah fungsi penjumlahan biasa antara dua nilai.

Pada baris 10-18 menjelaskan bahwa saya membuat fungsi penjumlahan pula dengan nama fungsinya addWithOverloading, namun dengan teknik Overloading Function. Saya membuat dua fungsi yang overloading, pertama bertipe int dan kedua bertipe float.

Pada baris 22-26 adalah pemanggilan fungsi-fungsi yang telah dibuat tadi. Untuk baris 22 saya memanggil fungsi addWithTemplate dengan nilai parameter masing - masing 5 (int). Untuk baris 23 saya juga memanggil fungsi addWithTemplate dengan nilai parameter masing - masing 5.5f (float). Lalu pada baris 25 saya memanggil fungsi addWithOverloading dengan nilai parameter masing - masing 3.5f (float). Untuk baris 26 saya juga memanggil fungsi addWithOverloading dengan nilai parameter masing - masing 3(int).

Berikut adalah hasil dari program tersebut jika dijalankan.

Gambar Hasil Program Penggunaan Template Function & Overloading Function
Terlihat pada hasilnya, untuk fungsi addWithTemplate, meskipun dengan tipe parameter int atau float, tetap bisa menghasilkan dengan benar. Begitupun juga dengan fungsi addWithOverloading, dapat menghasilkan nilai yang benar dan sesuai. Hanya saja fungsi addWithOverloading harus dideklarasikan dua kali dengan hanya dibedakan tipe parameternya, sedangkan fungsi addWithTemplate cukup sekali dalam pendeklarasiannya. Jadi jelas lebih simple penggunaan Template Function dan lebih efisien dari sisi code yang ditulis.

Jadi kembali dengan situasi permasalahan pada awal - awal paragraf yang telah saya tulis, bahwa Template Function bisa menjadi solution yang tepat, karena kita tidak perlu memerlukan casting lagi yang dapat menyebabkan originalitas nilainya berkurang.

Semoga tulisan kali ini cukup bermanfaat dan bisa memberikan wawasan kepada teman-teman khususnya para developer C++ yang sudah membaca tulisan saya ini. Terimakasih.

*Note : Seharusnya feature Template Function ini tidak hanya ada pada C++, melainkan ada pula pada Java dan C# CMIIW

Senin, 29 Juni 2015

Cara Decompile File Jar


Pada artikel kali ini saya akan mencoba untuk mengulas bagaimana caranya kita ingin membongkar source code pada file executeable java (.jar). Caranya ternyata tidak begitu sulit, kita cukup menyiapkan sebuah tools decompiler untuk melakukan decompiling file JAR tersebut menjadi source code kembali (.java). Tools decompiler ini tersedia di Java Decompiler. Silahkan download tools tersebut terlebih dahulu.

Ketika sudah mendownload tools tersebut, buka tools tersebut.

Gambar Membuka Java Decompiler Tools
Setelah dibuka maka akan tampil form seperti gambar berikut ini

Gambar Form Utama Java Decompiler Tools

Pilih Menu File > Open File. Kemudian pilih file jar yang ingin didecompile menjadi source code. Pada contoh di artikel ini saya memilih program java sederhana yang telah saya buat dengan nama Decompile.

Gambar Setelah Memilih File Jar
Setelah itu pilih Menu File > Save All Sources. Ketika telah disave, maka akan menjadi seperti yang ditampilkan pada gambar berikut ini.
Gambar Hasil Save Source Untuk Decompile.jar
Kemudian extract file tersebut, dalam contoh artikel ini, file yang diextract adalah Decompile.jar.src.zip. Pada akhirnya nanti kita akan menemukan file Decompile.java. Pada artikel ini terletak pada direktori \Decompile.jar.src\decompile\Decompile.java. Langkah terakhir yaitu membuka file Decompile.java tersebut dengan editor tercinta Anda. Kemudian Anda akan melihat source code tersebut. Berikut adalah source code hasil decompile dari tools Java Decompiler.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*    */ package decompile;
/*    */ 
/*    */ import javax.swing.JOptionPane;
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ public class Decompile
/*    */ {
/*    */   public static void main(String[] args)
/*    */   {
/* 19 */     JOptionPane.showMessageDialog(null, "Halo");
/*    */   }
/*    */ }


/* Location:              D:\Tio\Decompile\dist\Decompile.jar!\decompile\Decompile.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */

Seperti itulah hasil source code yang telah didecompile. Formatnya memang agak berbeda daripada kita menulis dari awal. Dan sedikit catatan dari saya pribadi, terkadang tools Java Decompiler ini menghasilkan source code tidak 100% benar (ada error jika dicompile lagi) namun kesalahannya tidak begitu fatal melainkan seperti adanya nama kelas atau variable yang sama dan pada scope yang sama yang telah dideklarasikan, ataupun seperti adanya kelas yang perlu didefinisikan namun tidak didefinisikan terlebih dahulu sehingga menyebabkan error.

Sekian dahulu dari saya, semoga dapat bermanfaat. Terimakasih.

Selasa, 16 Juni 2015

Penggunaan Regex Dengan QRegularExpression

Kali ini saya akan mencoba menulis tentang penggunaan Regex dengan menggunakan Class QRegularExpression pada Qt. Sebelum jauh melangkah kepada penggunaan QRegularExpression. Saya akan mencoba menjelaskan sedikit tentang apa itu Regular Expression atau biasa dikenal dengan Regex. Ya yang jelas Regex itu bukan suatu genre lagu.

Regex merupakan suatu fungsi yang digunakan dalam pengaturan pola pada suatu teks. Regex biasanya digunakan dalam melakukan validasi-validasi teks agar data teks yang masuk dapat terkendali dan terhindar dari Garbage In. Pengaturan pola pada Regex menggunakan notasi-notasi yang cukup bervariasi dalam penggunaannya. Kenapa kita perlu Regex? Karena untuk mempersingkat baris pada program kita dalam melakukan validasi, dengan menggunakan notasi-notasi dari Regex, kita bisa menghemat banyak baris dalam melakukan validasi pada program kita.

Dalam tulisan ini saya tidak membahas detil tentang notasi-notasi Regex, saya langsung saja menjelaskan bagaimana cara menggunakan Class QRegularExpression pada Qt. Berikut saya akan mulai menjelaskannya dengan diawali dari code program di bawah ini.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <QCoreApplication>
#include <QRegularExpression>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QRegularExpression regExp("[^\w]+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$");
    QString email = "freakandstein@gmail.com";
    if(regExp.match(email).hasMatch()){
        qDebug() << "Match";
    }else{
        qDebug() << "Not Match";
    }
    return a.exec();
}

Code program di atas melakukan contoh validasi format email dengan menggunakan Class QRegularExpression. Pada baris ke 7 terdapat pattern atau pola Regular Expresssion dengan menggunakan notasi-notasi yang akan melakukan validasi teks apakah itu email atau bukan. Untuk pattern Regex email tidak selamanya harus seperti pada baris ke 7 di atas, itu semua tergantung logic dan pengetahuan tentang notasi dari si pembuat pattern, bisa lebih singkat atau bisa lebih panjang.

Pada baris ke 8 kita mencoba email dengan nama "freakandstein@gmail.com" apakah valid atau tidak sebagai email. Lalu pada baris ke 9, email akan dicocokan dengan pola yang telah dibuat dengan menggunakan fungsi match() dan hasMatch(). Hasil dari baris ke 9 akan mengembalikan nilai True jika memang email tersebut terdapat kecocokan dengan pola atau akan mengembalikan nilai False jika memang email tersebut tidak ada kecocokan dengan pola.

Pada code program di atas saat dijalankan, maka akan menghasilkan "Match". Berikut adalah gambar dari contoh programnya.

Output Program Regex
Fungsi yang digunakan pada Class QRegularExpression untuk program di atas adalah fungsi match() dan hasMatch(). Sebenarnya masih ada beberapa lagi fungsi yang ada pada Class QRegularExpression. Tetapi untuk kali ini saya hanya menggunakan 2 fungsi tersebut, untuk selebihnya dapat dicari lagi lebih dalam pada documentation yang telah disediakan.

Untuk sekedar tambahan, saat ini banyak website yang menyediakan sarana untuk belajar Regex secara langsung. Kita bisa langsung mencoba membuat pola dengan notasi-notasi dan kita bisa langsung mengujinya dengan teks inputannya. Contohnya adalah https://regex101.com/, menurut saya website tersebut cukup rekomen bagi yang ingin belajar Regex. Di website tersebut selain kita bisa menguji pola yang kita telah buat secara langsung, di sana juga terdapat penjelasan yang cukup komprehensif untuk setiap notasi-notasinya.

Sekian dari saya, semoga tulisan ini bisa bermanfaat bagi kita semua khususnya pribadi saya sendiri. Terimakasih.

Jumat, 12 Juni 2015

Setup QT Developer For Android

Pada artikel kali ini saya akan mencoba berbagi tentang bagaimana caranya melakukan setup konfigurasi pada QT Developer untuk develop Android. Seperti yang kita telah tahu sebelumnya pada artikel saya, QT adalah sebuah tools atau framework yang berbasis C++ dan bisa mendevelop aplikasi desktop dan juga mobile seperti Android, Blackberry dan iOS. Kali ini saya akan mencoba fokus untuk Android terlebih dahulu, karena saya memang hanya memiliki Android saja :D.

Pertama dan yang utama adalah, kita harus mendownload QT untuk Android terlebih dahulu. Berikut adalah linknya jika ingin mendownloadnya terlebih dahulu QT For Android. Setelah download selesai, maka diinstal dan sedikit menunggu sampai dengan selesainya menginstal. Jika instalasi selesai, langsung saja buka QT Creator pada Program. Pilih Qt Creator (Community) seperti yang ada pada gambar di bawah ini

Qt Creator (Community) Pada Menu Program Windows

Jika kita sudah pernah menginstal QT namun bukan untuk yang develop Android, maka jangan sampai tertukar shortcut programnya. Tetapi sedikit tips dari saya, lebih baik dari awal kita instal saja QT untuk develop Android, karena bagaimanapun dengan QT Android kita bisa mendevelop aplikasi Android dan juga bisa mendevelop desktop. Namun jika kita menggunakan QT untuk desktop, maka kita tidak akan bisa mendevelop untuk aplikasi Android.

Saat Qt Creator (Community) telah dibuka. maka akan tampil sama persis seperti QT Creator untuk desktop. Kemudian masuk pada menu Tools -> Options->Android. Pada gambar di bawah, ini adalah tampilan dari menu Android.

Configuration Qt for Android
Pada gambar di atas, dibutuhkan JDK, Android SDK, Android NDK dan Ant Executable. Untuk ke empat file tersebut harus kita miliki untuk kemudian kita referensikan pada Qt Creator for Android. Bagi yang belum memiliki, berikut saya melampirkan link JDKSDKNDK dan Apache Ant. Bagi Programmer Mobile yang berbasis Java, tidak asing dengan apa yang dimaksud JDK dan SDK, namun saya akan mencoba menjelaskan sekilas tentang apa itu NDK. NDK adalah suatu Toolset yang mana kita bisa menulis program dengan menggunakan C/C++ Native pada develop aplikasi Android, inilah bagian penting dari Qt for Android Developer, karena dengan menggunakan Qt untuk mendevelop aplikasi Android, kita akan menggunakan bahasa pemrograman C/C++, sehingga membutuhkan yang namanya NDK sebagai penterjemah untuk bisa berkomunikasi dengan Dalvik Virtual Machine. Sedangkan Apache Ant itu sendiri adalah semacam Java Library untuk pendukung saat proses building software.

Setelah ke empatnya telah kita download, untuk JDK biasanya kita install, lalu untuk NDK, SDK dan Apache Ant cukup kita ekstrak saja. Kemudian untuk masing-masing lokasinya kita browse seperti gambar yang ada di atas. Sesuaikan masing-masing lokasinya. Setelah itu Qt for Android siap digunakan, kita bisa langsung mendeploy aplikasi yang telah kita buat ke dalam Gadget Android kita atau maupun bisa juga kita membuat terlebih dahulu virtual Gadget Android nya sebagai tester untuk aplikasi yang kita buat.

Sekian dari artikel yang singkat ini, semoga dapat bermanfaat.