0
点赞
收藏
分享

微信扫一扫

v4 v7包的使用,Android Gradle的理解,版本号对应Gradle发行版本


目录

​​v4 v7包的使用​​

​​Android Gradle的理解​​

​​版本号对应Gradle发行版本​​

​​升级Android Gradle Plugin到3.0.1的踩坑之旅​​

​​groovy语法:https://www.jianshu.com/p/ae97aad0505d​​

v4 v7包的使用

compile 'com.android.support:appcompat-v7:23.1.1' //必须要导入他才能使用v7包下面的控件
compile 'com.android.support:cardview-v7:23.0.0' //v7包下面的控件
compile 'com.android.support:recyclerview-v7:23.0.0'//v7包下面的控件


gradle引用appcompat-v7包的时候就不需要引用v4了,因为v7里默认包含了v4包; 
compile ‘com.android.support:appcompat-v7:21.0.3’ 中的21代表API level 21推出的兼容包,所以如果你引用的是21之前的版本,则默认这些Theme.AppCompat.Light是Holo风格的,从21开始的版本默认是Material风格 
使用appcompat之后,你的所有的Activity应该继承自ActionBarActivity,而ActionBarActivity继承自FragmentActivity,所以放心的使用Fragment;

Android Gradle的理解

综述:

Android Gradle Plugin 本质上就是 一个AS的插件,它一边调用 Gradle本身的代码和批处理工具来构建项目,一边调用Android SDK的编译、打包功能,从而让我们能够顺畅地在AS上进行开发。

Gradle其实就是一个构建项目的工具,也就是把那一个个文件、文件夹按照一定的规则关联起来,形成一个项目的工具,它其实不仅仅是用在AndroidStudio上。

我们在AS中用到的Gradle其实应该被叫做 Android Gradle Plugin,也就是安卓项目上的gradle插件;
Gradle插件会有版本号,每个版本号又对应有一个或一些 Gradle发行版本(一般是限定一个最低版本),也就是我们常见的类似gradle-3.1-all.zip这种东西;

如果这两个版本对应不上了,那你的工程构建的时候就会报错。

版本号对应Gradle发行版本

插件版本

Gradle版本

1.0.0 - 1.1.3

2.2.1 - 2.3

1.2.0 - 1.3.1

2.2.1 - 2.9

1.5.0

2.2.1 - 2.13

2.0.0 - 2.1.2

2.10 - 2.13

2.1.3 - 2.2.3

2.14.1+

2.3.0+

3.3+

3.0.0+

4.1+

Android Studio 3.0 之后自动将插件版本升级到3.0.0,所以我们也需要对应地把Gradle升级到4.1才行

另外, Android Gradle Plugin又会跟 Android SDK BuildTool有关联,因为它还承接着AndroidStudio里的编译相关的功能

这也是我们要在项目的 local.properties 文件里写明Android SDK路径、在build.gradle 里注明 buildToolsVersion 的原因。

所以 Android Gradle Plugin 本质上就是 一个AS的插件,它一边调用 Gradle本身的代码和批处理工具来构建项目,一边调用Android SDK的编译、打包功能,从而让我们能够顺畅地在AS上进行开发。

升级Android Gradle Plugin到3.0.1的踩坑之旅

按照提示,解决方案大致有两个:

  1. 要么我们需要在依赖于注解的module中,加上“annotationProcessor”这个配置;
    要么我们可以设置android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true,但是要注意这玩法以后会被删除
    按照官方推荐的第一种方法:应该是在报错的build.gradle中修改:

//加上类似这些对于注解处理器的的依赖
annotationProcessor 'com.xxxx.xxxxx-1.0.0'

但是我加上了并没有什么作用,原因待查..
为了节约时间,还是先用includeCompileClasspath=true的办法凑合下吧,以后真的被删除了再说...

直接在app/build.gradle(准确的说是每个涉及到注解依赖的module的build.gradle)上加一行

1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath = true //加上这行即可
javaCompileOptions {

annotationProcessorOptions {

includeCompileClasspath = true //加上这行即可

}

}


  1. 然后再次同步gradle
  2. 同步gradle,不出意外的又报错了。
    一堆的style属性未找到的问题,跟第六步里的现象貌似是一样的

Error:(713, 5) error: style attribute '@android:attr/windowExitAnimation' not found.
Error:(713, 5) error: style attribute '@android:attr/windowExitAnimation' not found.
Error:(713, 5) error: style attribute '@android:attr/windowExitAnimation' not found.

这才发现其实clean是没有用的,真正的问题原因在一堆错误的最后几行

Error:java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for
com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for

AAPT2 , 貌似就是aapt的2.0版本?
aapt.exe 是 Android SDK里的一个工具
直接说解决方案:
在Project/gradle.properties中添加 android.enableAapt2=false
再次同步...

  1. 嗯,没错,又报错了。

Error:(247, 1) Execution failed for task ':app:processMarketDebugManifest'.
Manifest Tasks does not support the manifestOutputFile property any more, please use the manifestOutputDirectory instead.
For more information, please check https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html

这个错跟7号有点类似,又是新版本gradle插件不支持某些方法啦,又要换用新的写法才行啦...然后最后给你贴一个文档地址自己看去。。
大概就是说:现在不支持manifestOutputFile这个方法,要用processManifest.manifestOutputDirectory()来替换

也就是你app/build.gradle 打包的这一段代码要重新写一下;一般我们都会在build.gradle中编写这样的代码,来实现对Manifest文件的修改、以及自定义apk的输出文件名等。

manifestFile = output.processManifest.manifestOutputFile;   //这里被废弃导致报错
def apkFileName = "_myapp_${android.defaultConfig.versionCode}_${formatedDate}.apk";

  1. 反正就是各种各样的groovy语法报错,然而并不懂groovy语法,现学现卖改一改
    我们工程里是既有动态修改manifest文件的需求,也有自定义apk名字的功能,
    包括自动修改apk名称的代码也有报错,也要改,最终改成了这样

groovy语法:www.jianshu.com/p/ae97aad05…


举报

相关推荐

0 条评论