• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

에러가 나서 진행이 안됩니다 ㅠㅠ

19.03.02 22:17 작성 조회수 949

0

안녕하세요? Flutter 강의 잘 듣고 있습니다.

프로그래밍을 접한지 얼마 안된 사람인데요...

보고 따라하는 중에 한 곳에서 정체되어 더 이상 진행이 안 됩니다.

고민하다가 쪽지를 드립니다.

firebase google 로그인 연동하는 단계에서 오류가 났습니다.

일단 실행하면 LoginPage가 에뮬레이터에 뜨고 logcat에는

2019-03-02 22:04:54.161 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null

2019-03-02 22:04:54.164 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null

2019-03-02 22:04:54.199 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null

2019-03-02 22:04:54.200 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null

2019-03-02 22:04:54.209 5054-5082/com.blome.binstagramflutter E/FA: App is missing ACCESS_NETWORK_STATE permission

2019-03-02 22:04:54.210 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null

2019-03-02 22:04:54.214 5054-5082/com.blome.binstagramflutter E/FA: AppMeasurementReceiver not registered/enabled

2019-03-02 22:04:54.220 5054-5082/com.blome.binstagramflutter E/FA: AppMeasurementService not registered/enabled

2019-03-02 22:04:54.220 5054-5082/com.blome.binstagramflutter E/FA: Uploading is not possible. App measurement disabled

2019-03-02 22:04:54.226 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null

2019-03-02 22:04:54.230 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null

2019-03-02 22:04:54.250 5054-5082/com.blome.binstagramflutter E/FA: Task exception on worker thread: java.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the element: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />: com.google.android.gms.measurement.internal.zzfx.zzs(Unknown Source:593)

이런 에러 메시지가 뜨네요.

구글로그인 버튼을 누르면 앱이 종료되고

2019-03-02 22:09:24.125 5054-5054/com.blome.binstagramflutter E/MethodChannel#plugins.flutter.io/google_sign_in: Failed to handle method call

java.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the element: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(Unknown Source:17)

at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(Unknown Source:5)

at com.google.android.gms.common.GoogleApiAvailability.isGooglePlayServicesAvailable(Unknown Source:94)

at com.google.android.gms.auth.api.signin.GoogleSignInClient.zze(Unknown Source:9)

at com.google.android.gms.auth.api.signin.GoogleSignInClient.getSignInIntent(Unknown Source:18)

at io.flutter.plugins.googlesignin.GoogleSignInPlugin$Delegate.signIn(GoogleSignInPlugin.java:291)

at io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(GoogleSignInPlugin.java:77)

at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:200)

at io.flutter.view.FlutterNativeView.handlePlatformMessage(FlutterNativeView.java:163)

at android.os.MessageQueue.nativePollOnce(Native Method)

at android.os.MessageQueue.next(MessageQueue.java:326)

at android.os.Looper.loop(Looper.java:160)

at android.app.ActivityThread.main(ActivityThread.java:6669)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

2019-03-02 22:09:24.149 5054-5240/com.blome.binstagramflutter E/AndroidRuntime: FATAL EXCEPTION: GoogleApiHandler

Process: com.blome.binstagramflutter, PID: 5054

java.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the element: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(Unknown Source:17)

at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(Unknown Source:5)

at com.google.android.gms.common.GoogleApiAvailability.isGooglePlayServicesAvailable(Unknown Source:94)

at com.google.android.gms.common.internal.GoogleApiAvailabilityCache.getClientAvailability(Unknown Source:23)

at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.connect(Unknown Source:216)

at com.google.android.gms.common.api.internal.GoogleApiManager.zab(Unknown Source:47)

at com.google.android.gms.common.api.internal.GoogleApiManager.handleMessage(Unknown Source:173)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:193)

at android.os.HandlerThread.run(HandlerThread.java:65)

--------- beginning of system

2019-03-02 22:09:24.160 5054-5072/com.blome.binstagramflutter E/flutter: [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:

NoSuchMethodError: The getter 'authentication' was called on null.

Receiver: null

Tried calling: authentication

0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)

