关于compileSdk、minSdk、targetSdk的文章http://chinagdg.org/2016/01/picking-your-compilesdkversion-minsdkversion-targetsdkversion/
Installation did not succeed. The application could not be installed: INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME Installation failed due to: ‘null’
直接引用包 flutter_screenutil 去使用,会报错使用不了 ScreenUtil().setWidth(width) 等方法。
在 Project 层级的 build.gradle 中 , 使用 apply from: “component.gradle” , 引入 component.gradle 配置 ;
前言 在过去的文章中我介绍过Java8的一些新特性,包括: Java8新特性第1章(Lambda表达式) Java8新特性第2章(接口默认方法) Java8新特性第3章(Stream API) 之前由于Android平台不支持Java8,如果我们想在Android项目中使用Lambda表达式、Stream API等Java8中的新特性就必须使用Retrolambda、Lightweight-Stream-API等第三方开源库来实现。现在Google爸爸终于让Android平台支持Java8了,这篇文章中
在介绍使用 Gradle 统一配置依赖管理前我们先来简单介绍一下 Gradle, Gradle 是一个基于 JVM 的构建工具,也是一款非常灵活强大的构建工具,支持 jcenter、maven、Ivy 仓库,支持传递性依赖管理(即 A 依赖 B,B 依赖 C,那么 A 也就可以依赖 C,不用再单独去依赖),而不需要远程仓库或者是 pom.xml 和 ivy.xml 配置文件,抛弃了各种繁琐,基于 Groovy,build 脚本使用 Groovy 编写
ProductFlavor 参考配置 : android#defaultConfig 块中的配置就是 ProductFlavor 配置 ;
编译运行 ijkplayer 源码 , 报如下错误 , 源码比较老旧 , 2018 年的源码 ;
在 【Android 热修复】热修复原理 ( 类加载机制 | PathClassLoader 加载 Dex 机制 | PathDexList 查找 Class 机制 | 类查找的顺序机制 )三、 类查找的顺序机制 博客章节有讲解到 , Android 类加载时 , 必须进行分包操作 , 必须有
gradle统一入口版本管理的初衷是解决一个项目只要一个地方修改,各个有引用的模块便可以自动生效,从而达到了一个地方修改各个地方生效的好处,同时能保持gradle引用库版本的一致。使用方法如下:
本文主要介绍了关于Gradle配置的相关知识,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
1.打开源码目录下的AndroidManifest.xml文件,然后注释掉或者删除掉这行:
随着APP的一次又一次迭代,APP的体积也越来越大,这时候,会引发这么一个问题,早期的错误异常如下:
AndroidStudio中的build.gradle中包含了这些值,compileSdkVersion和minSdkVersion还比较通俗易懂,compileSdkVersion表示当前项目的编译版本,即你想让AndroidStudio以什么SDK版本去编译你的项目,minSdkVersion表示当前项目支持的最低安卓系统版本,buildToolsVersion则是指构建工具的SDK版本,也就是AndroidStudio中设置的AndroidSDK版本,buildToolsVersion要高于compileSdkVersion版本,这个很好理解,如果编译版本高于AndroidStudio的SDK版本,那AndroidStudio怎么给项目编译呢?targetSdkVersion的意思是当前app的目标sdk版本,可以理解为当前app在这个版本是比较稳定的,针对这个版本所开发的,是安卓提供的前向兼容的主要手段,它的作用就是当targetSdkVersion为20的app运行在系统版本号高于20的手机系统中,app所执行的旧版本api在高版本可能不一样了,但是安卓为了兼容在系统层会读取当前应用的targetSdkVersion,当targetSdkVersion版本号低于当前版本就会执行旧版本的api,不会导致由于系统的原因而让app运行失常。 compileSdkVersion和buildToolsVersion作用于项目的编译,minSdkVersion和targetSdkVersion控制项目的运行版本。一般来说compileSdkVersion设置为最新的SDK版本比较好,compileSdkVersion的作用就是可以让我们在编码的过程中编译器以最新的SDK的api去要求我们的编码,它会有最新的一些提醒和异常,compileSdkVersion版本调高还有一个好处就是当我们的项目有其他第三方sdk或者supperLib时compileSdkVersion低于这些库的编译版本时就无法编译打包。targetSdkVersion也是一样设置为最新的版本最好,因为不需要让系统对app进行前向兼容了,同时也可以使用高版本的一些新特性。像我们在开发过程中如果需要用到高版本的api但是我们又不想去改动项目中的代码时可以把compileSdkVersion版本调到新版本,targetSdkVersion保持不变就可以,编译版本让你可以调用高版本的api,但是在高版本运行时旧的api由于targetSdkVersion的原因而正常运行。
使用低版本的 Gradle 插件不会报错 , 使用高版本的 Gradle 插件报错 ;
随着安卓平台的不断发展与壮大,市场上大而全的应用比比皆是,产品需求的变更累积和UI交互的极致追求,除了 resources 文件的俱增,在 Android Project 中依赖的 Library 和 自己写的 Java 代码也会越来越多。这些变化,除了会导致打包出的 APK 文件越来越大之外,当项目中java代码包含的方法数(method count)超出一个峰值时,编译过程中就会出现如下错误:
(1)在 app-android-defaultConfig (或者多渠道打包)下面可以这样使用
2018年9月24日,Android Studio千呼万唤终于放出了3.2正式版,博主赶紧下载了安装包升级到最新版,每次AS升级都会带来各种各样的惊喜(大坑),这次不出所料也出现了几个编译问题,逐个想办法解决后记录如下,供各位朋友参考。
(摘自百度百科)模块化是指解决一个复杂的问题时自顶向下逐层把系统划分为若干个模块的过程,各个模块可独立工作。
当Android系统安装一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised Dex。执行ODex的效率会比直接执行Dex文件的效率要高很多。
Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed with multiple errors, see logs
当我们使用一个较高版本才有的api时,编译器会报错,这个注解的作用仅仅是让编译通过,而并没有避免低版本的系统运行高版本的api的问题,在使用时我们需要自己判断版本号来使用不同的api。 目前官方建议使用@RequiresApi。
Error:All flavors must now belong to a named flavor dimension. The flavor ‘xiaomi’ is not assigned to a flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
在 Android 应用中 , 使用 ijkplayer , 如果在 build.gradle 中配置了 abiFilters 如下架构
Android Call requires API level 11 (current min is 8)的解决方案 【错误描述】 在用Eclipse开发过程中,为了兼容Android2.2和4.0以上版本,我在使用Notification类时做了2个版本的代码,代码根据系统版本不同执行相应模块,结果,等我输完代码,发现系统提示了一个这么的错误。 【原因分析】 不详,可能和Run Android Lint有点关系吧。就是创建项目时,我们设置了最低版本API Level,比如我的是8,因此,E
简单的来港,ar就是增强现实技术,它是一种将真实世界信息和虚拟世界信息“无缝”集成的新技术,是把原本在现实世界的一定时间空间范围内很难体验到的实体信息(视觉信息,声音,味道,触觉等),通过电脑等科学技术,模拟仿真后再叠加,将虚拟的信息应用到真实世界,被人类感官所感知,从而达到超越现实的感官体验。真实的环境和虚拟的物体实时地叠加到了同一个画面或空间同时存在。
LZ-Says:在外面呆了一年又一年,似乎都快忘记当初出来的目的,不过,幸好,不忘初心~给家里买点东西,家里开心,我也开心~这就够了。
Android Gradle为我们提供了大量的DSL,我们使用这些DSL定义配置我们的工程以满足我们项目中不同的需求。这些DSL有很多,在上一章演示Android Gradle工程示例的时候,我们已经大概介绍了compileSdkVersion、buildToolsVersion以及defaultConfig等,这一章我们再详细介绍一些常用的DSL配置,这些配有有签名信息、构建类型、代码混淆、zipAlign对齐压缩等。
当业务方的 Java 环境是 1.8 时,如果 SDK 是使用 Java 11 编译,则调用 SDK 相关代码的地方在编译时将会报错:
虽然现在网速已经非常快,用户流量也很多,但是对于我们的 Android apk 文件进行优化还是很有必要的,动不动几十上百兆的大小,用户体验还是很不好的,下面我们就来整理一下 Android apk 的优化方法
AndroidStudio由于使用了gradle的进行项目构建,使我们开发app方便很多,今天我就给大家列出几点是用gradle的方便之处。
1、在现在的Android开发工具Android Studio中有几个Gradle文件,什么是Gradle,Gradle简单的说就是新一代的自动化构建工具,它是一个独立的项目,跟 AS、Android 无关,它使用的是Groovy语言开发。
使用 Android Studio 来开发 Android 工程的过程中,接触 Gradle 是不可避免的,比如配置签名、引入依赖等。那么 Gradle 到底是什么东西呢? Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化建构工具。它使用一种基于 Groovy 的特定领域语言 (DSL) 来声明项目设置,抛弃了基于 XML 的各种繁琐配置 (此定义来自于百度百科-_- !) 。啰里啰唆一堆,幸运的是,一般来说 Android 开发者只要会配置 Gradle 就可以了,并不需要深入了解。那么下面我们就来揭开 Gradle 的面纱吧。
为什么要用记录呢,因为我从开始接触Android时我们的项目就在65535的边缘。不久Google就出了multidex的解决方案。我们也已经接入multidex好多年,但我自己还没有接入,所以本博文只是作者自己对multidex接入整理记录其中大部分来源于Google官网。
好代码,总是要经历多个阶段,从匆忙赶工上线,到慢慢细致打磨,折腾的过程,美好的结果。
Android 工程中的 Module 的 build.gradle 中配置如下内容 :
我们项目里build.gradle的minSdkVersion和targetSdkVersion相信非常多人都不太理解。我在网上也看了很多关于这两者差别的文章,感觉说的都非常模糊。直到我在stackOverFlow看到Android Min SDK Version vs. Target SDK Version这篇文章后,我才最终弄清楚怎样去设置minSdkVersion和targetSdkVersion,现在我分享给大家。
1、写一个.gradle配置文件 在Progject里面新建一个config.gradle文件,然后里面添加工程需要的配置。如图所示: 2、在Project的build.gradle里面添加配置 9B
在根目录下的build.gradle文件下添加 buildscript{ …. } 中的内容:
ProductFlavor ( build.gradle#android#defaultConfig 配置 ) 文档 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.ProductFlavor.html
随着Android SDK版本不断的迭代更新,在新的SDK上总是会出现让人眼前一亮非常方便好用的API。但是这些新的API呢在低版本的SDK上是没有的,所以当我们的minSdkVersion的版本低于新API所在的版本时,我们直接使用新API在编译时会出现报错。如果只是想解决编译报错的问题呢,Android给我们提供了两种注解的方式避免编译时报错:
Display display = this.getWindowManager().getDefaultDisplay(); int nHeight = display.getHeight(); //569 int nWidth = display.getWidth(); //320 DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics( metrics ); int nDeviceHeight = (int)(metrics.heightPixels * metrics.density); // 569 * 1.5 = 853.5 int nDeviceWidth = (int)(metrics.widthPixels * metrics.density); // 320 * 1.5 = 480
A simple iOS Application project is shown below to illustrate how to configure SDK in an Xcode project.
在 Android Studio 中,最基本的以 debug 模式运行程序并打断点进行调试,相比大家都会,不过,如果遇到一些特殊的调试场景,则需要运用一些特殊的调试技巧来进行调试。
展示 平台版本 的仪表盘会基于浏览过 Google Play Store的设备数量有规律的更新,来展示运行每一种版本Android的激活设备的分布. 一般而言,支持激活设备总数的90%,而将你应用目标指向最新的版本是一个良好的实践. 提示: 为了向一系列的Android版本提供最棒的特性和功能, 你应该在你的应用中使用 Android 支持库, 它能让你可以使用在老版本上使用最新平台的API .
上一篇博客 【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 ) 中 , 在顶层的 build.gradle 中定义了相关参数变量 ;
而我们今天要讲的主题,是关于存储权限,在 Android 6.0 之后就变成了危险权限,而到了 Android 11 上面变成了特殊权限,而最明显的区别是一个是通过 Dialog 展示给用户看,另外一个是通过 Activity 展现给用户看。
领取专属 10元无门槛券
手把手带您无忧上云