androidStiduo打包遇到的坑

本文深入解析Android开发中compileSdkVersion、minSdkVersion和targetSdkVersion的区别及应用,讲解如何合理设置这些版本号以确保应用兼容性和用户体验,同时介绍运行时权限的概念及其在不同SDK版本中的实现方式。

在这里插入图片描述androidStiduo如果使用run就不需要拷贝资源,如果是build就需要拷贝资源到这两个目录
在这里插入图片描述在这里插入图片描述

常见的sdk版本

从下面这个图可以看出,api23以上就是android6.0时代了,了解设备固件版本也非常重要,我们要把我们打包后的软件安装到不同设备上,每个设备的固件版本是一定的,如果我们的版本过高就会导致一些设备固件版本低的无法安装,或者运行时报错
在这里插入图片描述

compileSdkVersion, minSdkVersion 和 targetSdkVersion区别

compileSdkVersion:告诉 Gradle 用哪个 Android SDK 版本编译你的应用。使用任何新添加的 API 就需要使用对应 Level 的 Android SDK,编译的时候用,不会打包到APK中
minSdkVersion:最小的sdk,是应用可以运行的最低要求。minSdkVersion 是 各大Android应用商店用来判断用户设备是否可以安装某个应用的标志之一,这个和moudle依赖关系非常强,假如你有三个moudle,他们的minsdkversion的版本分别是【15,18,20】,那你的主moudle必须大于20
targetSdkVersion:目标的sdk,这个sdk是经过充分测试的,举个例子,你将targetSdkVersion 设置为22,涉及某个(或某几个)权限,你直接在mainfest中配置权限即可,然后在java代码中进行获取权限后的逻辑处理即可。
但如果你将targetSdkVersion 设置为23或更高,你除了在mainfest中配置权限外,还需要在java代码中判断用户是否同意权限,如果同意,执行什么业务操作;如果不同意,执行什么业务操作(一般是提示某某权限被拒后,某某功能无法正常使用).如果你只在mainfest中配置了权限,targetSdkVersion 又大于等于23,Java代码中不进行运行时权限的代码,你的应用程序就直接报错了
android6.0以前。用户必须同意所有权限才可以安装apk
android6.0以后,出了运行时权限这个功能,就是不需要一次性同意所有权限,只有在软件使用中使用到某个功能才会调出是否开启权限这个功能,用户同意后才可以进入这个功能,如果你将targetsdkversion设为23,那系统就会为你的应用开启这个运行时权限这个功能,但你必须在java代码和mainfest中都做逻辑判断
比如7.5.5.3460版本的qq就使用了运行时权限,一些权限可以安装时或者使用特定功能时决定是否允许
在这里插入图片描述

三者之间的大小关系如下:

//用较低的 minSdkVersion 来覆盖最大的人群,
//用最新的 SDK 设置 targetSdkVersion 和 compileVersion 来获得最好的外观和行为
minSdkVersion<=targetSdkVersion<=compileSdkVersion

上面说的三个版本都是值sdk的level,这个在sdk的目录中都是可以找到的
在这里插入图片描述

buildToolsVersion

CompileSdkVersion:是告诉gradle 用哪个SDK版本来编译,和运行时要求的版本号没有关系;使用任何新添加的 API 就需要使用对应 Level 的 Android SDK。

buildToolsVersion: android构建工具的版本,在SDK Manager中安装选择版本,buildToolsVersion的版本需要>=CompileSdkVersion; 高版本的build-tools 可以构建低版本编译的android程序
在这里插入图片描述
下载完以后,可以在我的sdk目录下就会放着对应版本的构建工具,如下:
在这里插入图片描述

sync报错

1:

Sync时警告:build.gradle: API 'variant.getMergeAssets()' is obsolete and has been replaced with 'variant.getMergeAssetsProvider()'.

解决方案:
改变
variant.mergeAssets.doLast {
为:
variant.mergeAssetsProvider.get().doLast {

2:

Android Studio - Could not determine Java version
error:Could not determine java version from 'JavaVersion.VERSION_1_6'

给出的解决方案:
targetCompatibility 'JavaVersion.VERSION_1_8'
sourceCompatibility 'JavaVersion.VERSION_1_8'
将gradle文件中的java8支持换种写法,去掉单引号。
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值