Приложение запускается в ANR до вызова App onCreate () - PullRequest
0 голосов
/ 04 сентября 2018

Я очень долго работал над проектом. Недавно у меня возникла проблема ANR прямо при запуске приложения. Фактически, поскольку метод App.onCreate() никогда не вызывается, приложение даже не запускается. Насколько я знаю, единственное, что вызывается до этого, - это метод onCreate() любого ContentProvider. Поэтому я удалил их из файла манифеста, но проблема осталась прежней. Приложение. onCreate все еще не вызывается.

Вот некоторые дополнительные детали:

Файл манифеста:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.somepackagename">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="true" />
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />
        <meta-data
            android:name="io.fabric.ApiKey"
            android:value="a_very_long_secret_key" />
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="another_secret_key" />

        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@mipmap/ic_launcher" />

        <meta-data
            android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@color/colorPrimary" />

        <activity
            android:name=".activities.SplashActivity"
            android:configChanges="keyboardHidden|orientation"
            android:label="@string/app_name"
            android:screenOrientation="portrait">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="@string/deep_link_host"
                    android:scheme="https" />
            </intent-filter>
        </activity>
        <activity
            android:name=".activities.MainActivity"
            android:screenOrientation="portrait">
        </activity>
        <activity
            android:name=".activities.MessageCreationEditActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.SignInSignUpActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustResize"/>
        <activity
            android:name=".activities.SettingsActivity"
            android:screenOrientation="portrait"/>
        <activity
            android:name=".activities.MediaViewer"
            android:configChanges="orientation|screenSize"/>
        <activity
            android:name=".activities.CreateGroupActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan" />
        <activity
            android:name=".activities.CategoriesActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.ExploreActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.AllMembersActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.InviteMembersActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.QrCodeActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.GroupSettingsActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.SliceCreationEditActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.FavoritesMessagesActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.QrCodeScannerActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.UserDetailsActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.MembershipActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.GroupDetailsActivity"
            android:screenOrientation="portrait"/>
        <activity
            android:name=".activities.MemberManagementActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.ReportActivity"
            android:screenOrientation="portrait" />
        <activity android:name=".activities.ShareMessageActivity"
            android:screenOrientation="portrait"/>
        <activity
            android:name=".activities.WebViewActivity"
            android:label="@string/title_activity_web_view"
            android:theme="@style/AppTheme"/>
        <activity android:name=".activities.ContentRatingActivity"
            android:screenOrientation="portrait"/>
        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>

        <!--
        <provider
            android:name=".AssetContentProvider"
            android:authorities="${packageName}.AssetContentProvider"
            android:exported="false"
            android:multiprocess="false"/>
        <provider
            android:name="com.facebook.FacebookContentProvider"
            android:authorities="com.facebook.app.FacebookContentProvider547123654789621"
            android:exported="true" />
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${packageName}.provider"
            android:exported="false"
            android:multiprocess="true"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider> -->

        <service android:name=".services.FCMIDService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>
        <service android:name=".services.FCMService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
    </application>

</manifest>

Файл приложения Gradle:

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

