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

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

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

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

【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 之 将RAW资源文件写入SD卡工具类
  2. android studio 3.0 di 注入插件引入错误
  3. Android 上传文件[转]
  4. 挂载android只读文件系统为可读写
  5. android proguard 错误处理
  6. ubuntu 16.04 编译 android 6.0 错误
  7. android 之 读取本地json文件返回string
  8. 解决Cocos2d-x3.1编译生成Android程序出现Android NDK:Aborting.
  9. android中利用pull解析xml文件

随机推荐

  1. Android中的五大布局和logcat打印日志
  2. android带返回按钮的自定义标题栏
  3. Android 开发 Tip 6 -- Spinner 文字 & i
  4. android如何在xml中引用内部类
  5. android软引用
  6. android SQLiteOpenHelper详解
  7. Android之Socket的基于UDP传输
  8. android 项目导入错误解决方法收集
  9. Android 应用更换applicationId
  10. Android开发 finished with non-zero exi