什么是compileSdkVersion?

时间:2014-12-04 19:00:03

标签: java android eclipse

昨天刚从Eclipse搬到Android工作室,我试图解决所有问题。在我的构建等级中,我现在看到" 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 个答案:

答案 0 :(得分:4)

compileSdkVersion是API的版本,将用于编译以达到某些兼容性目的,正如其他回答fellas所说

一个例子:pre-honecomb设备有“选项”(设置?)按钮,所有这些按钮都有物理键。如果你有一个没有物理键的设备(仅在屏幕上,蜂窝状和向上),当你使用API​​ 8进行编译时,你会在切换应用程序按钮(右上角)旁边看到菜单指示器(三个点按钮),但是当用11编译它时将会消失 - 这三个点应该在你的ActionBar上(或者用于打开菜单的任何方法)

也: 如果你在Eclipse中寻找compileSdkVersion这个数字是右键点击项目 - >属性 - > Android(以及列表中)或者您可以只打开project.properties文件(pre-ic default.properties)并查找target(是的,此处名为target

答案 1 :(得分:4)

对我帖子的回复很棒,但我需要它对我愚蠢。

My long in-dept explanation is here.

TL;我深入解释的DR

targetSdk 表示您已在该设备上对其进行了测试,并且您的应用保证可以在每台设备上运行。它基本上是一个“抬头”到android说你的应用程序将在所有事情上工作。 如果设备版本高于此值, android会自动将兼容性设置应用于相关设备。 如果Android版本低于此值,它将正常工作,因为targetSdk意味着UP TO你的应用程序设置为什么版本。如果我设置了targetSdk 16,则所有16个以上的设备都能正常工作,所有使用16以上API版本的设备都会自动进入兼容模式,以使其正常工作。

compileSdk =您的应用使用了多少功能。如果它在Android L上使用仅可用的功能,那么您必须使用API​​ 21编译您的应用程序,因为这是Android L的API版本。如果您使用较低的compileSdk版本,您的应用程序将胜出'构建,因为它将无法找到您的应用程序具有的功能,因为这些功能不在那些较低版本中。如果您的应用没有在较高版本上使用特定的功能,那么您可以不管它。平均而言,如果您的应用不使用新Android版本专有的任何内容,则只需将compileSdk设置为17.

等等,但是targetSdk和compileSdk有什么区别?

好问题。 targetSdk基本上是Android操作系统的首选,“嘿,这个应用程序保证适用于所有设备,因为我测试了它。”

compileSdk基本上是与Android开发软件交谈“嘿,当你构建这个应用程序时,请确保你包含这个Android版本的所有功能,因为我需要这些功能才能让应用程序正常工作。

仅当您使用该Android版本的功能时才会这样做!

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

答案 2 :(得分:0)

Android版本,将用于编译。所以最好不要担心,并把它与目标一样。一切顺利;)

答案 3 :(得分:0)

compileSdkVersion 指定编译目标here

答案 4 :(得分:0)

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

一个例子是将compileSDKVersion设置为21(最新的5.0 Lollipop),然后将minSDKVersion设置为14(版本4.0,Ice Cream Sandwich)。这样做可以为你提供5.0棒棒糖的所有功能,但允许它在4.0及以上的任何设备上运行,你需要做的就是确保你使用任何较新的功能支持旧版本应用可能正在运行。