androidx点击按钮跳出日历控件_体验一下:AndroidX

  • 背景

今天在更新 ButterKnife 到最新版本的时候出现了一个问题,我引入的是 10.1.0 最新版本:

 implementation 'com.jakewharton:butterknife:10.1.0' annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'

在我更新后它报了一个错误:

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).Suggestion: add 'tools:replace="android:appComponentFactory"' to  element at AndroidManifest.xml:5:5-19:19 to override.

解决错误

对于这个问题,它也给出了提示,建议你在 AndroidManifest.xml 文件中直接加入 tools:replace="android:appComponentFactory"

但是添加了上面代码之后呢,又给你报了一个错误:

Manifest merger failed with multiple errors, see logs

于是搜索了一下,光有这一行代码还不够,必须还要添加一行,代码如下:

android:appComponentFactory="jasfljapsjpasf" ,这里填入任意字符串即可。

然后又报了这个错误,提示你说 api 的等级必须要在24及以上

Error: Static interface methods are only supported starting with Android N (--min-api 24): void butterknife.Unbinder.lambda$static$0()

所以你将 api 更改到 24 即可,操作位置如下图:

62dc3efc132f519483d842ddfc4af891.png

然后再 sync 一下、或者 rebuild 一下项目就不会报错了。

更大的坑

你以为这样就可以运行了吗?不可能!

比如你在 Activity 中绑定控件的时候,又会报错:

Error: Invoke-customs are only supported starting with Android O (--min-api 26)

这个简单,好吧,我就把 api 改到 26 吧,然后在 sync 一下,它又给来了一个错误:

More than one file was found with OS independent path 'META-INF/androidx.core_core.version'

这个错误说你的 META-INF 目录下没有 androidx.core_core.version 这个东西,这个是什么东西?没见过啊,在下文我会再介绍这个 androidx,现在要紧的是解决这个问题,搜索了一下,只需在 gradle.properties 文件中加入两行代码即可:

android.useAndroidX=trueandroid.enableJetifier=true

具体位置是在 gradle.properties ,如图:

91a695f32b25af7d207dcf53610a0791.png

然后在 sync 一下,这样没有任何错误了。然后在 activity 中会报 :

import android.support.v7.app.AppCompatActivity; 不存在的问题,这时候你需要将这个 v7 包给移除,它会重新加入一个新的包,是 androidx 的包,如下:

import androidx.appcompat.app.AppCompatActivity;

那我就测试一下能否绑定 button 点击事件吧,不幸的是这里报了一个更大的错误:

java.lang.BootstrapMethodError: Exception from call site #1 bootstrap methodat butterknife.internal.DebouncingOnClickListener.(DebouncingOnClickListener.java:12)at com.xww.myapplication2.MainActivity_ViewBinding.(MainActivity_ViewBinding.java:34)at java.lang.reflect.Constructor.newInstance0(Native Method)at java.lang.reflect.Constructor.newInstance(Constructor.java:343)at butterknife.ButterKnife.bind(ButterKnife.java:170)at butterknife.ButterKnife.bind(ButterKnife.java:99)at com.xww.myapplication2.MainActivity.onCreate(MainActivity.java:27)at android.app.Activity.performCreate(Activity.java:7136)at android.app.Activity.performCreate(Activity.java:7127)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loop(Looper.java:193)at android.app.ActivityThread.main(ActivityThread.java:6669)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

原因是:Caused by: java.lang.ClassCastException: Bootstrap method returned null

看我们在 Activity 中绑定事件的代码:

 @OnClick(R.id.btn) void onShow() { Toast.makeText(this, "ddd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值