«Переопределить функцию attachBaseContext» не работает - PullRequest
0 голосов
/ 24 февраля 2020
Android Studio: 3.5.3
(app/build.gradle)

defaultConfig {
    applicationId "com.example.androiduberclone"
    minSdkVersion 25
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

я изучаю создание приложения, например uber.
Youtube: https://www.youtube.com/watch?v=DvFPQBHfGzs&t=1145s

, но этот mov ie загружен в 2017 году.
19:05 позиция об этом mov ie. это настраиваемая настройка шрифта.

step1: загрузка и сохранение шрифта в порядке.
enter image description here

step2: зависимости «Каллиграфия» в порядке.

(app/build.gradle)

dependencies {
    ...

    // Add library
    implementation 'com.google.firebase:firebase-auth:19.2.0'
    implementation 'com.google.firebase:firebase-database:19.2.1'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.rengwuxian.materialedittext:library:2.1.4'
    implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
}

step3: кодирование в MainActivity

package com.example.androiduberclone

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import uk.co.chrisjenx.calligraphy.CalligraphyConfig
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper

class MainActivity : AppCompatActivity() {

+    override fun attachBaseContext(newBase: Context?) {
+        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase))
+    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

+        // Before setContentView
+        CalligraphyConfig.initDefault(CalligraphyConfig.Builder()
+            .setDefaultFontPath("fonts/Arkhip_font.ttf")
+            .setFontAttrId(R.attr.fontPath)
+            .build())

        setContentView(R.layout.activity_main)
    }
}

без сообщения об ошибке:

2020/02/24
16:27   Task running: [:app:assembleDebug] in project C:\Users\yoshi\AndroidStudioProjects\AndroidUberClone
16:27   Gradle build finished 9s14ms
16:27   Install successfully finished in 735 ms.

, но приложение остановлено:
enter image description here

step4: если attachBaseContext выключен.

package com.example.androiduberclone

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import uk.co.chrisjenx.calligraphy.CalligraphyConfig
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper

class MainActivity : AppCompatActivity() {

//    override fun attachBaseContext(newBase: Context?) {
//        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase))
//    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Before setContentView
        CalligraphyConfig.initDefault(CalligraphyConfig.Builder()
            .setDefaultFontPath("fonts/Arkhip_font.ttf")
            .setFontAttrId(R.attr.fontPath)
            .build())

        setContentView(R.layout.activity_main)
    }
}

все в порядке:)
зачем заморозить это.
enter image description here

Logcat:

2020-02-24 17:35:52.835 9774-9774/? I/ndroiduberclon: Not late-enabling -Xcheck:jni (already on)
2020-02-24 17:35:52.851 9774-9774/? E/ndroiduberclon: Unknown bits set in runtime_flags: 0x8000
2020-02-24 17:35:52.851 9774-9774/? W/ndroiduberclon: Unexpected CPU variant for X86 using defaults: x86
2020-02-24 17:35:52.993 9774-9774/com.example.androiduberclone V/FA: Registered activity lifecycle callback
2020-02-24 17:35:53.019 9774-9774/com.example.androiduberclone I/FirebaseInitProvider: FirebaseApp initialization successful
2020-02-24 17:35:53.022 9774-9813/com.example.androiduberclone W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
2020-02-24 17:35:53.048 9774-9821/com.example.androiduberclone W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
2020-02-24 17:35:53.057 9774-9774/com.example.androiduberclone V/FA: onActivityCreated
2020-02-24 17:35:53.066 9774-9774/com.example.androiduberclone W/ndroiduberclon: Accessing hidden field Landroid/view/LayoutInflater;->mConstructorArgs:[Ljava/lang/Object; (greylist-max-p, reflection, denied)
2020-02-24 17:35:53.067 9774-9774/com.example.androiduberclone D/AndroidRuntime: Shutting down VM


    --------- beginning of crash
2020-02-24 17:35:53.069 9774-9774/com.example.androiduberclone E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.androiduberclone, PID: 9774
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androiduberclone/com.example.androiduberclone.MainActivity}: android.view.InflateException: Binary XML file line #17 in com.example.androiduberclone:layout/abc_screen_simple: Binary XML file line #17 in com.example.androiduberclone:layout/abc_screen_simple: Error inflating class androidx.appcompat.widget.FitWindowsLinearLayout
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        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:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: android.view.InflateException: Binary XML file line #17 in com.example.androiduberclone:layout/abc_screen_simple: Binary XML file line #17 in com.example.androiduberclone:layout/abc_screen_simple: Error inflating class androidx.appcompat.widget.FitWindowsLinearLayout
     Caused by: android.view.InflateException: Binary XML file line #17 in com.example.androiduberclone:layout/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
        at uk.co.chrisjenx.calligraphy.ReflectionUtils.getValue(ReflectionUtils.java:29)
        at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(CalligraphyLayoutInflater.java:203)
        at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(CalligraphyLayoutInflater.java:20)
        at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(CalligraphyLayoutInflater.java:302)
        at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:239)
        at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1069)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:997)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:659)
        at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
        at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:773)
        at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:659)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:552)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
        at com.example.androiduberclone.MainActivity.onCreate(MainActivity.kt:24)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
