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

使用配置apk,同时仍然以pre lollipop设备为目标

谭炎彬
2023-03-14

在为即时应用程序开发时,使用配置APK(https://developer.android.com/topic/instant-apps/guides/config-splits.html)提供了减少APK大小的有用选项。但是,看起来它们仅在使用21或更高版本的Mind Sdk时才受支持。例如,如果您尝试将此功能用于较低的sdk版本,您会收到以下错误。

MinSdkVersion 17 is too low (<21) to support pure splits, reverting to full APKs

例如,有没有办法让基本模块使用纯拆分功能,同时仍然安装app target pre lollipop设备?

共有3个答案

曾修真
2023-03-14

如果使用< code > tools:overrideLibrary ,可以为应用程序模块指定不同的较低minSdkVersion。请参阅如何在build.gradle文件中使用tools:override library?

我就是这样做的:

app/build.gradle

android {
    defaultConfig {
        minSdkVersion 17
    }
}

应用程序清单

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.package.app" xmlns:tools="http://schemas.android.com/tools" >

    <uses-sdk tools:overrideLibrary="com.package,com.package.feature"/>

</manifest>

您需要添加所有想要覆盖其< code>minSdkVersion的包名。通过查看错误,您将知道要添加哪些:

清单合并失败…AndroidManifest。xml库可能正在使用17中不可用的API建议:使用minSdk最多为17的兼容库,或将此项目的minSdk版本增加到至少21,或使用工具:overrideLibrary=“com.package.feature”强制使用(可能导致运行时失败)

基础和功能/build.gradle

android {
    defaultConfig {
        minSdkVersion 21
    }
}

通过构建已安装/即时APK进行测试,然后分析minSdkVersion值。安装时间应为17,您的基本/功能APK仍将在21。

广晔
2023-03-14

免安装应用仅在 API 21 设备(链接)中受支持,较旧的设备将仅支持完整的 APK。

更好的方法是根据您的模块定义不同的minSdk,如:

您可以在GitHub上查看Google的分析示例

项目的gradle

ext {
    buildTools = '26.0.2'
    compileSdk = 26
    minSdk = 15
    minSdkInstant = 21
    versionCode = 1
    versionName = '1.0'
    supportLib = '26.1.0'
    firebaseVer = '10.2.4'
    instantAppsVer = '1.0.0'
}

基础灰度

android {
    compileSdkVersion rootProject.compileSdk
    buildToolsVersion rootProject.buildTools
    baseFeature true
    defaultConfig {
        minSdkVersion rootProject.minSdk
        targetSdkVersion rootProject.compileSdk
        versionCode rootProject.versionCode
        versionName rootProject.versionName
    }
    buildTypes {
        release {}
    }
}

安装gradle

 defaultConfig {
        applicationId "com.example.android.instant.analytics"
        minSdkVersion rootProject.minSdk
        targetSdkVersion rootProject.compileSdk
        versionCode rootProject.versionCode
        versionName rootProject.versionName

    }

即时Gradle

android {
    defaultConfig {
        minSdkVersion rootProject.minSdkInstant
    }
}
何玺
2023-03-14

由于minSdkVersion标志将切换相当多的检查,这一更改不会自动为您完成。

我建议为具有不同minSdkVersion的已安装和即时模块引入产品风格,如下所示:

// :feature/base/build.gradle

flavorDimensions 'delivery'

productFlavors {
    instant {
        dimension 'delivery'
        minSdkVersion rootProject.minSdkInstant
    }
    installed {
        dimension 'delivery'
    }
}

这将必须在依赖于具有API级别的功能模块的其他模块中类似地完成

 类似资料:
  • 我有一个骆驼路线如下。虽然我设置了处理(true),但我不明白为什么defaul在所有重试都耗尽后,defaul的处理程序会调用的。 日志: 20.04.03 11:46:53.907 INFO ad #6 - timer://testRoute route1 面包屑 Id=ID-xxxxxx-1585894556662-0-4 |世界您好 20.04.03 11:46:53.913错误广告#6-

  • 问题内容: 我想知道是否有可能隐藏滚动条,而仍然使用鼠标/键盘启用滚动。 我试图使用CSS: 。效果是禁用滚动条 和 禁用滚动。 问题答案: 供将来参考,还有一个不带jQuery的解决方案-仅使包装div样式包含并使用以下JavaScript两行代码:

  • 在我的项目的,但我仍然收到以下警告: 我试图在整个项目中查找“compile”,但没有找到匹配项。那么原因是什么呢?

  • 问题内容: 我想知道是否有可能隐藏滚动条,而仍然使用鼠标/键盘启用滚动。 我尝试使用CSS :。效果是禁用滚动条 和 禁用滚动。 问题答案: 为了将来参考,还有一个没有jQuery的解决方案-仅使包装div样式包含并使用以下JavaScript两行代码:

  • 如何使用adb命令行指令在多个设备上同时安装apk?我想用单个命令在两个或多个设备上安装apk,可以吗? 我已尝试使用,低于命令。 “adb-s安装apk路径”-- 请帮助。。。。

  • 这是我的hibernate配置xml文件,我已经设置了,但仍然收到警告: 警告:不建议在没有服务器身份验证的情况下建立SSL连接。根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果未设置显式选项,默认情况下必须建立SSL连接。为了符合不使用SSL的现有应用程序,verifyServerCertificate属性设置为'false'。您需要通过设置usessl=false来显式