android {
   compileSdkVersion 27
   buildToolsVersion "27.0.3"

defaultConfig {
    applicationId "com.somepackagename"
    minSdkVersion 17
    targetSdkVersion 27
    renderscriptTargetApi 22
    renderscriptSupportModeEnabled true
    versionCode 34
    versionName "1.0.34"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    api fileTree(dir: 'libs', include: ['*.jar'])

    api group: 'commons-lang', name: 'commons-lang', version: '2.6'
    api 'com.android.support:multidex:1.0.1'
    api 'com.android.support:cardview-v7:27.1.1'
    api 'com.android.support:percent:27.1.1'
    api 'com.android.support.constraint:constraint-layout:1.0.2'
    api 'com.android.support:appcompat-v7:27.1.1'
    api 'com.mikhaellopez:circularimageview:3.0.2'
    api 'com.android.support:design:27.1.1'
    api 'fr.tvbarthel.blurdialogfragment:lib:2.2.0'
    api 'com.github.channguyen:rsv:1.0.1'
    api 'com.squareup.retrofit2:retrofit:2.1.0'
    api 'com.squareup.retrofit2:converter-gson:2.1.0'
    api 'net.danlew:android.joda:2.9.4.3'
    //implementation 'com.facebook.android:facebook-android-sdk:4.17.0'
    implementation 'com.facebook.android:facebook-android-sdk:[4,5)'
    api 'com.google.zxing:core:3.3.0'
    api 'com.google.android.gms:play-services-maps:11.0.2'
    api 'com.google.android.gms:play-services-ads:11.0.2'
    api 'com.google.android.gms:play-services-auth:11.0.2'
    api 'com.google.firebase:firebase-ads:11.0.2'
    api 'com.google.firebase:firebase-messaging:11.0.2'
    api 'com.google.firebase:firebase-core:11.0.2'
    api 'com.google.firebase:firebase-invites:11.0.2'
    api 'com.nvanbenschoten.motion:library:1.1.2'
    api 'com.google.ads.interactivemedia.v3:interactivemedia:3.7.2'
    api('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') {
        transitive = true;
    }
    api('com.twitter.sdk.android:twitter-core:2.3.0@aar') {
        transitive = true;
    }
    api('com.twitter.sdk.android:tweet-composer:2.2.0@aar') {
        transitive = true;
    }
    api 'com.drewnoakes:metadata-extractor:2.11.0'
}

apply plugin: 'com.google.gms.google-services'

Буду признателен за любые предложения или идеи. Спасибо

EDIT Вот дополнительная информация, журналы ANR:

09-04 10:10:31.360 772-791/? E/ActivityManager: ANR in com.somepackagename
PID: 18073
Reason: executing service com.somepackagename/.services.FCMIDService
Load: 8.05 / 8.37 / 8.36
CPU usage from 26127ms to 0ms ago (2018-09-04 10:10:01.774 to 2018-09-04 10:10:27.901):
  3.4% 772/system_server: 2.2% user + 1.2% kernel / faults: 658 minor
  0.5% 599/media.codec: 0.3% user + 0.1% kernel / faults: 407 minor
  0.8% 434/surfaceflinger: 0.4% user + 0.3% kernel / faults: 10 minor
  0.6% 3942/com.google.android.gms.persistent: 0.4% user + 0.1% kernel / faults: 239 minor
  0.5% 2323/com.android.phone: 0.2% user + 0.3% kernel / faults: 5 minor
  0.4% 21381/adbd: 0.1% user + 0.3% kernel / faults: 421 minor
  0.1% 593/media.extractor: 0% user + 0% kernel / faults: 86 minor
  0.4% 3899/kworker/u16:3: 0% user + 0.4% kernel
  0.4% 12837/kworker/0:2: 0% user + 0.4% kernel
  0.3% 10/rcu_preempt: 0% user + 0.3% kernel
  0.3% 1969/com.android.systemui: 0.2% user + 0.1% kernel / faults: 10 minor
  0.3% 367/logd: 0.1% user + 0.1% kernel / faults: 13 minor
  0.3% 18068/kworker/1:1: 0% user + 0.3% kernel
  0.2% 301/msm-core:sampli: 0% user + 0.2% kernel
  0.2% 16559/kworker/0:1: 0% user + 0.2% kernel
  0.2% 432/msm_irqbalance: 0% user + 0.1% kernel
  0.2% 485/irq/215-fc38800: 0% user + 0.2% kernel
  0.2% 4096/com.google.android.gms: 0.1% user + 0.1% kernel / faults: 66 minor
  0.2% 6227/com.google.android.ims: 0.1% user + 0% kernel / faults: 110 minor
  0.1% 250/cfinteractive: 0% user + 0.1% kernel
  0.1% 258/mmcqd/0: 0% user + 0.1% kernel
  0.1% 17837/com.vkontakte.android: 0.1% user + 0% kernel / faults: 6 minor
  0.1% 15/ksoftirqd/1: 0% user + 0.1% kernel
  0.1% 428/android.hardware.wifi@1.0-service: 0% user + 0.1% kernel
  0.1% 17656/kworker/u16:2: 0% user + 0.1% kernel
  0.1% 18023/com.Project100Pi.themusicplayer: 0% user + 0% kernel / faults: 34 minor
  0.1% 3/ksoftirqd/0: 0% user + 0.1% kernel
  0.1% 40/kworker/u17:0: 0% user + 0.1% kernel
  0% 57/system: 0% user + 0% kernel
  0.1% 368/servicemanager: 0% user + 0% kernel
  0.1% 575/thermal-engine: 0% user + 0.1% kernel
  0.1% 15700/mdss_fb0: 0% user + 0.1% kernel
  0% 8/rcuc/0: 0% user + 0% kernel
  0% 170/hwrng: 0% user + 0% kernel
  0% 433/lmkd: 0% user + 0% kernel
  0% 586/zygote: 0% user + 0% kernel / faults: 158 minor
  0% 7655/ru.gismeteo.gismeteo: 0% user + 0% kernel / faults: 19 minor
  0% 10682/com.android.vending: 0% user + 0% kernel / faults: 23 minor
  0% 14340/com.android.chrome:sandboxed: 0% user + 0% kernel / faults: 4 minor
  0% 17489/com.google.android.gm: 0% user + 0% kernel / faults: 39 minor
  0% 18073/com.somepackagename: 0% user + 0% kernel / faults: 10 minor
  0% 18605/kworker/u16:4: 0% user + 0% kernel
  0% 28197/kworker/3:2: 0% user + 0% kernel
  0% 5/kworker/0:0H: 0% user + 0% kernel
  0% 13/rcuc/1: 0% user + 0% kernel
  0% 20/ksoftirqd/2: 0% user + 0% kernel
  0% 25/ksoftirqd/3: 0% user + 0% kernel
  0% 44/irq/51-cpr: 0% user + 0% kernel
  0% 47/ksoftirqd/4: 0% user + 0% kernel
  0% 160/mdss_dsi_event: 0% user + 0% kernel
  0% 262/irq/224-spdm_bw: 0% user + 0% kernel
  0% 467/ksoftirqd/5: 0% user + 0% kernel
  0% 545/dmcrypt_write: 0% user + 0% kernel
  0% 564/jbd2/dm-2-8: 0% user + 0% kernel
  0% 576/qmuxd: 0% user + 0% kernel / faults: 9 minor
  0% 578/perfd: 0% user + 0% kernel / faults: 12 minor
  0% 587/audioserver: 0% user + 0% kernel / faults: 187 minor
  0% 594/media.metrics: 0% user + 0% kernel / faults: 53 minor
  0% 596/netd: 0% user + 0% kernel / faults: 63 minor
  0% 598/wificond: 0% user + 0% kernel / faults: 1 minor
  0% 600/rild: 0% user + 0% kernel
  0% 610/cnd: 0% user + 0% kernel
  0% 1835/wpa_supplicant: 0% user + 0% kernel / faults: 1 minor
  0% 3984/com.quicinc.cne.CNEService: 0% user + 0% kernel / faults: 7 minor
  0% 4118/com.google.android.googlequicksearchbox:search: 0% user + 0% kernel / faults: 15 minor
  0% 5010/com.facebook.orca: 0% user + 0% kernel / faults: 5 minor
  0% 5082/com.facebook.katana:notification: 0% user + 0% kernel / faults: 150 minor
  0% 7216/kworker/u17:6: 0% user + 0% kernel
  0% 15818/irq/504-synapti: 0% user + 0% 

FCMIDService класс:

public class FCMIDService extends FirebaseInstanceIdService{

    private static final String TAG = "FCMIDService";

    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the InstanceID token
     * is initially generated so this is where you would retrieve the token.
     */
    @Override
    public void onTokenRefresh() {
        CLog.d(TAG, "FCM id received");
        // Get updated InstanceID token.
        String token = FirebaseInstanceId.getInstance().getToken();
        //Do something with the token
        //...
    }

    @Override
    public void onCreate() {
        Log.d("atf", "on create here called");
        super.onCreate();
    }
}

Согласно журналам ANR попадает в класс FCMIDService , но это не имеет смысла. Когда я отлаживаю приложение, метод onCreate() никогда не вызывается. Так как же туда может попасть ANR, если он никогда не будет выполнен?

Еще одно важное замечание: Когда я откатил код до предыдущей рабочей версии (через SVN), эта проблема осталась, и я подумал, что хранилище одной из библиотек, которые я использую, изменилось.

EDIT2: Немного поэкспериментировав, я обнаружил, что проблема вызвана Facebook integration. Когда я убрал строку

"implementation 'com.facebook.android:facebook-android-sdk:[4,5)'" 

и весь Java-код, связанный с ним, ANR исчез. Я не могу подать в отставку на реализацию Facebook, поэтому я заменил

"implementation 'com.facebook.android:facebook-android-sdk:[4,5)'" 

с

"api 'com.facebook.android:facebook-android-sdk:4.36.0'" 

согласно https://mvnrepository.com/artifact/com.facebook.android/facebook-android-sdk/3.19.0. Но это не сработало.

Есть идеи обойтись?

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

не ставить операторы перед вызовом super.onCreate(); это незаконно, и с большой вероятностью причина, по которой вы получаете ANR из фона Service, который едва может работать на UiThread - также, что FirebaseInstanceIdService устарела и поэтому следует заменить в целом.

0 голосов
/ 05 сентября 2018

Проблема заложена в репозитории Facebook. Я только что изменил одну строку кода в файле app.gradle: От

implementation 'com.facebook.android:facebook-android-sdk:[4,5)'

до

api 'com.facebook.android:facebook-share:4.36.0'

и все, никаких других изменений.

Итак, вот что происходит: Поскольку я использовал диапазон версий в объявлении зависимости [4,5) , gradle автоматически обновит библиотеку Facebook до последней версии (в настоящее время 4.36.0). А Facebook недавно обновил свой репозиторий, и именно тогда у меня начались проблемы.

Решением было реализовать не полный SDK (com.facebook.android:facebook-android-sdk:[4,5)), а только его часть (com.facebook.android: facebook-share : 4.36.0) и, поскольку у меня сейчас нет диапазона версий, у меня не должно возникнуть проблем, если Facebook решит снова сделать обновления.

Так что, очевидно, что-то в последней библиотеке Facebook начало что-то конфликтовать, или они просто сделали дерьмовую работу.

0 голосов
/ 04 сентября 2018

Обычно это происходит, когда вы слишком долго блокируете поток пользовательского интерфейса. Поэтому, пожалуйста, проверьте ваш последний код, где вы сделали что-то, что блокирует поток пользовательского интерфейса. Для получения дополнительной информации о ANR вы можете посетить https://developer.android.com/topic/performance/vitals/anr

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