Android Q API崩溃29

时间:2019-06-10 10:46:42

标签: android androidx

我的应用程序在Android 4.3到Android 9 Pie之前都可以正常工作,但是我的应用程序无法在Android 10(Q API 29)上运行并崩溃。这是我的日志-为什么会这样?

java.lang.RuntimeException: Unable to start activity 
     ComponentInfo{ir.mahdi.circulars/ir.mahdi.circulars.MainActivity}: 
     android.view.InflateException: Binary XML file line #17 
     in ir.mahdi.circulars:layout/abc_screen_simple: Binary XML file line #17 
     in ir.mahdi.circulars:layout/abc_screen_simple: 
         Error inflating class androidx.appcompat.widget.FitWindowsLinearLayout

这是我的mainActivity.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:layoutDirection="ltr"
    tools:context=".MainActivity">


</androidx.coordinatorlayout.widget.CoordinatorLayout>

更新

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 29
        multiDexEnabled true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    } }

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' }

11 个答案:

答案 0 :(得分:31)

您需要更新书法版本并根据新版本更改代码

您需要从以下位置更改依赖项中的存储库

implementation "uk.co.chrisjenx:calligraphy:$caligraphyVersion"

implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'

您需要更改导入来源

导入uk.co.chrisjenx.calligraphy.CalligraphyConfig;

导入io.github.inflationx.calligraphy3.CalligraphyConfig;

来自的书法配置

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
               .setDefaultFontPath(getResources().getString(R.string.bariol))
               .setFontAttrId(R.attr.fontPath)
                .build())) 
                .build());

ViewPump.init(ViewPump.builder()
            .addInterceptor(new CalligraphyInterceptor(
                    new CalligraphyConfig.Builder()
                            
            .setDefaultFontPath(getResources().getString(R.string.bariol))
                            .setFontAttrId(R.attr.fontPath)
                            .build()))
            .build());

我用过字体bariol,可以将其更改为您的字体。

&newbase到

super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));

答案 1 :(得分:20)

Calligraphy更新到最新版本以解决此问题: 链接:https://github.com/InflationX/Calligraphy/issues/35

更具体地说,书法 ViewPump都需要更新:

implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'

从书法2迁移到3要求对代码进行一些更改。请参阅Calligraphy 3 README中的示例。

答案 2 :(得分:16)

Please foloow this below steps.
1> First of all check build.gradle(:app) file
2> If you are using  this below library:
implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
3> Update this " implementation 'uk.co.chrisjenx:calligraphy:2.3.0' " library with this below library.
implementation 'io.github.inflationx:viewpump:2.0.3'
implementation 'io.github.inflationx:calligraphy3:3.1.1'
4> In project where You use this below code :
@Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }

5> Update it with this below code:

   @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
    }

答案 3 :(得分:2)

如果您使用书法,则应迁移到书法3: https://github.com/InflationX/Calligraphy

implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'

答案 4 :(得分:1)

根据this answer,您不必使用它。该小部件具有@hide批注,表示到目前为止它已公开使用。因此,您不必使用FitWindowsLinearLayout,而必须使用LinearLayout并为其指定所需的属性。

答案 5 :(得分:1)

此依赖项 [index:] 也会导致此崩溃 if targetSdkVersion 等于 29 ,

因此,如果您的 gradle 中有此依赖项 (implementation 'com.ice.restring:restring:1.0.0'),您可以通过删除它 或使用另一个与 implementation 'com.ice.restring:restring:1.0.0' 一起使用的库

来解决此问题

答案 6 :(得分:0)

您的问题肯定是书法库,我遇到了同样的问题,有两种解决方法:

  1. 返回目标版本28,并等待可能的更新 书法图书馆。 2
  2. 删除资料库

关于例外情况:

书法中的异常错误来自库中反射的使用。请参阅此异常的最后一行:

{{1}}

文档中的Android解释说API 29平台中限制了某些反射方法(非SDK接口)。

  

通过Class.getDeclaredField()或Class.getField()进行反射-------->引发NoSuchFieldException

     

通过Class.getDeclaredMethod(),Class.getMethod()进行反射---->引发NoSuchMethodException。

     

通过Class.getDeclaredFields(),Class.getFields()进行反射-------->非SDK成员不在结果中。

     

通过Class.getDeclaredMethods(),Class.getMethods()->非SDK成员不在结果中进行反映

Source: Restrictions on non-SDK interfaces

答案 7 :(得分:0)

遇到此问题时,只需将应用程序gradle中的书法和Viewpump更新到最新版本。当前,当前版本是:     实现'io.github.inflationx:calligraphy3:3.1.1'     实现'io.github.inflationx:viewpump:2.0.3'

答案 8 :(得分:0)

chrisjenx/Calligraphy迁移 到InflationX/Calligraphy 并将Calligraphy更新到最新版本

答案 9 :(得分:0)

使用以下以下

更新您的 build.gradle(:app)文件中的书法导入

实现'io.github.inflationx:viewpump:2.0.3'

实现'io.github.inflationx:calligraphy3:3.1.1'

并使用 ViewPumpContextWrapper 代替 CalligraphyContextWrapper

答案 10 :(得分:-1)

您必须将buildTools版本和sdk版本从29更改为28

    targetSdk = 28
    compileSdk = 28
    buildTools = '28.0.3'