- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想知道使用 targetSDK > buildTarget
的后果。
我最近观察到,如果我在平板电脑上保留 buildTarget=16
和 targetSDK=17
选项卡(运行 4.1.1
, API Level 16) 移动到 actionBar 的中心。我无法合理化这种行为。有人能解释一下为什么会这样吗?
最佳答案
好问题!前段时间我也有类似的行为,当时 buildTarget 和 targetSDK 在所描述的方式上有所不同。我花了一些时间才弄明白,但我会尝试总结一下我的理解。
你必须区分三个重要的值:
minSdkVersion
:
这是应用将(或应该!)运行的最低可用版本。在Android上安装.apk时,会检查该值,如果您运行的Android版本低于指定版本,则不会安装。
buildTarget
:
这是编译应用程序 .apk 的 SDK(Eclipse 也将作为该值的目标,用于检查编译错误)。如果 buildTarget
高于 minSdkVersion
,即使您的 Android 版本不支持所有方法,您也可以安装应用程序。默认情况下,这设置为您的 SDK 中可用的最新版本的 Android。您仍然可以构建应用以支持旧版本,但将构建目标设置为最新版本可让您启用新功能并优化您的应用,从而在最新设备上获得出色的用户体验。
如果在较低的 API 级别上运行,您需要检查您正在使用的方法是否存在于运行时,否则应用程序可能会崩溃!
targetSdkVersion
:
targetSdkVersion
指定您的应用应在哪个 SDK 平台上正常运行。因此,如果您针对 API 17 进行测试,您可以将 API 17 添加为 targetSdkVersion
。如果使用 Android 版本 > targetSdkVersion
,Android 系统将进入某种前向兼容模式以确保对应用程序的支持。将输入此兼容性行为以确保您的应用程序继续按照您预期的方式运行,因为在非 API 级别 (here are some of the most important changes) 之间的行为可能会发生一些变化。因此,为较低 API 级别开发的任何应用程序都可以在较高版本上运行,因为旧行为(如过时值)可能会在兼容模式下“模拟”。
例如:
如果您将 targetSdkVersion
设置为 HONEYCOMB (API 11),默认主题将更改为 Theme_Holo
(即深色全息 UI)。将 targetSdkVersion
设置为较低的值将影响系统保持默认的轻量级主题,无论您将使用哪个构建 API!
在您的情况下,API 16 和 17 之间似乎没有太多明显的变化,这应该会影响设计更改,但我想,更高的 targetSdkVersion
会影响一些额外的编译时的更改(例如包括其他类、主题、值...),这将影响不同的行为,就像上面的主题示例一样。
我希望这对您有所帮助,以找出奇怪的行为。这里有一些更多相关信息可以在 Android Developer documentation 中阅读。 .
PS:有一种前向-后向- hell :Android系统是向后兼容的,从而保证了Android应用程序的前向兼容。这意味着:例如,如果您通过 OTA 更新您的 Android 版本,所有旧应用程序都应该保持运行(因此它们将保持向前兼容)。
关于安卓 : Consequences of having targetSDK > BuildTarget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816292/
我想将 EditText 始终设置为 LTR,我该怎么做?android:textDirection 似乎确实是答案,我无法让项目使用该指令进行编译 最佳答案 为 editText 使用引力 andr
我希望我的应用在每次打开时都显示登录屏幕。使用 android:clearTaskOnLaunch="true" 一切正常。但是有一个错误,只有在手机关机并且应用程序首先使用小部件启动时才会发生。 I
实际上我的要求是我想将动态文件加载到像图像一样的网页中。视频,音频等,它来自 Assets 或应用程序自己的文件目录,这不是问题。 我尝试使用以下两种方式。 方式一 这是我的 html 文件在 ass
我正在触发一个 DatePickerDialog,在 api 22 (Android 5.1) 之前它一直在工作并显示良好,我在上面设置混合和最大日期(最小 = 当前日期,最大 = 从当前日期开始的
我有一个 ListView ,我在其中将标题 View 添加到该列表。一切都很好,但是当滚动列表 headerview 也随着列表移动时,所以我想避免 headerview 滚动,我的意思是当我列表到
虽然我在android上做过一些app,但我还是一头雾水。是否可以使用 SDK 4.0 中的功能,并在 android 2.1 或更低版本上运行该应用程序? 我尝试了你们提到的方法,但出现错误 - F
您好,我正在开发小型 android 应用程序,我想在其中显示带有一些元素的简单 gridview。它工作正常。唯一的问题是即使有空间,它也总是只显示两列。它平均将屏幕分成 2 列并仅显示两个元素。如
我正在使用 Android 2.3.3 API 构建一个应用程序。我需要识别方向的变化并执行一些操作。所以我在 Android Manifest 中添加了以下内容, android:configCha
我正在尝试在“点击”包含特定 MIME 类型的 nfc 标签时开始一项 Activity 。我制作了一个 mime 类型为“text/plain”的标签,并将其添加到 list 中:
我可以将一些数据保存到文件中 val byteArrayOutputStream = ByteArrayOutputStream() byteArrayOutputStream.wri
我正在尝试解析一个包含复杂阿拉伯字母的 XML 文件.. 当我在 android 2.3.7 上测试时,并不是所有的阿拉伯字母都被支持,仍然有一些复杂的显示为方 block .. 但是在 androi
我需要编写一个方法来确定设备是平板电脑还是手机。我不需要根据这个显示不同的用户界面。我只需要有关设备的信息,以便将来我可以将其发送到指标。 在互联网上,我找到了很多方法来确定设备是否是平板电脑。我已经
我正在玩文字转语音,让我的测试应用程序更有趣。它适用于模拟器,但不适用于我的手机,因为我的默认语言环境不是英语。 但是,文本是英文的,所以 tts 当然应该使用英文。据我所知,我可以实现一个自动安装,
我正在使用 MVVM 和整洁的架构编写应用程序。在其中一个屏幕上,我需要使用 pagination 实现 RecyclerView。我将使用库 Paging3。 Android 开发者推荐在存储库层使
这个问题在这里已经有了答案: I lost my .keystore file? (12 个回答) 4年前关闭。 当我以前的操作系统损坏并安装新的(7 月 3 日)时,以前的 android_key_
我正在使用 MVVM 和整洁的架构编写应用程序。在其中一个屏幕上,我需要使用 pagination 实现 RecyclerView。我将使用库 Paging3。 Android 开发者推荐在存储库层使
在我的 v27\style.xml 中,我有以下代码来设置白色导航栏: @color/colorPrimary @color/colorPrimaryDark @color/
我想通过发送电子邮件 startActivity(Intent.createChooser(new Intent(android.content.Intent.ACTION_SEND))) 我知道要将
我实现了一个自定义 ListView ,它看起来像 Twitter 时间线。 adapter = new MyClickableListAdapter(this, R.layout.timeline,
我有一个显示启动画面的自定义对话框; mSplashDialog = new Dialog(MyActivity.this,R.layout.splash); mSplashDialog.setCon
我是一名优秀的程序员,十分优秀!