Android应用程序如何适合所有不同的API?

时间:2018-12-25 00:09:50

标签: android api

下载APP时,无论手机具有什么API,布局都很好。当我为学校项目制作APP时,我使用了与手机正在开发中的API不同的API,布局如此混乱。程序员是否针对不同的API发布不同的版本,并且当您下载APK时,应用商店会确定您拥有的API并为您提供相应的版本吗?

3 个答案:

答案 0 :(得分:1)

  

“上学期我在为学校课程制作APP时,   与我的手机正在开发的API不同,布局是如此   搞砸了。”

即使针对特定的api版本也编译了apk,其差异可能是由于以下原因造成的:

  1. 每个操作系统版本的组件的实现(设备上的实现与开发人员针对其进行编译的设备不同)
  2. 应用程序针对其进行编译的不同支持库版本的混合和使用-为了保持兼容性,开发人员可以使用支持库或称为androidx的最新框架
  3. 每个供应商/ OEM(原始设备制造商)可能会更改AOSP,但它需要维护CDD(更改的框架/资源/主题的差异-因设备的OEM而异)。弃用的叠加层
  4. JIT的用途
  5. 错误结果
  6. 不断更改android / gradle生成工具,更改新编译的apk相同源代码的结果
  7. 开发人员可以使用自定义类加载器,每次启动该应用程序时,生成的加载器可能会产生不同的结果-例如,像google一样,它在帐户管理器中使用其自己的网络类加载器在设备上创建Google帐户
  8. 该应用可以是即时应用或模块应用

主要是主题[样式,属性,甚至由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 documentation中所述:

“平台版本 不同的设备可能运行不同版本的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

Google new requirements

要符合要求,您必须设置前面的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。