下载APP时,无论手机具有什么API,布局都很好。当我为学校项目制作APP时,我使用了与手机正在开发中的API不同的API,布局如此混乱。程序员是否针对不同的API发布不同的版本,并且当您下载APK时,应用商店会确定您拥有的API并为您提供相应的版本吗?
答案 0 :(得分:1)
“上学期我在为学校课程制作APP时, 与我的手机正在开发的API不同,布局是如此 搞砸了。”
即使针对特定的api版本也编译了apk,其差异可能是由于以下原因造成的:
主要是主题[样式,属性,甚至由os drawable产生的]的结果
有关更多信息,请参阅:
https://developer.android.com/topic/libraries/support-library/ https://source.android.com/compatibility/overview https://source.android.com/devices/architecture/
“程序员是否针对不同的API发布了不同的版本,并且 当您下载APK时,应用商店会确定您拥有哪个API 并为您提供相应的版本?”
完全没有,但是开发人员可以根据配置或体系结构apk进行配置,因此Play商店可以根据设备类型为不同的商店提供服务
请参阅:
https://developer.android.com/google/play/publishing/multiple-apks
答案 1 :(得分:0)
Ciao
“平台版本 不同的设备可能运行不同版本的Android平台,例如Android 4.0或Android 4.4。每个后续平台版本通常会添加以前版本中不可用的新API。为了指示可用的API集,每个平台版本都指定一个API级别。例如,Android 1.0是API级别1,而Android 4.4是API级别19。
API级别允许您使用清单标签及其minSdkVersion属性声明与应用程序兼容的最低版本。例如,在Android 4.0(API级别14)中添加了Calendar Provider API。如果没有这些API,您的应用无法运行,则应将API级别14声明为应用的最低支持版本。
minSdkVersion属性声明与您的应用程序兼容的最低版本,而targetSdkVersion属性声明对您的应用程序进行优化的最高版本”
在您的build.gradle (Module: app)
文件中,您总会有类似的东西:
android {
defaultConfig {
applicationId 'com.example.myapp'
// Defines the minimum API level required to run the app.
minSdkVersion 15
// Specifies the API level used to test the app.
targetSdkVersion 28
...
}
}
“ 每个后续的Android版本都为使用以前平台版本的API构建的应用提供兼容性,因此,在使用已记录的Android API时,您的应用应始终与以后的Android版本兼容”
我认为同一链接中的注释也非常好:
注意:targetSdkVersion属性不会阻止您的应用 在高于以下版本的平台版本上安装 指定值,但这很重要,因为它指示了 系统您的应用是否应继承较新的行为更改 版本。 如果不将targetSdkVersion更新为最新版本 版本,系统假设您的应用需要一些 在最新版本上运行时的向后兼容行为。 例如,在Android 4.4中的行为更改中,创建了警报 默认情况下,带有AlarmManager API的接口不精确,因此系统 可以批量处理应用警报并保留系统电源,但是系统会 如果您的目标API级别保留了您应用的先前API行为 低于“ 19”
有关here
的详细信息,以确保新版本API的向后兼容性所需的Android支持库的设置。关于修复minSdkVersion
的文档再次为您提供了帮助:
”如果您的应用使用的是较新的平台版本中添加的API,但不要求其具有主要功能,则应在运行时检查API级别,并在API级别太低时适当降低相应的功能。在这种情况下,将minSdkVersion设置为应用程序的主要功能可能的最低值,然后将当前系统的版本SDK_INT与Build.VERSION_CODES中与您想要的API级别相对应的代号常量进行比较检查。例如:“
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
// Running on something older than API level 11, so disable
// the drag/drop features that use <code><a href="/reference/android/content/ClipboardManager.html">ClipboardManager</a></code> APIs
disableDragAndDrop();
}
该链接中尚未报告的另一个非常重要的一点是,“从下面列出的日期开始,Play控制台将要求APK上传的Android至少为Android 8.0(API级别26)” source >
要符合要求,您必须设置前面的build.gradle
文件,且不得少于以下内容:
targetSdkVersion 26
这是another very good link,它详细介绍了“ Google Play的目标API级别要求”,概述了所有有关更新应用程序的建议
最后,如果您无法通过一个apk来部署应用程序,this link为您提供了“为不同的API级别创建多个APK”的说明。请注意,除非绝对必要,否则他们不会在同一链接中推荐此解决方案
乍一看似乎是多个APK支持是最好的解决方案,但事实并非如此
希望这对您有所帮助,并祝您有美好的一天,
安东尼诺
答案 2 :(得分:0)
相同版本的APK用于该应用程序支持的每个Android版本。在大多数情况下,由于使用了Android支持库(或android x),因此该应用在不同版本的Android上看起来相同的事实。 不过,借助新的Android Bundles,开发人员可以定义应用程序的某些部分,仅适用于特定版本的Android。