Android组件化aar躺坑记:ButterKnife 报 元素值必须为常量表达式错误
背景:
项目有需求,将自己写的模块作为一个module给到大项目使用,所以准备把自己的项目打包成aar包。
一、如何将独立项目打包成aar:
1、修改module下的application 为library:
——>
2、修改Manifest.xml文件如下:
删掉下面这些以及apk入口:


3、修改代码中的switch语句为if语句。
4、如果代码有配混淆的话,参考下面注释掉该属性。

5、双击下面截图中的assembleDebug即可执行打包过程。(如果项目里有集成ButterKnife的话,理论上讲会报错,解决可以参考该博客第二部分。)

但是,坑爹的是,由于使用了ButterKnife(版本:8.8.1)插件,导致构建的时候一直报如下错误(截图来自网络,自己报错的截图忘记截了。)

然后各种百度,但是找到的都是17年的比较老的,没法使用,故写下自己躺坑的过程。
二、Buttknife报错处理:
1、在项目gradle文件里加入如下:(版本号8.4.0、8.5.0、8.5.1都可以)
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'

2、在module里gradle里添加如下即可:
apply plugin: 'com.jakewharton.butterknife'

3、将应用的BindView这里的 R 都换成 R2,只在注解这里这样换,其他地方不要换:

4、先Sync一下项目,然后rebuild 多次。
重点(亲测有效):记得rebuild一两次之后找到报错的类,点进去,随便找个报错的行,然后手动删除R2,再输一次R2,然后发现这个类不报错了。(无意中发现的。)
Android组件化aar躺坑记:ButterKnife 报 元素值必须为常量表达式错误的更多相关文章
- android studio 2.32躺坑记
按说这是没啥记录意义的.不过作为一个偶尔用一下ADT开发安卓程序的跨界老码农,遇到一个尴尬事,现在手机已经用上安卓6了,而电脑里的ADT里SDK还是18,19.越来越多的项目是android stud ...
- Android组件化demo实现以及遇坑分享
首先贴出demo的github地址:GitHub - TenzLiu/TenzModuleDemo: android组件化demo 作者:TenzLiu原文链接:https://www.jianshu ...
- Android组件化框架设计与实践
在目前移动互联网时代,每个 APP 就是流量入口,与过去 PC Web 浏览器时代不同的是,APP 的体验与迭代速度影响着用户的粘性,这同时也对从事移动开发人员提出更高要求,进而移动端框架也层出不穷. ...
- 教你打造一个Android组件化开发框架
*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 CC:Component Caller,一个android组件化开发框架, 已开源,github地址:https://github ...
- Android 组件化最佳实践 ARetrofit 原理
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/TXFt7ymgQXLJyBOJL8F6xg作者:朱壹飞 ARetrofit 是一款针对Android ...
- Android组件化
附:Android组件化和插件化开发 App组件化与业务拆分那些事 Android项目架构之业务组件化 Android组件化核心之路由实现 Android组件化开发实践
- Android 组件化/模块化之路——在展示层搭建MVP结构
Android 组件化/模块化之路——在展示层搭建MVP结构 什么是MVP Model–View–Presenter (MVP) 源于 Model–View–Controller (MVC) 的结构设 ...
- 我所理解的Android组件化之通信机制
之前写过一篇关于Android组件化的文章,<Android组件化框架设计与实践>,之前没看过的小伙伴可以先点击阅读.那篇文章是从实战中进行总结得来,是公司的一个真实项目进行组件化架构改造 ...
- Gradle自动实现Android组件化模块构建
背景 随着App的不断迭代,业务会变得越来越复杂,业务模块会越来越多,且每个模块的代码也会变得越来越多.为了应对这一场景,我们需要把不同的业务模块划分成一个个组件,在修改业务代码的时候只需要在对应模块 ...
随机推荐
- 【坑】js语法中一些小细节 不注意也出坑 随笔记下 留待后查
1.switch case内 区分数字 与 字符 ',bl; switch(+lv){ :bl = 1.7;break; :bl = 1.55;break; :bl = 1.4;break; ; } ...
- 使用VSCode开发Flutter
前言 为什么使用VSCode? flutter官方推荐的编辑器有IDEA/Android Studio和VSCode, 之前开发Flutter用的IDEA, 不过IDEA始终比较重,于是换用VSCod ...
- Docker Quick Start
翻译自官方Quick Start: https://hub.docker.com/?overlay=onboarding 以Windows为例 1.下载源码 下载构建第一个容器的所需要的所有的东西 需 ...
- LeetCode 531. Lonely Pixel I
原题链接在这里:https://leetcode.com/problems/lonely-pixel-i/ 题目: Given a picture consisting of black and wh ...
- [图形计算器]Desmos
一.图形计算器 var elt = document.getElementById('calculator'); var calculator = Desmos.GraphingCalculator( ...
- ModuleNotFoundError: No module named 'rest_framework_swagger'
pip3.6 install django-rest-swagger
- 拦截RestTemplate的请求
RestTemplate一般用于方法内部请求调用,请求报错时难以调试,所以可以为RestTemplate加拦截器进行调试,具体操作如下: 拦截器LoggingClientHttpRequestInte ...
- js函数如何传递多个参数
应用场景: 需要根据多个参数来判断该数据所属,从而达到删除或者修改的目的. 比如删除区域下的分组,一个区域可以用多个分组,不同的区域可以有相同的分组,那么如何识别对应的分组呢??? 可以在对应的数据操 ...
- SpringCache
官方文档:https://docs.spring.io/spring/docs/4.3.13.RELEASE/spring-framework-reference/htmlsingle/#cache ...
- [技术博客]windows中使用docker技术
背景 我们的工程使用了一个叫做termux的安卓上的linux终端,这个终端在所有的软件包里硬编码了软件的运行路径(/data/data/com.termux/..),由于安卓系统的权限设计,我们名为 ...