-----------------------------------------------------------------------------------------------------

迁移主原文:https://blog.csdn.net/dandelionela/article/details/102976961      # 【AS-AndroidX】AndroidX的迁移 #

-----------------------------------------------------------------------------------------------------

问题1:使用自动迁移时报错

那么就需要去每一个报错的类里面,参照类对照表,逐一把未替换的support类及自动替换错的类修正成AndroidX的类

需要注意的是,IDE的build日志只输出100个错误,虽然写的是100个,其实后边还有很多。改完这100还有下一个100,加油!

 

问题2:百度地图SDK

报错:java.lang.UnsatisfiedLinkError: No implementation found for int com.baidu.mapsdkplatform.comjni.tools.JNITools.initClass

2019-11-12 11:55:59.209 23040-23040/? E/libc: Access denied finding property "ro.vendor.df.effect.conflict"2019-11-12 11:55:59.223 23040-23040/? E/NativeLoader: found libBaiduMapSDK_base_v5_4_4.so error2019-11-12 11:55:59.223 23040-23040/? E/.***.****: No implementation found for int com.baidu.mapsdkplatform.comjni.tools.JNITools.initClass(java.lang.Object, int) (tried Java_com_baidu_mapsdkplatform_comjni_tools_JNITools_initClass and Java_com_baidu_mapsdkplatform_comjni_tools_JNITools_initClass__Ljava_lang_Object_2I)2019-11-12 11:55:59.224 23040-23040/? E/AndroidRuntime: FATAL EXCEPTION: main    Process: com.*****.***.******, PID: 23040    java.lang.UnsatisfiedLinkError: No implementation found for int com.baidu.mapsdkplatform.comjni.tools.JNITools.initClass(java.lang.Object, int) (tried Java_com_baidu_mapsdkplatform_comjni_tools_JNITools_initClass and Java_com_baidu_mapsdkplatform_comjni_tools_JNITools_initClass__Ljava_lang_Object_2I)        at com.baidu.mapsdkplatform.comjni.tools.JNITools.initClass(Native Method)        at com.baidu.mapsdkplatform.comjni.tools.a.b(Unknown Source:6)        at com.baidu.mapsdkplatform.comapi.a.(Unknown Source:23)        at com.baidu.mapsdkplatform.comapi.a.a(Unknown Source:0)        at com.baidu.mapsdkplatform.comapi.c.a(Unknown Source:17)        at com.baidu.mapapi.SDKInitializer.initialize(Unknown Source:2)        at com.dandelionela.metro.elametro.MetroApplication.initializeBaiduMap(MyApplication.java:61)        at com.dandelionela.metro.elametro.MetroApplication.onCreate(MyApplication.java:53)        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1183)...

第一步尝试去百度地图官方API文档找些资料,没有找到,所以就先升级了一下百度地图到V6.0.0仍然报错。

于是将jniLibs文件夹下的ndk支持库从单独的【armeabi-v7a】改为单独的【arm64-v8a】发现报错消失。

很奇怪,在升级AndroidX之前同一手机使用armeabi-v7a可以正常使用,升级完AndroidX之后,就不行了。也是奇怪。

 

问题3:

2019-11-12 13:43:19.118 27256-27256/com.***.*** E/libc: Access denied finding property "ro.vendor.df.effect.conflict"2019-11-12 13:43:19.136 27256-27295/com.***.*** E/Perf: Fail to get file list lib2019-11-12 13:43:19.136 27256-27295/com.***.*** E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array2019-11-12 13:43:19.137 27256-27295/com.***.*** E/Perf: Fail to get file list ***.***.***.***2019-11-12 13:43:19.137 27256-27295/com.***.*** E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array2019-11-12 13:43:19.216 27256-27256/? E/AndroidRuntime: FATAL EXCEPTION: main    Process: com.***.***, PID: 27256    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.***.***/com.***.***.activity.WelcomeActivity}: android.view.InflateException: Binary XML file line #2 in com.***.***:layout/activity_welcome: Binary XML file line #2 in com.***.***/activity_welcome: Error inflating class androidx.constraintlayout.ConstraintLayout        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3304)        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3443)        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2040)        at android.os.Handler.dispatchMessage(Handler.java:107)        at android.os.Looper.loop(Looper.java:223)        at android.app.ActivityThread.main(ActivityThread.java:7520)        at java.lang.reflect.Method.invoke(Native Method)        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)     Caused by: android.view.InflateException: Binary XML file line #2 in com.***.***:layout/activity_welcome: Binary XML file line #2 in com.***.***:layout/activity_welcome: Error inflating class androidx.constraintlayout.ConstraintLayout     Caused by: android.view.InflateException: Binary XML file line #2 in com.***.***:layout/activity_welcome: Error inflating class androidx.constraintlayout.ConstraintLayout     Caused by: java.lang.ClassNotFoundException: androidx.constraintlayout.ConstraintLayout        at java.lang.Class.classForName(Native Method)        at java.lang.Class.forName(Class.java:454)        at android.view.LayoutInflater.createView(LayoutInflater.java:819)        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010)        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)        at android.view.LayoutInflater.inflate(LayoutInflater.java:663)        at android.view.LayoutInflater.inflate(LayoutInflater.java:538)        at android.view.LayoutInflater.inflate(LayoutInflater.java:481)        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)        at com.***.***.activity.WelcomeActivity.onCreate(WelcomeActivity.java:31)        at android.app.Activity.performCreate(Activity.java:7894)        at android.app.Activity.performCreate(Activity.java:7881)

