Android May 17, 2026 · 6 min read · 0 dilihat

Membuat Chatbot AI Android dengan Gemini API & Kotlin

Integrasi AI ke aplikasi Android kamu sekarang lebih mudah dari sebelumnya. Google Gemini API punya free tier yang sangat generous, dan dokumentasi SDKnya sudah friendly untuk Kotlin. Gak perlu lagi khawatir bahwa machine learning itu mahal atau kompleks — dengan langkah-langkah di artikel ini, kamu bisa punya chatbot AI fungsional dalam waktu kurang dari 2 jam. Artikel ini bakal memandu kamu step-by-step — dari setup Android Studio, menambah dependency, dapatkan API key gratis dari Google AI Studio, sampai implementasi chatbot dengan asynchronous coroutine dan tampilan chat yang rapi di RecyclerView. Setiap bagian dilengkapi kode siap copy-paste.

IKHSAN MAULANA

IKHSAN MAULANA

Web, Android, and RPA Development

Membuat Chatbot AI Android dengan Gemini API & Kotlin

Integrasi AI ke aplikasi Android kamu sekarang lebih mudah dari sebelumnya. Google Gemini API punya free tier yang sangat generous, dan dokumentasi SDKnya sudah friendly untuk Kotlin. Dalam artikel ini, kita akan membuat chatbot AI yang fully functional — bukan hanya eksperimen.

Sebelum kita mulai, pastikan kamu sudah install Android Studio versi terbaru dan punya akun Google. Siap? Mari kita mulai.

Langkah 1: Setup Project Android dan Tambah Dependency

Buka Android Studio dan buat project baru dengan template Empty Activity. Pilih Kotlin sebagai language. Setelah project selesai di-generate, buka file build.gradle.kts di level app dan tambahkan dependency Gemini SDK.

dependencies {
    // Gemini API
    implementation("com.google.ai.client.generativeai:google-generative-ai-kotlin:0.1.1")
    
    // Coroutines untuk async task
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
    
    // Lifecycle untuk ViewModel
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
    implementation("androidx.activity:activity-ktx:1.7.2")
    
    // RecyclerView
    implementation("androidx.recyclerview:recyclerview:1.3.0")
    
    // Material Design
    implementation("com.google.android.material:material:1.9.0")
}

Setelah tambah dependency, klik "Sync Now" dan tunggu Gradle selesai download semua library.

Langkah 2: Dapatkan API Key dari Google AI Studio

Kunjungi aistudio.google.com (atau bisa langsung ke Google AI Studio). Login dengan akun Google kamu. Di dashboard, cari menu "Create new API key" atau "Get API key". Klik, dan Google akan generate API key gratis untuk kamu. Copy API key tersebut dan simpan di tempat aman — kita butuh di step berikutnya.

Penting: API key Gemini punya free tier yang generous — kamu bisa ngetes hingga 60 request per menit tanpa charge. Cocok banget untuk development dan eksperimen.

Langkah 3: Buat Data Class dan Repository

Sebelum nulis UI, kita setup backend logic dulu. Buat file baru bernama ChatMessage.kt:

data class ChatMessage(
    val id: String = UUID.randomUUID().toString(),
    val text: String,
    val isUser: Boolean,
    val timestamp: Long = System.currentTimeMillis()
)

Kemudian buat file GeminiRepository.kt yang handle komunikasi dengan Gemini API:

import com.google.ai.client.generativeai.GenerativeModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

class GeminiRepository(apiKey: String) {
    private val generativeModel = GenerativeModel(
        modelName = "gemini-pro",
        apiKey = apiKey
    )
    
    suspend fun sendMessage(prompt: String): String = withContext(Dispatchers.IO) {
        val response = generativeModel.generateContent(prompt)
        response.text ?: "Maaf, gagal mendapat response dari AI."
    }
}

Langkah 4: Setup ViewModel dengan Coroutine

Buat file ChatViewModel.kt yang mengelola state chatbot:

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch

class ChatViewModel(private val repository: GeminiRepository) : ViewModel() {
    private val _chatMessages = MutableStateFlow>(emptyList())
    val chatMessages: StateFlow> = _chatMessages
    
    private val _isLoading = MutableStateFlow(false)
    val isLoading: StateFlow = _isLoading
    
    fun sendMessage(userMessage: String) {
        // Tambah pesan user ke UI
        _chatMessages.value = _chatMessages.value + ChatMessage(
            text = userMessage,
            isUser = true
        )
        
        // Kirim ke AI secara async
        viewModelScope.launch {
            _isLoading.value = true
            try {
                val aiResponse = repository.sendMessage(userMessage)
                _chatMessages.value = _chatMessages.value + ChatMessage(
                    text = aiResponse,
                    isUser = false
                )
            } catch (e: Exception) {
                _chatMessages.value = _chatMessages.value + ChatMessage(
                    text = "Error: ${e.message}",
                    isUser = false
                )
            } finally {
                _isLoading.value = false
            }
        }
    }
}