#1      LoginPage._handleSignIn (package:binstagram_flutter/login_page.dart:52:62)

<asynchronous suspension>

#2 LoginPage.build.<anonymous closure> (package:binstagram_flutter/login_page.dart:26:17)

#3 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)

#4 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)

#5 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)

#6 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)

#7 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)

#8 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)

#9 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)

#10 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)

#11 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19)

#12 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)

#13 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)

#14 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)

#15 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)

#16 _invoke1 (dart:ui/hooks.dart:168:13)

#17 _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)

이렇게 뜹니다..

--------------------------------------------- -----------------------------------------------------

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

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

android {

compileSdkVersion 28

sourceSets {

main.java.srcDirs += 'src/main/kotlin'

}

lintOptions {

disable 'InvalidPackage'

}

defaultConfig {

// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).

applicationId "com.blome.binstagramflutter"

minSdkVersion 21

targetSdkVersion 28

multiDexEnabled true

versionCode flutterVersionCode.toInteger()

versionName flutterVersionName

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

}

buildTypes {

release {

// TODO: Add your own signing config for the release build.

// Signing with the debug keys for now, so `flutter run --release` works.

signingConfig signingConfigs.debug

}

}

}

flutter {

source '../..'

}

dependencies {

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

testImplementation 'junit:junit:4.12'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'

androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'

implementation 'com.google.firebase:firebase-core:16.0.7'

}

--------------------------------------------- --------------------------------------------------

buildscript {

ext.kotlin_version = '1.3.21'

repositories {

google()

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:3.3.1'

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

classpath 'com.google.gms:google-services:4.2.0'

}

}

allprojects {

repositories {

google()

jcenter()

}

}

rootProject.buildDir = '../build'

subprojects {

project.buildDir = "${rootProject.buildDir}/${project.name}"

}

subprojects {

project.evaluationDependsOn(':app')

}

task clean(type: Delete) {

delete rootProject.buildDir

}

----------------------------------------- ----------------------------------------------

org.gradle.jvmargs=-Xmx1536M

android.useAndroidX=true

android.enableJetifier=true

----------------------------------------------- < 매니페스트 > ---------------------------------------------------

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

package="com.blome.binstagramflutter">

<!-- The INTERNET permission is required for development. Specifically,

flutter needs it to communicate with the running application

to allow setting breakpoints, to provide hot reload, etc.

-->

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<!-- io.flutter.app.FlutterApplication is an android.app.Application that

calls FlutterMain.startInitialization(this); in its onCreate method.

In most cases you can leave this as-is, but you if you want to provide

additional functionality it is fine to subclass or reimplement

FlutterApplication and put your custom class here. -->

<application

android:name="io.flutter.app.FlutterApplication"

android:label="binstagram_flutter"

android:icon="@mipmap/ic_launcher">

<activity

android:name=".MainActivity"

android:launchMode="singleTop"

android:theme="@style/LaunchTheme"

android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"

android:hardwareAccelerated="true"

android:windowSoftInputMode="adjustResize">

<!-- This keeps the window background of the activity showing

until Flutter renders its first frame. It can be removed if

there is no splash screen (such as the default splash screen

defined in @style/LaunchTheme). -->

<meta-data

android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"

android:value="true" />

<intent-filter>

<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>

</intent-filter>

</activity>

</application>

뭐가 잘못된걸까요?

답변 2

·

답변을 작성해보세요.

1

로그를 보니 AndroidManifest.xml 에 <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 를 추가하라고 나오네요.

이건 네이티브 개발할 때는 필요한데 플러터에서는 별도로 추가할 필요가 없는데 이상하네요.

라이브러리 설정이 제대로 반영이 안 되거나 꼬였거나 뭔가 이유가 있는 듯 합니다.

완전히 깨끗하게 안드로이드 스튜디오의 메뉴중 Tools > Flutter > Flutter Clean 을 실행해 보세요.

0

Blome님의 프로필

Blome

질문자

2019.03.03

플러터 클린 후 실행하니까 잘 됩니다.

감사합니다~!!