2020-02-24 17:35:53.070 9774-9774/com.example.androiduberclone E/AndroidRuntime:     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:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2020-02-24 17:35:53.075 9774-9821/com.example.androiduberclone I/FirebaseAuth: [FirebaseAuth:] Preparing to create service connection to gms implementation
2020-02-24 17:35:53.233 9774-9812/com.example.androiduberclone V/FA: App measurement collection enabled
2020-02-24 17:35:53.235 9774-9812/com.example.androiduberclone V/FA: App measurement enabled for app package, google app id: com.example.androiduberclone, 1:208567245759:android:b3ec5d12b23ec721f25f0a
2020-02-24 17:35:53.252 9774-9812/com.example.androiduberclone I/FA: App measurement initialized, version: 21028
2020-02-24 17:35:53.252 9774-9812/com.example.androiduberclone I/FA: To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
2020-02-24 17:35:53.252 9774-9812/com.example.androiduberclone I/FA: To enable faster debug mode event logging run:
      adb shell setprop debug.firebase.analytics.app com.example.androiduberclone
2020-02-24 17:35:53.252 9774-9812/com.example.androiduberclone D/FA: Debug-level message logging enabled
2020-02-24 17:35:53.283 9774-9826/com.example.androiduberclone D/libEGL: Emulator has host GPU support, qemu.gles is set to 1.
2020-02-24 17:35:53.284 9774-9826/com.example.androiduberclone W/libc: Unable to set property "qemu.gles" to "1": connection failed; errno=13 (Permission denied)
2020-02-24 17:35:53.280 9774-9774/com.example.androiduberclone W/RenderThread: type=1400 audit(0.0:29): avc: denied { write } for name="property_service" dev="tmpfs" ino=7421 scontext=u:r:untrusted_app:s0:c133,c256,c512,c768 tcontext=u:object_r:property_socket:s0 tclass=sock_file permissive=0 app=com.example.androiduberclone
2020-02-24 17:35:53.289 9774-9826/com.example.androiduberclone D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
2020-02-24 17:35:53.290 9774-9826/com.example.androiduberclone D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
2020-02-24 17:35:53.291 9774-9826/com.example.androiduberclone D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
2020-02-24 17:35:53.448 9774-9812/com.example.androiduberclone V/FA: Connecting to remote service
2020-02-24 17:35:53.530 9774-9812/com.example.androiduberclone V/FA: Connection attempt already in progress
2020-02-24 17:35:57.992 9774-9804/com.example.androiduberclone I/ndroiduberclon: Waiting for a blocking GC ProfileSaver

1 Ответ

0 голосов
/ 24 февраля 2020

Вы можете увидеть androidx.appcompat.app.AppCompatActivity в logcat вместо android.support.v7.app.AppCompatActivity. Вы также определили implementation 'com.android.support:design:28.0.0' зависимость. Это означает, что ваши зависимости от старой библиотеки поддержки Android были преобразованы в AndroidX с помощью jetifier .

Библиотека каллиграфии не работает с AndroidX. На данный момент вы можете отключить jetifier :

gradle.properties

android.enableJetifier=false
android.useAndroidX=false

В будущем вы должны перейти на AndroidX и использовать стороннюю поддержку шрифтов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...