突然找到了问题的关键所在:

androidx.constraintlayout.ConstraintLayout

这个类路径有误!这是由IDE自动转化为AndroidX的时候自动生成的。显然是错误的。我们只改了Java文件中的导包错误,却忽略了XML文件中的类的错误。

打开看一下源码:

<?xml version="1.0" encoding="utf-8"?>    

果然是ConstraintLayout标签的包名不对。按照对照表,把错误的【androidx.constraintlayout.ConstraintLayout】修改为【androidx.constraintlayout.widget.ConstraintLayout】

然后全局检索一下错误的AndroidX替换,改为正确的AndroidX替换。几十处,擦。。。。。

同样的问题还发生在其他IDE导包错误的地方:

Caused by: java.lang.ClassNotFoundException: android.support.design.widget.TabLayoutCaused by: java.lang.ClassNotFoundException: androidx.core.view.ViewPagerCaused by: java.lang.ClassNotFoundException: android.support.v7.widget.RecyclerViewCaused by: java.lang.ClassNotFoundException: android.support.design.widget.FloatingActionButtonCaused by: java.lang.ClassNotFoundException: android.support.v4.widget.SwipeRefreshLayoutCaused by: java.lang.ClassNotFoundException: androidx.core.widget.SwipeRefreshLayoutCaused by: java.lang.ClassNotFoundException: androidx.core.widget.DrawerLayoutCaused by: java.lang.ClassNotFoundException: android.support.design.widget.CoordinatorLayoutCaused by: java.lang.ClassNotFoundException: android.support.design.widget.AppBarLayoutCaused by: java.lang.ClassNotFoundException: android.support.design.widget.NavigationViewCaused by: java.lang.ClassNotFoundException: android.support.constraint.Guideline

XML布局文件中需要修改的常用控件:

Support Library Class AndroidX Class
android.support.constraint.ConstraintLayout androidx.constraintlayout.widget.ConstraintLayout
android.support.design.widget.FloatingActionButton com.google.android.material.floatingactionbutton.FloatingActionButton
android.support.design.widget.AppBarLayout com.google.android.material.appbar.AppBarLayout
android.support.v7.widget.RecyclerView androidx.recyclerview.widget.RecyclerView
android.support.design.widget.CoordinatorLayout androidx.coordinatorlayout.widget.CoordinatorLayout
android.support.v7.widget.Toolbar androidx.appcompat.widget.Toolbar
android.support.v4.widget.SwipeRefreshLayout androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android.support.design.widget.TabLayout com.google.android.material.tabs.TabLayout
android.support.v4.view.ViewPager androidx.viewpager.widget.ViewPager
android.support.v4.widget.DrawerLayout androidx.drawerlayout.widget.DrawerLayout
android.support.design.widget.NavigationView com.google.android.material.navigation.NavigationView
android.support.v7.widget.SwitchCompat androidx.appcompat.widget.SwitchCompat
android.support.design.widget.CollapsingToolbarLayout com.google.android.material.appbar.CollapsingToolbarLayout
android.support.v7.widget.CardView androidx.cardview.widget.CardView

容易被Android Studio 识别错误的控件:

Wrong AndroidX Class by IDE Correct AndroidX Class
androidx.constraintlayout.ConstraintLayout androidx.constraintlayout.widget.ConstraintLayout
androidx.core.widget.SwipeRefreshLayout androidx.swiperefreshlayout.widget.SwipeRefreshLayout
androidx.core.view.ViewPager androidx.viewpager.widget.ViewPager
androidx.core.widget.DrawerLayout androidx.drawerlayout.widget.DrawerLayout

 

更多相关文章

  1. Android(安卓)关于显示键盘,布局错乱网上顶的问题
  2. TextView 设置 Ellipsize 属性,但它不工作?
  3. 升级android studio3.0遇到的问题
  4. 关于android的audiotrack播放声音断断续续的问题
  5. android proguard 错误处理
  6. ubuntu 16.04 编译 android 6.0 错误
  7. android studio 3.0 di 注入插件引入错误
  8. android 如何去掉状态栏和标题栏
  9. Android(安卓)sdcard 权限问题

随机推荐

  1. Android(安卓)使用XML自定义菜单
  2. Android(安卓)Matrix图像变换处理
  3. Android(安卓)apk动态加载机制的研究(二):资
  4. Android(安卓)手把手带你玩转自定义相机
  5. MMKV学习(三)Android使用
  6. Android数据持久化,你还不会?
  7. 魅族-魅蓝note无法链接adb解决办法
  8. Android中的消息通知(NotificationManager
  9. Android接入微信H5支付及与Js交互
  10. Android中如何取消listview的点击效果