Googleのデベロッパーコンソールでこの奇妙なエラーが発生していました。そこで、Google Cloud Test Labを使用して、実際に何が起こっているのかを確認しました。ほとんどすべてのデバイスでアプリが失敗することがわかりました
FATAL EXCEPTION: main
Process: com.blackcurrantapps.iamin, PID: 16706
Java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions
at com.google.firebase.FirebaseApp.zzbu(Unknown Source)
at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
at Android.content.ContentProvider.attachInfo(ContentProvider.Java:1591)
at Android.content.ContentProvider.attachInfo(ContentProvider.Java:1562)
at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
at Android.app.ActivityThread.installProvider(ActivityThread.Java:4871)
at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4466)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4406)
at Android.app.ActivityThread.access$1500(ActivityThread.Java:139)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1270)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:136)
at Android.app.ActivityThread.main(ActivityThread.Java:5102)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:785)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:601)
at dalvik.system.NativeStart.main(Native Method)
さて、ここに面白い部分があります、私はアプリでFirebaseをまったく使用しません。アプリケーション全体でパスを検索すると、「Firebase」という単語への参照がありません。ただし、Googleクラウドサービス、ログイン、Googleアプリエンジンは使用します。
ここに私のbuild.gradleファイルがあります:
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'com.Android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.google.gms.google-services'
Android {
compileSdkVersion 23
buildToolsVersion '23.0.2'
defaultConfig {
applicationId "com.blackcurrantapps.iamin"
minSdkVersion 16
targetSdkVersion 23
versionCode 11
versionName "Fixed Check in Bug"
multiDexEnabled = true
}
buildTypes {
release {
shrinkResources true
// minifyEnabled true
// proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
dexOptions {
javaMaxHeapSize "4g"
}
}
repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
maven { url "https://oss.sonatype.org/content/groups/public/" }
maven { url "https://jitpack.io" }
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile('com.mikepenz:materialdrawer:4.5.8@aar') {
transitive = true
}
compile 'com.mikepenz:google-material-typeface:1.2.0.1@aar' //Google Material Design Icons
compile 'com.mikepenz:fontawesome-typeface:4.4.0.1@aar'
compile('com.vincentbrison.openlibraries.Android:dualcache:2.2.2@jar') {
transitive = true;
}
compile project(':htmlDialog')
compile('com.Twitter.sdk.Android:Twitter:1.8.0@aar') {
transitive = true;
}
compile 'com.Android.support:palette-v7:23.4.0'
compile 'com.Android.support:multidex:1.0.1'
compile 'com.Android.support:appcompat-v7:23.4.0'
compile 'com.Android.support:design:23.4.0'
compile 'com.google.Android.gms:play-services-maps:9.0.0'
compile 'com.google.Android.gms:play-services-gcm:9.0.0'
compile 'com.google.Android.gms:play-services-identity:9.0.0'
compile 'com.google.Android.gms:play-services-base:9.0.0'
compile 'com.google.Android.gms:play-services-plus:9.0.0'
compile 'com.google.Android.gms:play-services-analytics:9.0.0'
compile 'com.google.Android.gms:play-services-location:9.0.0'
compile 'com.Android.support:cardview-v7:23.4.0'
compile 'com.rengwuxian.materialedittext:library:2.1.3'
compile 'com.twotoasters.jazzylistview:library:1.2.1'
compile 'com.twotoasters.jazzylistview:library-recyclerview:1.2.1'
compile 'com.pnikosis:materialish-progress:1.7'
compile 'com.getbase:floatingactionbutton:1.10.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp:okhttp:2.6.0'
compile 'me.dm7.barcodescanner:zbar:1.8.3'
compile 'net.glxn.qrgen:Android:2.0'
compile 'com.edmodo:cropper:1.0.1'
compile 'com.github.PhilJay:MPAndroidChart:v2.1.6'
compile 'de.greenrobot:eventbus:2.4.0'
compile 'com.Android.support:support-v4:23.4.0'
compile 'com.pavelsikun:material-seekbar-preference:0.12.1+'
compile project(path: ':backend', configuration: 'Android-endpoints')
}
誰でもここで私を助けることができますか?
質問Sanketを投稿していただきありがとうございます。私は、Firebase Test Lab(以前のCloud Test Lab)のPMです。これは修正すべきバグであるということをお知らせしたかったです。
アプリは現在、最新かつ最高のGoogle Play開発者サービスを使用しているようです。先週それらを使用するようにデバイスを更新した後、古いバージョンに戻すバグを発見しました。現在、デバイスに最新のPlayサービスを再デプロイしているので、テストを再実行する必要があります。そうでない場合は、お知らせください。調査して修正します。
私に合った解決策を見つけました。 Google Play Services 9.0.1ライブラリ全体をインポートしていました。一時的な回避策は、アプリが実際に必要とするAPIのみをインポートすることです。 APIの全リストを取得できます こちら 。
私の場合:FCMとGoogleマップを使用します
//for FCM
compile 'com.google.firebase:firebase-messaging:9.4.0'
//for Map
compile 'com.google.Android.gms:play-services:9.4.0'
修正済み:削除済み
compile 'com.google.Android.gms:play-services:9.4.0'
使用済み
compile 'com.google.Android.gms:play-services-maps:9.4.0'
compile 'com.google.Android.gms:play-services-location:9.4.0'
うまくいきました。
これが他の人を助けることができる場合、これを使用してこれを解決しましたが、これはFirebaseとどこにもリンクしていませんが、実際に私のクラッシュを解決しました
追加 compile 'com.Android.support:multidex:1.0.1'
をapp/build.gradleに。
追加 Android:name="Android.support.multidex.MultiDexApplication"
をAndroidManifest.xmlのアプリケーションタグに追加します。
カスタムApplicationクラスを使用している場合は、AndroidManifest.xmlをスキップし、ApplicationクラスでApplicationではなくMultiDexApplicationを拡張します。
Com.google.firebase:firebase-ads:9.0.2 AdMobをAndroid依存関係、
compile 'com.google.firebase:firebase-ads:9.0.2'
あなたのを削除します
play-services (com.google.Android.gms: play-services:9.0.2)
わたしにはできる!
次のコードスニペットを試してみてください:
defaultConfig {
multiDexEnabled true
}
dependencies {
compile 'com.Android.support:multidex:1.0.0'
}
public class Controller extends Application {
@Override
protected void attachBaseContext(Context newBase)
{
super.attachBaseContext(newBase);
MultiDex.install(this);
}
}
手遅れではないことを願っています。 Firebaseが問題を引き起こしていたため、除外しました。これをモジュールgradleに追加しました。
configurations {
all*.exclude group: 'com.google.firebase', module: 'firebase-common'
}
Google play-service依存関係をcompile 'com.google.Android.gms:play-services:8.3.0'
と問題は解決されます。
Android 4.4では、解決策は次のように似ていました( https://stackoverflow.com/a/38707231/3377472 ):
-Google Play開発者サービスリビジョン33
1)build.gradleおよび依存関係を構成する
マルチデックスのサポートを有効にし、マルチデックスのライブラリを追加
Android {
compileSdkVersion 23
buildToolsVersion '23.0.3'
defaultConfig {
applicationId "packagename"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
//------- Enabling multidex support----------.
multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "3g"//use 3Gb of ram to launch Android
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile 'com.Android.support:multidex:1.0.1' // 1.0.0
// if you are using google maps
compile 'com.google.Android.gms:play-services-maps:9.2.0'
compile 'com.google.Android.gms:play-services-location:9.2.0'
}
2)マニフェストを編集し、このAndroid:nameを追加します
<application
Android:name="Android.support.multidex.MultiDexApplication"
...
.....
activity
Android:name="packagename.Application"
....
...
</activity>
3)アプリケーションクラス
-私のアプリケーションクラスは次のとおりです。
import Android.support.multidex.MultiDex;
public class Application extends AppCompatActivity {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this is the solution
MultiDex.install(this);
setContentView(R.layout.layout_example);
----
----
MultiDex
の使用が間違っていたことが判明し、このエラーが発生します。これはどこかの公式ドキュメントで本当に言及されているはずです。
Gradle.build(アプリレベル)
dependencies {
compile 'com.Android.support:multidex:1.0.1'
マニフェストで、追加します
<application
Android:name=".Global"
...
Applicationクラスでは、
public class Global extends MultiDexApplication {
...
}
Google Playサービスを使用している場合は、必ず特定のサービスを追加してください。たとえば、マップを使用する場合:
compile 'com.google.Android.gms:play-services-maps:x.x.x
の代わりに
compile 'com.google.Android.gms:play-services:9.6.1'
これにより、コードのサイズが小さくなり、コンパイルで「multidex」機能を使用する必要がなくなります。偶然に既に含まれている場合
{
multiDexEnabled true
}
あなたのコードでそれと不要なライブラリ参照を削除してみてください
これが役立つかどうかはわかりませんが、Android sdk 19を使用して同じ問題が発生し、私を狂わせていました。 gradle configで「minifyEnabled true」を設定すると停止しました。
releasesセクションでコメントアウトされていることがわかります。