CompileSdkVersion и TargetSdkVersion


compileSdkVersion

CompileSdkVersion - версия API под которую приложение скомпилировано. Это означает, что вы можете использовать Android API функции включеные в эту версию API (а также все предыдущие версии, очевидно). Если вы попытаетесь использовать API 16 функций, но набор compileSdkVersion до 15, вы получите ошибку компиляции. Если установить compileSdkVersion до 16 вы можете запустить приложение на API 15 устройства до тех пор, как пути выполнения вашего приложения не пытаются ссылаться на какие-либо API, специфичные для API 16.

targetSdkVersion

TargetSdkVersion не имеет ничего общего с тем, как ваше приложение компилируется или какие интерфейсы API вы можете использовать. TargetSdkVersion предполагается указать, что вы проверили ваше приложение на (предположительно до и включительно) версии, которую вы укажете. Это больше похоже сертификации или подписать вы даете ОС Android, как намек на то, как он должен обрабатывать ваше приложение с точки зрения функций ОС.

For example, as the documentation states:

Например, установив это значение на "11" или выше, позволяет системе применить новую тему по умолчанию (Холо) для вашего приложения при запуске на Android 3.0 или выше ...
ОС Android, во время выполнения, может изменить то, как ваше приложение стилизованное или иным образом выполняется в контексте операционной системы на основе этого значения. Есть несколько других известных примеров, которые находятся под влиянием этого значения, и этот список, вероятно, только увеличение по сравнению с time.for всех практических целей, большинство приложений будут хотеть установить targetSdkVersion до последней выпущенной версии API. Это обеспечит ваше приложение выглядит так же хорошо, насколько это возможно на самых последних устройствах Android. Если вы не укажете targetSdkVersion, то по умолчанию будет = minSdkVersion.
Build.gradle App
apply plugin: 'com.android.application'

def releaseTime() {
    return new Date().format("yyyy-MM-dd_HH:mm:ss",
            TimeZone.getTimeZone("GMT+08:00"))
}

android {
    compileSdkVersion 23 //Приложение запускается на устройствах от минимальной до 23 включительно,
    //Поддержка апи до 23
    buildToolsVersion '22.0.1'

    defaultConfig {
        applicationId "com.psyberia.trackmyphone"

        minSdkVersion 9
        targetSdkVersion 22 //Версия на которой тестировали программу,
        // тема (стилизация) данной версии будет применена к приложению
        //Если не указать будет применена стилизация minSdk версии

        versionCode 1
        versionName "1.0"

        multiDexEnabled true

        ndk {
            moduleName "libmp3lame"
        }
    }

    signingConfigs {
        debug {}
        release {
            // ...
            keyAlias 'trackmyphone'
            keyPassword '3SqU_K6T'
            storeFile file('D:/0A/TrackMyPhone/trackmyphone.jks')
            storePassword '3SqU_K6T'
        }
    }
    buildTypes {
        debug {
            zipAlignEnabled true
            minifyEnabled false
            shrinkResources true
        }



        release {
            zipAlignEnabled true
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            signingConfig signingConfigs.release

            applicationVariants.all { variant ->

                def time = releaseTime()

                variant.outputs.each { output ->
                    def apk = output.outputFile
                    //def endFileName = time + "_${variant.productFlavors[0].name}.apk"

                    def endFileName = "tracker.apk"

                    if (apk != null &&
                            apk.name.endsWith('.apk') &&
                            !apk.name.endsWith('${endFileName}')) {
                        def fileName = "APP_V${defaultConfig.versionName}_${endFileName}"
                        output.outputFile = new File(apk.parentFile, fileName)
                    }
                }
            }


        }
    }

    sourceSets.main {
        jni.srcDirs = [] // This prevents the auto generation of Android.mk
        jniLibs.srcDir 'src/main/jniLibs'
        // This is not necessary unless you have precompiled libraries in your project.
    }


    productFlavors {
/*
*        google_play {
            manifestPlaceholders = [SOME_CHANNEL_VALUE: "google_play"]
        }

        demo {
            applicationId "com.psyberia.trackmyphone" //.demo
            versionName "1.0-demo"
        }
        full {
            applicationId "com.psyberia.trackmyphone" //.full
            versionName "1.0-full"
        }
*
* */

    }


    buildTypes {
        debug {
            //applicationIdSuffix ".debug"
        }
    }

}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'
    compile 'com.google.android.gms:play-services:8.4.0'
    compile 'com.loopj.android:android-async-http:1.4.9'
    compile 'com.android.support:multidex:1.0.0'
}