Langkah 5: Buat UI dengan RecyclerView (Approach Klasik)

Jika kamu masih pakai RecyclerView, buat ChatAdapter.kt:

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout

class ChatAdapter : RecyclerView.Adapter() {
    private var messages = listOf()
    
    fun submitList(newMessages: List) {
        messages = newMessages
        notifyDataSetChanged()
    }
    
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChatViewHolder {
        val itemView = LayoutInflater.from(parent.context)
            .inflate(android.R.layout.simple_list_item_1, parent, false) as TextView
        return ChatViewHolder(itemView)
    }
    
    override fun onBindViewHolder(holder: ChatViewHolder, position: Int) {
        val msg = messages[position]
        holder.bind(msg)
    }
    
    override fun getItemCount() = messages.size
    
    inner class ChatViewHolder(private val textView: TextView) : RecyclerView.ViewHolder(textView) {
        fun bind(message: ChatMessage) {
            val prefix = if (message.isUser) "You: " else "AI: "
            textView.text = prefix + message.text
            textView.setBackgroundColor(
                if (message.isUser) android.graphics.Color.LTGRAY
                else android.graphics.Color.WHITE
            )
        }
    }
}

Buat layout XML activity_chat.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">
    
    <RecyclerView
        android:id="@+id/chatRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="16dp">
        
        <EditText
            android:id="@+id/messageInput"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="Ketik pertanyaan..."
            android:maxLines="1" />
        
        <Button
            android:id="@+id/sendButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Kirim" />
    </LinearLayout>
</LinearLayout>

Terakhir, setup MainActivity.kt:

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import android.widget.EditText
import android.widget.Button
import kotlinx.coroutines.launch

class MainActivity : AppCompatActivity() {
    private lateinit var viewModel: ChatViewModel
    private lateinit var adapter: ChatAdapter
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_chat)
        
        // Ganti dengan API key kamu
        val apiKey = "YOUR_API_KEY_HERE"
        val repository = GeminiRepository(apiKey)
        
        viewModel = ViewModelProvider(this, ChatViewModelFactory(repository))
            .get(ChatViewModel::class.java)
        
        // Setup RecyclerView
        val recyclerView = findViewById(R.id.chatRecyclerView)
        adapter = ChatAdapter()
        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.adapter = adapter
        
        // Observe chat messages
        lifecycleScope.launch {
            viewModel.chatMessages.collect { messages ->
                adapter.submitList(messages)
                recyclerView.scrollToPosition(messages.size - 1)
            }
        }
        
        // Setup send button
        val messageInput = findViewById(R.id.messageInput)
        val sendButton = findViewById

Langkah 6: Tips Prompt Engineering Sederhana

Agar AI response kamu lebih fokus dan relevan, coba tambahkan context di prompt. Misalnya, jika chatbot kamu untuk tutorial programming, kamu bisa modify fungsi sendMessage di repository:

suspend fun sendMessage(prompt: String): String = withContext(Dispatchers.IO) {
    val enhancedPrompt = """
        Kamu adalah asisten programming yang helpful. Jawab pertanyaan user dengan ringkas dan kode jika perlu.
        Pertanyaan: $prompt
    """.trimIndent()
    
    val response = generativeModel.generateContent(enhancedPrompt)
    response.text ?: "Maaf, gagal mendapat response dari AI."
}

Ini disebut "system prompt" atau "context injection" — teknik sederhana tapi sangat berpengaruh untuk kualitas response AI.

Langkah 7: Keamanan API Key (Production)

JANGAN hardcode API key di MainActivity. Untuk production, simpan API key di local.properties atau gunakan backend server untuk proxy request. Tapi untuk development dan eksperimen, hardcoding untuk testing saja sudah oke.

Kesimpulan

Sekarang kamu sudah punya chatbot AI yang berfungsi di aplikasi Android native! Dengan Gemini API dan Kotlin, integrasi AI ke app mobile jadi sangat accessible. Free tier Google Gemini cukup generous untuk kamu eksperimen, build prototype, atau bahkan production app kecil-menengah. Dari sini, kamu bisa ekspansi — tambah database untuk history chat, implementasi stream response untuk real-time typing effect, atau bahkan voice input/output. Semua kode di atas sudah siap copy-paste. Jika ada error atau pertanyaan, cek dokumentasi resmi Gemini SDK di AI Studio. Happy coding!

Tags:

#AI Integration #Tutorial #Android #Kotlin #Gemini API #Chatbot

Share this article:

IKHSAN MAULANA

Tentang Penulis

IKHSAN MAULANA

Web, Android, and RPA Development

I am an experienced IT programmer specializing in Web Development (Laravel/PHP), Android (Dart/Flutter), and RPA (UiPath). I love building clean, efficient solutions that solve real-world problems. With 4+ years of hands...

Download CV

Sebelum download, boleh kenalan dulu? Form ini opsional — kosongin juga gak apa-apa, langsung klik Download.