Bir Android uygulama geliştirdiğimizde, geliştirdiğimiz uygulamanın fonksiyonları kadar güvenliği de önemlidir. Dolayısıyla, API anahtarları, yetkisiz erişim ve kötü niyetli kullanımlardan korunmalı ve API güvenliği sağlanmalıdır. Uygulamalarımızda istediğimiz kadar önlem alsak bile API anahtarını ele geçirmek isteyene %100 engel olamayız, ancak, onların işini daha da zorlaştırabiliriz. 

Bu yazıda buildConfig ve local.properties aracılığı ile API anahtarını güvenli bir şekilde kullanmayı göstereceğim. 

buildConfig Nedir?

buildConfig, android uygulamalarında derleme zamanında oluşturulan bir sınıftır. Bu sınıf, proje yapılandırma dosyası olan “build.gradle” içerisinde tanımlanan değişkenleri ve değerleri içerir. Bu sınıf sayesinde, proje yapılandırmasına özgü bilgileri uygulama içinde kullanabiliriz.

buildConfig özelliği, uygulama içerisinde farklı çevreler (geliştirme, üretim vb.) arasında değişen değerleri, anahtarları ve yapılandırmaları yönetmek için kullanılır. Bu sayede farklı çevrelerde çalışırken uygulamanızın davranışını değiştirebilir veya belirli yapılandırmaları kolayca yönetebilirsiniz.

buildConfig sınıfı, uygulama projesindeki build.gradle dosyasına eklenen “buildConfigField” ifadesiyle tanımlanan değişkenlere dayanır.

android {
    
    // ...........

    defaultConfig {
    
        // ............

        buildConfigField "int", "MAX_RETRY_COUNT", "3"

    }
}


Örneğin yukarıda böyle bir değişken tanımlayıp bu değişkene MainActivity içerisinde aşağıdaki şekilde erişebiliriz.

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        val maxRetryCount = BuildConfig.MAX_RETRY_COUNT
        
        setContent {
            MyApplicationTheme {
            
             // ........
            }
        }
    }
}

local.properties Nedir?

local.properties, android projesinin yerel konfigürasyon bilgilerini saklamak için kullanılan bir dosyadır. Bu dosya, proje içinde yer alır ve genellikle projenin yapılandırma ve derleme aşamasında kullanılan özel verileri saklamak için kullanılır. Bu dosya versiyon kontrol sistemine yüklenmez, çünkü içerisinde API key gibi bilgiler tutulabilir.

Bu dosya, Android Studio ve Gradle tarafından kullanılır. Bu dosya genellikle bu iki temel amaç için kullanılır:
1) Android SDK Yolu: Android projeleri derlenirken, Gradle sisteminin kullanılan Android SDK’nın yolunu bilmesi gerekmektedir. Bu dosya, Android SDK’nın bilgisayardaki yolunu içerir ve Gradle sistemi tarafından kullanılır.

2) Gizli Verilerin Depolanması: Şifreler ya da API anahtarları gibi gizli tutulması gereken özel bilgiler bu dosyada tutulur. Bu tür bilgilerin proje kaynak koduna eklenmesini engellemek için kullanılan bir yöntemdir.

Şimdi artık API anahtarlarımızı lokalde tutarak versiyon kontrol sistemlerine yüklemeden ve ana sınıflarımız içerisinde tutmadan kullanabiliriz. Öncelikle, local.properties dosyamızı açalım, içerisinde sdk yoluna dokunmadan alt satıra aşağıdaki şekilde girdi yapalım. Ayrıca, API anahtarınızı herhangi bir tırnak içerisinde yazmayın.

API_KEY=api-anahtarınızı-buraya-yazın


Ardından APP level build.gradle dosyamızı açalım. android içerisindeki defaultConfig bloğunun içine aşağıdaki şekilde girdi yapalım.

Properties localProperties = new Properties()
localProperties.load(project.rootProject.file("local.properties").newDataInputStream())
buildConfigField "String", "API_KEY", "\"${localProperties.getProperty("API_KEY")}\""


Ardından API anahtarına “BuildConfig.API_KEY” ile dilediğiniz yerden erişebilirsiniz.

Bu yöntem sizi saldırganlardan %100 korumaz ancak dediğim gibi işlerini zorlaştırmış olursunuz. Ayrıca, API anahtarınızı uzak bir sunucuda tutarak (örneğin firebase gibi) API anahtarınızı güvenli bir şekilde saklayabilirsiniz.