什么是compileSdkVersion?

6
刚刚从Eclipse转到Android Studio,正在尝试弄清楚所有内容。在我的构建grade中,我现在看到了一个"compileSdkVersion",但似乎无法弄清它是什么。我知道minSdk告诉GooglePlay应用程序可以处理多老的设备,而targetSdk则告诉设备是否应切换到向前兼容模式。但是我不知道compileSdk是什么以及该怎么做。另外,作为一个附加问题,如果我将targetSdk设置为21,则运行在sdk 16上的设备会以兼容模式运行吗?感谢您的帮助!我非常感激!
编辑:请不要链接到Android开发人员网站。我已经阅读过它,但不明白为什么在不同的sdk中编译会有所不同,如果已经存在min、max和target sdk版本。再次感谢您的帮助!
以下是gradle代码。
apply plugin: 'com.android.application'

android {
compileSdkVersion 17 
buildToolsVersion "19.1.0"

defaultConfig {
    applicationId "com.devname.myapp"
    minSdkVersion 10
    targetSdkVersion 21
}

buildTypes {
    release {
        runProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
    }
}
}

dependencies {
compile 'com.android.support:support-v4:21.0.0'     
compile files('libs/libGoogleAnalyticsServices.jar')
}
5个回答

16

对我的帖子的回复很好,但我需要它简单易懂。

这里是我详细解释的链接。

我的详细解释TL;DR

targetSdk 意味着你已经在该设备上进行了测试,并且你的应用程序在所有版本低于此版本的设备上保证可用。它基本上是一个对安卓的“提醒”,表明你的应用程序将适用于版本号为目标SDK值或更低版本的设备。如果设备版本高于此版本,安卓会自动针对该设备应用兼容性设置。如果安卓版本低于此版本,则它将正常工作,因为目标SDK表示你的应用程序设置要适用哪个版本。例如,如果我将目标SDK设置为16,则一切都适用于16及以下的版本,并且使用API版本高于16的所有设备将自动进入兼容模式,以允许其正常工作。

compileSdk = 你的应用程序使用了多少功能。如果它使用仅在Android L可用的功能,则必须使用API 21编译您的应用程序,因为那是Android L的API版本。如果您使用较低的compileSdk版本,则您的应用程序将无法构建,因为它将找不到您的应用程序具有的功能,因为这些功能不在那些较低版本中。如果您的应用程序使用 特定于 更高版本的功能,则可以将其保持不变。通常,如果您的应用程序不使用任何新安卓版本的专属功能,则只需将compileSdk设置为17。

等等,targetSdk和compileSdk之间有什么区别?

好问题。 targetSdk基本上是对安卓操作系统的“提醒”,它表示:“嘿,这个应用程序已经经过了我的测试,可以保证在所有版本号低于此数字的设备上工作。”

compileSdk实际上是与Android开发软件进行交流,告诉它:“嘿,构建这个应用程序时,请确保包括这个Android版本的所有功能,因为我需要这些功能使应用程序正常工作。”

只有当您使用该Android版本的功能时才需要这样做!

如果您没有使用Lollipop中的功能,则没有设置compileSdk为21的理由!为什么要这样做呢?您不需要它,因此没有必要使用所有这些额外功能来构建它。


4

compileSdkVersion是编译时所使用的API版本,用于某些兼容性目的,正如其他人所说。

例如:早期的设备有“选项”(设置?)按钮,所有这些设备都有物理键。如果您有一款没有物理键的设备(只有屏幕上的按键,蜂巢和更高版本),那么当您使用API 8进行编译时,将会在切换应用程序按钮(右上角)旁边得到菜单指示器(三个点按钮),但是当使用11进行编译时,它将不再存在 - 这些三个点应该在您的操作栏(或您用于打开菜单的任何方法)。

还有: 如果您正在Eclipse中查找compileSdkVersion,则此数字位于项目上右键单击 ->属性 -> Android(以及列表中),或者您可以简单地打开project.properties文件(ICS之前的default.properties)并查找target(是的,在这里命名为target)。


0

这是用于编译的 Android 版本。所以最好不要担心,将其设置为与目标版本相同即可。祝一切顺利;)


0

compileSdkVersion 指定编译目标,如 此处 所述。


0

compileSDKVersion是Android SDK的版本(实际上是Android本身的版本),您想要编译的版本。如果您使用较新的版本(较高的数字),则会获得更多功能,但需要记住较新版本的Android在较少设备上运行,并且运行较旧版本的设备将无法访问这些功能。最好的做法是将compileSDKVersion保持在最高版本,以便访问所有功能,然后将minSDKVersion设置为您计划支持的最低版本。

一个示例是将compileSDKVersion设置为21(最新的5.0 Lollipop),然后将minSDKVersion设置为14(4.0版本,Ice Cream Sandwich)。这样做可以让您在5.0 Lollipop中获得所有功能,但允许它在任何具有4.0及更高版本的设备上运行,然后您只需确保如果使用了任何较新的功能,您还支持应用程序可能运行的较旧版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接