当前位置: 首页 > 知识库问答 >
问题:

我应该为编译SdkVersion、minSdkVersion和目标SdkVersion设置什么?

公孙茂学
2023-03-14

我担心我应该将compileSdkVersionminSdkVersiontargetSdkVersion设置为什么。

>

  • 我首先担心的是,如果我将 compileSdkVersion 设置为 23,这是现在最新的版本,旧设备是否能够运行它?

    我如何确切地知道我的< code>minSdkVersion应该是什么,以确保运行较低api或版本的手机无法访问它(我不想将最低sdk设置得太高,因为这会阻止可能运行该应用程序的手机)?

    我应该如何设置我的 targetSdkVersion

  • 共有3个答案

    鲁炳
    2023-03-14

    您的CompileSDKVersion和您的TargetSDKVersion应该是相同的:

    android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"
    
    defaultConfig {
        applicationId "com.judeochalifu.dribsndrabs"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    

    如果您对使用哪个版本号感到困惑,请转到Android SDK Manager,找到您正在使用的API级别(必须始终是最新的),然后在那里您将找到要使用的版本(在撰写本文时的Android 7(API 24))。

    至于< code>minSDKVersion,检查使用哪个的最佳位置是前往< code >创建新项目窗口(此处为Android Studio),Google将帮助您选择此时使用的最佳版本:

    金健
    2023-03-14

    谷歌刚刚发布了一篇关于这些的详细文章。总之:

    compileSdkVersion是您告诉Gradle使用哪个版本的Android SDK编译应用程序的方法。使用新的Android SDK是使用该级别中添加的任何新API的要求。需要强调的是,更改compileSdkVersion不会改变运行时行为。虽然在更改compileSdkVersion时可能会出现新的编译器警告/错误,但您的compileSbkVersion不包含在APK中:它仅在编译时使用。

    如果comileSdkVersion设置了您可以使用的最新API,minSdkVersion是您的应用程序的下限。minSdkVersion是谷歌应用商店用来确定应用程序可以安装在哪个用户设备上的信号之一。它在开发过程中也起着重要作用:默认情况下,lint会针对您的项目运行,当您使用minSdkVersion之上的任何API时警告您,帮助您避免尝试调用不存在的API的运行时问题。仅在较新的平台版本上使用API时,在运行时检查系统版本是一种常见的技术。

    然而,这三者中最有趣的是targetSdkVersion。targetSdkVersion是Android提供向前兼容性的主要方式,除非更新targetSdkVersion,否则不会应用行为更改。这允许您使用新的API(就像您更新compileSdkVersion一样,对吗?)在进行行为改变之前。

    商畅
    2023-03-14

    我将compileSdkVersion设置为23,这是目前最新的版本,旧设备是否可以运行它?

    是的。comileSdkVersion本身与哪些设备可以和不能运行您的应用程序无关。通常,您将其设置为最新版本的Android SDK。

    我如何确切地知道我的minSdkVersion应该是什么,以确保运行较低api或版本的手机无法访问它?

    通常,当您尝试使用比您的minSdkVersion更新的软件时,开发工具会立即警告您。您可以运行完整的Lint检查以定期重新确认。

    我应该如何设置我的目标Sdk?

    在没有任何特殊理由选择其他东西的情况下,我通常在创建项目时选择最新或次新的值(例如,现在22或23)。目标SdkVersion有助于向后兼容,通常我的描述是“这是你在编写代码时想到的Android版本”。

     类似资料:
    • 我正在为一个特定的设备编程,我无法理解如何设置minsdkversion、compilesdkversion和Target etsdkversion。当我使用API级别25不存在的库时,我想得到一个编译器错误。这是我收集的信息。minsdkversion阻止调用API版本不存在的API。Compilesdkversion应该始终是最新版本。Targetsdkversion是应用程序的测试对象(不明

    • 关于SO的压倒性建议是编译SDK通常应该与目标SDK匹配。 https://stackoverflow.com/A/27629181/360211 同样,最好让[compileSdk]与您的目标sdk版本相匹配。 null

    • 问题内容: 许多使用Shell脚本配置其环境的Java应用程序都使用环境变量来启动Java的正确版本,找到JRE JAR,等等。 在OSX 10.6上,以下路径似乎对此变量有效 其中一些是到实际当前VM的符号链接(在Java Preference窗格中定义)。 但是应该使用哪一个?或者可以使用其中任何一个? 问题答案: 我只是设置JAVA_HOME为该命令的输出,该命令应该为你提供Java首选项中

    • 当我尝试将我的从27更新到28时,我得到错误: 这是我构建的依赖项部分。格拉德尔: 我已经尝试更新Firebase依赖关系到最新版本(这需要更新minSdkVersion从15到16),这没有效果(我不确定这是否是一个可行的选择,因为我似乎记得我的同事说一些关于条形码扫描不被支持,如果我把这些版本太高)。更新所有依赖项都没有错误地导致应用程序崩溃,我还没有弄清楚哪些是罪魁祸首;我决定尽可能多地关注

    • 编译为裸机目标 在默认情况下,Rust 尝试适配当前的系统环境,编译可执行程序。举个例子,如果你使用 x86_64 平台的 Windows 系统,Rust 将尝试编译一个扩展名为 .exe 的 Windows 可执行程序,并使用 x86_64 指令集。这个环境又被称作为你的宿主系统(Host System)。 为了描述不同的环境,Rust 使用一个称为目标三元组(Target Triple)的字符

    • 我现在已经为javac ant任务问题苦苦挣扎了很长时间。问题是ant显然忽略了设置为1.5的target属性: 目标和源设置为1.5。运行任务时出现编译错误: 根据java docs(link)方法,createStruct是在Java1.6中引入的,所以我知道ant是在编译到1.6而不是像我礼貌地要求的那样编译到1.5。 我已经尝试了所有我能在网上找到的,现在我放弃了。有人能帮帮我吗?非常请.