在为即时应用程序开发时,使用配置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设备?
如果使用< 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。
免安装应用仅在 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
}
}
由于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来显式