Reputation:
My application works fine from Android 4.3 until Android 9 Pie, but my application doesn't work on Android 10 (Q API 29) and crashes. This is my logcat - why this is happening?
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
and this is my 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>
update
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' }
Upvotes: 96
Views: 29137
Reputation: 1927
Please follow 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));
}
Upvotes: 20
Reputation: 1009
This dependency implementation 'com.ice.restring:restring:1.0.0'
also causes this crash if targetSdkVersion equals to 29 or higher,
so if you have this dependency (implementation 'com.ice.restring:restring:1.0.0'
) in your gradle you can solve this problem by removing it or using another lib that work with targetSdkVersion 29
Upvotes: 2
Reputation: 795
You need to update calligraphy version and change code according to new version
You need to change repository in dependencies from
implementation "uk.co.chrisjenx:calligraphy:$caligraphyVersion"
to
implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'
You need to change usage of import from
import uk.co.chrisjenx.calligraphy.CalligraphyConfig;
to
import io.github.inflationx.calligraphy3.CalligraphyConfig;
Calligraphy config from
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath(getResources().getString(R.string.bariol))
.setFontAttrId(R.attr.fontPath)
.build()))
.build());
to
ViewPump.init(ViewPump.builder()
.addInterceptor(new CalligraphyInterceptor(
new CalligraphyConfig.Builder()
.setDefaultFontPath(getResources().getString(R.string.bariol))
.setFontAttrId(R.attr.fontPath)
.build()))
.build());
I used font bariol you can change it to yours.
& newbase to
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
Upvotes: 67
Reputation: 138
Update your calligraphy import in your build.gradle(:app) file with this below
implementation 'io.github.inflationx:viewpump:2.0.3'
implementation 'io.github.inflationx:calligraphy3:3.1.1'
and use ViewPumpContextWrapper instead of CalligraphyContextWrapper
Upvotes: 1
Reputation: 5734
Migrate from chrisjenx/Calligraphy
to InflationX/Calligraphy
and update Calligraphy
to newest version
Upvotes: 4
Reputation: 7220
if you are using calligraphy so you should migrate to calligraphy3 : https://github.com/InflationX/Calligraphy
implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'
Upvotes: 8
Reputation: 11
When faced with this issue, just update the calligraphy and viewpump in your app gradle to the latest version. Presently, the current version is: implementation 'io.github.inflationx:calligraphy3:3.1.1' implementation 'io.github.inflationx:viewpump:2.0.3'
Upvotes: 1
Reputation: 3527
Update Calligraphy
to newest version to solve this problem:
Link: https://github.com/InflationX/Calligraphy/issues/35
More specifically, both Calligraphy and ViewPump need to be updated:
implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'
Migrating from Calligraphy 2 to 3 requires some code changes; see examples in Calligraphy 3 README.
Upvotes: 138
Reputation: 2299
You can change buildTools version and sdk version from 29 to 28
targetSdk = 28
compileSdk = 28
buildTools = '28.0.3'
Upvotes: 2
Reputation: 634
Definitively your problem is the Calligraphy library, I've got the same problem and there are 2 ways to solve it:
About the exception:
The exception error in Calligraphy comes from the use of the reflection in the library. See the last line of this exception:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example, PID: 8220
android.view.InflateException: Binary XML file line #17 in com.example:layout/abc_screen_simple: Binary XML file line #17 in com.example/abc_screen_simple: Error inflating class androidx.appcompat.widget.FitWindowsLinearLayout
Caused by: android.view.InflateException: Binary XML file line #17 in com.example/abc_screen_simple: Error inflating class androidx.appcompat.widget.FitWindowsLinearLayout
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.lang.reflect.Field.get(java.lang.Object)' on a null object reference
Android in your documentation explain that some reflection methods (non-SDK interfaces) are restricted in the API 29 platform.
Reflection via Class.getDeclaredField() or Class.getField() --------> NoSuchFieldException thrown
Reflection via Class.getDeclaredMethod(), Class.getMethod() ----> NoSuchMethodException thrown.
Reflection via Class.getDeclaredFields(), Class.getFields() --------> Non-SDK members not in results.
Reflection via Class.getDeclaredMethods(), Class.getMethods() -> Non-SDK members not in results
Source: Restrictions on non-SDK interfaces
Upvotes: 9