组件化之 compile
每个module的联合编译以及依赖库的使用,由以前的compile变成了implementation,但是好像并不是这样啊。
这篇文章:Android 彻底组件化番外篇-gradle3.0.0 有很详细的说明,取核心:
“ 首先 compile 被废弃了,而是分成了两个:implementation 和 api,其中 api 与之前的 compile 功能基本一致,不再赘述;implementation 就比较高级了,其作用就是,使用 implementation 添加的依赖不会再编译期间被其他组件引用到,但在运行期间是完全可见的。这也是一种代码隔离。举个例子,
组件A依赖lib1,既A implementation lib1
组件B依赖组件A,既B api A ”
简单描述写我的问题,插件级别的比如
apply plugin: 'kotlin-android-extensions'
需要每个有使用该插件的module配置,代码层面的比如:
api 'com.android.support:appcompat-v7:26.1.0'
只需要配置在BaseLib中,但是需要将implementation换成api,这样其他module才可共用。
java.lang.NoSuchMethodError: No static method getFont
解决方案就是把你的编译sdk升下,26变27,资源库什么的也换成27,莫名其妙的明明前一秒都可以用,后来发现真不是就我才这样
比如:https://blog.csdn.net/haha223545/article/details/78728980
kotlin findviewbyid报错: type inference failed: Not enough information to infer parameter T in…
代码里我是这样写的:
val height = mRootView.findViewById(R.id.mPopView).top
后来查阅了一些资料,改了下,成了这样:
val relativeLayout: RelativeLayout = mRootView.findViewById(R.id.mPopView) val height = relativeLayout.top
实在话,这不是多此一举?然后再仔细看了看,这样就行了
val height = mRootView.findViewById<RelativeLayout>(R.id.mPopView).top
原因可想而知了,View的具体实现类太多,无法确定实例化对象,给传入类型就好了
编译时错误:找不到javax.annotation.Nullable的问题
这个问题出现在我对旧项目的组件化改造中,应该是存在某个自定义控件之中,当然我也不是第一个遇到的,网上很容易就找到了解决办法,加入一个具有该注解类的依赖即可
api "com.google.code.findbugs:jsr305:3.0.2"
同步一下就ok
Style.xml异常 cannot resolve symbol “Theme”
这个是AS3.1的bug,在file选项中close project,然后在主界面 用open existing project选择项目路径后打开即可
Can not perform this action after onSaveInstanceState with xxxxFragment
ft.commit()替换为ft.commitAllowingStateLoss()
参见:https://blog.csdn.net/chenshufei2/article/details/48747149
ARouter There is no route match the path [/xxx/xxx], in group [xxx][ ]
其实一般都是配置问题,基本使用仔细查阅官方文档,
一般情况取前面两组即可,以kotlin开发为例
每个需要使用得对应模块下得build.gradle文件都需要添加以下内容,
//必须添加 apply plugin: 'kotlin-kapt' //必须添加 kapt { arguments { arg("moduleName", project.getName()) } } android { //忽略 } dependencies { //... //必须添加 kapt "com.alibaba:arouter-compiler:${arouter_version}" }
上面是每个模块都需要的,但是arouter-api只需要配置在BaseLib模块中即可
api "com.alibaba:arouter-api:1.3.1"
基本使用,需要跳转的activity上加上注解
@Route(path = RouterPath.UserCenter.PATH_LOGIN)//这里实际上是:"/userCenter/login" class LoginActivity : BaseActivity<LoginPresenter>(),LoginContract.LoginView {}
需要跳转的地方:
ARouter.getInstance().build(RouterPath.UserCenter.PATH_LOGIN).navigation()
以上,简单使用完毕。
待续。。。
本站由以下主机服务商提供服务支持:
0条评论