Cordova-plugin-firebase: 3μ›” 20일 Firebase μ—…λ°μ΄νŠΈ 이후 였λ₯˜μž…λ‹ˆλ‹€. Firebase SDK 버전을 μ„€μ •ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

에 λ§Œλ“  2018λ…„ 03μ›” 22일  Β·  21μ½”λ©˜νŠΈ  Β·  좜처: arnesson/cordova-plugin-firebase

이후: https://firebase.google.com/support/releases 3μ›” 20일

였λ₯˜

AndroidRuntime: java.lang.NoSuchMethodError: 정적 λ©”μ„œλ“œ μ—†μŒ zza(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 클래슀 Lcom/google/android/gms/common/internal/zzbqμ—μ„œ; λ˜λŠ” 슈퍼 클래슀('com.google.android.gms.common.internal.zzbq' μ„ μ–Έ

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

platforms/android/build.gradle λ₯Ό μ—…λ°μ΄νŠΈν•˜μ—¬ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
전에

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

후에:

allprojects {
    repositories {
        //start here
        configurations.all {
            resolutionStrategy.eachDependency { DependencyResolveDetails details ->
                def requested = details.requested
                if (requested.group == 'com.google.android.gms') {
                    details.useVersion '11.8.0'
                }
                if (requested.group == 'com.google.firebase') {
                    details.useVersion '11.8.0'
                }
            }
        }
        //end
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

[email protected]μ—μ„œ ν…ŒμŠ€νŠΈλ¨

λͺ¨λ“  21 λŒ“κΈ€

이것은 μ€‘μš”ν•œ λ¬Έμ œμž…λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, λ™μΌν•œ Firebase μ—…λ°μ΄νŠΈλ‘œ 인해 λ‹€λ₯Έ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μž…λ ₯ν•  λ•Œ:

cordova build android

μ½˜μ†”μ—μ„œ λ‹€μŒ 좜λ ₯을 μ–»μŠ΅λ‹ˆλ‹€.

λΉŒλ“œ μ‹€νŒ¨

총 μ‹œκ°„: 4.529초
FAILURE: μ˜ˆμ™Έλ‘œ 인해 λΉŒλ“œμ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.

  • 무엇이 잘λͺ»λ˜μ—ˆλŠ”지:
    ':processDebugResources' μž‘μ—…μ„ μ‹€ν–‰ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    > 였λ₯˜: νŒ¨ν‚€μ§€ 이름이 'com.google.android.gms.license'인 λ‘˜ μ΄μƒμ˜ 라이브러리 `

λ‚˜λŠ” 웹을 톡해 닡을 μ°Ύκ³  μžˆμ—ˆμ§€λ§Œ λ‚΄κ°€ 찾은 μ†”λ£¨μ…˜ ( solution2 , solution3 ) 이 μ €μ—κ²Œ μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ .

였λ₯˜λŠ” Play μ„œλΉ„μŠ€ μ—…λ°μ΄νŠΈ 둜 μΈν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 이 ν”ŒλŸ¬κ·ΈμΈμ„ μ œκ±°ν•  λ•ŒκΉŒμ§€ λ‚΄ Android 앱을 λΉŒλ“œν•  수 μ—†μŠ΅λ‹ˆλ‹€.

이 μ€‘μš”ν•œ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ–΄ ν”ŒλŸ¬κ·ΈμΈμ„ λ‹€μ‹œ μ„€μΉ˜ν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€.

이에 λŒ€ν•œ μž„μ‹œ μˆ˜μ • 사항이 μžˆμŠ΅λ‹ˆλ‹€. μ„œλΉ„μŠ€ 및 Firebase 버전을 11.8.0으둜 κ°•μ œ μ μš©ν•©λ‹ˆλ‹€.

μ–΄λ–»κ²Œ:
이것을 μ•ˆμ— λ„£μ–΄λ‚΄μš©μ΄ ν¬ν•¨λœ config.xml νƒœκ·Έ:

<hook src="fixFirebasePlugin.js" type="before_build" />

ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— JS νŒŒμΌμ„ λ§Œλ“­λ‹ˆλ‹€.

module.exports = function(context) {
    var fs = require('fs');
    var path = require('path');

    var rootdir = context.opts.projectRoot;

    var platformDir = 'platforms/android';
        //change the path to your external gradle file
    var srcFile = path.join(rootdir, 'src/android/build-extras.gradle');
    var destFile = path.join(rootdir, platformDir, 'build-extras.gradle');

    console.log("copying "+srcFile+" to "+destFile);
    fs.createReadStream(srcFile).pipe(fs.createWriteStream(destFile));
}

src 폴더 μ•ˆμ— android fodlerλ₯Ό λ§Œλ“€κ³  κ·Έ μ•ˆμ— build-extras.gradleμ΄λΌλŠ” νŒŒμΌμ„ λ‹€μŒ λ‚΄μš©μœΌλ‘œ λ§Œλ“­λ‹ˆλ‹€.

configurations.all {
   resolutionStrategy {
       force "com.google.android.gms:play-services-ads:11.8.0"
       force "com.google.android.gms:play-services-base:11.8.0"
       force "com.google.android.gms:play-services-gcm:11.8.0"
       force "com.google.android.gms:play-services-analytics:11.8.0"
       force "com.google.android.gms:play-services-location:11.8.0"
       force "com.google.android.gms:play-services-basement:11.8.0"
       force "com.google.android.gms:play-services-tagmanager:11.8.0"
       force 'com.google.firebase:firebase-core:11.8.0'
       force 'com.google.firebase:firebase-crash:11.8.0'
       force 'com.google.firebase:firebase-auth:11.8.0'
       force 'com.google.firebase:firebase-common:11.8.0'
       force 'com.google.firebase:firebase-config:11.8.0'
       force 'com.google.firebase:firebase-messaging:11.8.0'
   }
}

ν”Œλž«νΌμ„ μ œκ±°ν–ˆλ‹€κ°€ λ‹€μ‹œ μΆ”κ°€ν•˜κ³ (6.3.0μ—μ„œ ν…ŒμŠ€νŠΈ), Cordova λΉŒλ“œ Androidλ₯Ό μˆ˜ν–‰ν•˜λ©΄ ν•΄κ²°λ©λ‹ˆλ‹€.

κ·Έ ν›„, 당신이 μ›ν•˜λŠ” 무엇이든 μ‹€ν–‰/λΉŒλ“œ --prod.

@tryadelion , μ–ΈκΈ‰ν•œ λŒ€λ‘œ μ •ν™•ν•˜κ²Œ μ†”λ£¨μ…˜μ„ μ‹œλ„ν–ˆμ§€λ§Œ μ½˜μ†”μ—μ„œ λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.(

ν”Œλž«νΌμ„ μ œκ±°ν•˜κ³  [email protected]으둜 읽고 "~: cordova build android", no prod, no run, no ionic을 μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆκΉŒ? 그것이 λ‚˜λ₯Ό μœ„ν•΄ νŠΈλ¦­μ„ ν•œ κ²ƒμž…λ‹ˆλ‹€!

예, λͺ¨λ“  μž‘μ—…(config.xml, fixFirebasePlugin.js, build-extras.gradle, platform [email protected])을 μˆ˜ν–‰ν–ˆμ§€λ§Œ λ‚΄κ°€ μ‹€ν–‰ν•˜λŠ” λͺ¨λ“  μ‹€ν–‰ λ˜λŠ” λΉŒλ“œ λͺ…령은 λ™μΌν•œ 좜λ ₯을 μƒμ„±ν•©λ‹ˆλ‹€.

firebase-build-failed

λ‚΄ ν”„λ‘œμ νŠΈλŠ” 이온 ν”„λ‘œμ νŠΈκ°€ μ•„λ‹™λ‹ˆλ‹€. 이것이 이 λ¬Έμ œμ— μ€‘μš”ν•  수 μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

이것에 λŒ€ν•œ 이전 "ν•«ν”½μŠ€"λ₯Ό μ‹œλ„ ν–ˆμŠ΅λ‹ˆκΉŒ? ν”ŒλŸ¬κ·ΈμΈμ˜ XMLμ—μ„œ μˆ˜λ™μœΌλ‘œ 버전을 λ³€κ²½ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆκΉŒ? νŒŒμΌμ„ μ—‰λ§μœΌλ‘œ λ§Œλ“€μ—ˆκΈ° λ•Œλ¬Έμ— μ œκ±°ν•˜κ³  읽어야 ν–ˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ 3개의 λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œ μž‘λ™ν–ˆμ§€λ§Œ λͺ¨λ‘ μ΄μ˜¨ν™”λ˜μ—ˆμ§€λ§Œ 후크 μ‹œμŠ€ν…œμ€ μ½”λ₯΄λ„λ°” 전원을 μ‚¬μš©ν•˜λŠ” 것과 λ™μΌν•©λ‹ˆλ‹€.

κ·Έ μ „μ—λŠ” /platforms/android/project.properties 및 /platforms/android/build.gradle만 λ³€κ²½ν–ˆμ§€λ§Œ κ·Έ ν›„μ—λŠ” ν”ŒλŸ¬κ·ΈμΈ(첫 번째)κ³Ό ν”Œλž«νΌ [email protected] 을 μ œκ±°ν–ˆλ‹€κ°€ λ‹€μ‹œ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€

μ‹€νŒ¨μ˜ 원인이 무엇인지 λͺ¨λ₯΄μ§€λ§Œ λ‚΄ ν”„λ‘œμ νŠΈμ— μ—¬μ „νžˆ 두 가지 버전이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ½˜μ†”μ—μ„œ λ‹€μŒμ„ λ³Ό 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

firebase-build-failed-2

12.0.0 버전을 μ–΄λ””μ—μ„œ 지정할 수 μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

λ…Έλ“œ λͺ¨λ“ˆμ„ μ œκ±°ν•˜κ³ , ν”Œλž«νΌ/μ•ˆλ“œλ‘œμ΄λ“œλ₯Ό μ œκ±°ν•˜κ³ , /plugins, NPM iμ—μ„œ λͺ¨λ“  μ„œλΉ„μŠ€ μ‚¬μš© ν”ŒλŸ¬κ·ΈμΈμ„ μ œκ±°ν•˜κ³ , μ œκ±°ν•œ λͺ¨λ“  ν”ŒλŸ¬κ·ΈμΈμ„ 읽고, ν”Œλž«νΌ μ•ˆλ“œλ‘œμ΄λ“œλ₯Ό μΆ”κ°€ν•˜κ³ , λ‹€μ‹œ μ‹œλ„ν•˜μ‹­μ‹œμ˜€. 그게 λ‚΄κ°€ ν•  μΌμž…λ‹ˆλ‹€.

μ’‹μ•„, λ‚΄κ°€ 가지고 μžˆλŠ” λͺ¨λ“  ꡬ성 μš”μ†Œλ₯Ό λ‹€μ‹œ μ„€μΉ˜ν•˜λ €κ³  ν•©λ‹ˆλ‹€. λ‹Ήμ‹ μ˜ 도움을 μ£Όμ…”μ„œ λŒ€λ‹¨νžˆ κ°μ‚¬ν•©λ‹ˆλ‹€!!

@tryadelion κ³΅μœ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. λ‚˜λŠ” cordova-plugin-firebase 및 κ°•μ œ 버전을 λΆ„κΈ°ν•˜λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€. μ–΄μ¨Œλ“ , λ‚˜λŠ” λ‹Ήμ‹ μ˜ μ†”λ£¨μ…˜μ„ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” λ˜ν•œ μž‘λ™ν•˜λŠ” [email protected] κ³Ό ν•¨κ»˜ μž‘μ—…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ λ‹€μŒκ³Ό 같이 /platforms/android/build.gradle νŒŒμΌμ„ μˆ˜μ •ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

allprojects {

    repositories {
    // Temp fix for com.google.android.gms.license
            // Added from here
            configurations.all {
                resolutionStrategy {

                    // Put your gms packages here with 11.8.0 attached
                    force "com.google.android.gms:play-services-analytics:11.8.0"
                    force "com.google.android.gms:play-services-auth:11.8.0"
                    force "com.google.android.gms:play-services-gcm:11.8.0"
                    force "com.google.android.gms:play-services-location:11.8.0"
                }
            }
            // until here

        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

(https://github.com/facebook/react-native/issues/18479μ—μ„œ 읽은 μ†”λ£¨μ…˜)

λ‹€μ‹œ ν•œ 번 κ°μ‚¬ν•©λ‹ˆλ‹€!

Ionic v1.1.0 및 cordova-plugin-firebase v0.1.25 이 후크가 λ‚΄ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

//before_build/010_add_gradle_extras.js

#!/usr/bin/env node

var fs = require('fs');
var path = require('path');

var rootdir = process.argv[2];
var platformDir = 'platforms/android';

var srcfile = path.join(rootdir, 'build-extras.gradle');
var destfile = path.join(rootdir, platformDir, 'build-extras.gradle');
var destdir = path.dirname(destfile);

if (fs.existsSync(srcfile) && fs.existsSync(destdir)) {
  fs.createReadStream(srcfile).pipe(fs.createWriteStream(destfile));
  process.stdout.write('Hook: build-extras.gradle added');
} 
//build-extras.gradle

configurations.all {
   resolutionStrategy {
       force "com.google.android.gms:play-services-ads:11.8.0"
       force "com.google.android.gms:play-services-base:11.8.0"
       force "com.google.android.gms:play-services-gcm:11.8.0"
       force "com.google.android.gms:play-services-analytics:11.8.0"
       force "com.google.android.gms:play-services-location:11.8.0"
       force "com.google.android.gms:play-services-basement:11.8.0"
       force "com.google.android.gms:play-services-tagmanager:11.8.0"
       force 'com.google.firebase:firebase-core:11.8.0'
       force 'com.google.firebase:firebase-crash:11.8.0'
       force 'com.google.firebase:firebase-auth:11.8.0'
       force 'com.google.firebase:firebase-common:11.8.0'
       force 'com.google.firebase:firebase-config:11.8.0'
       force 'com.google.firebase:firebase-messaging:11.8.0'
   }
}

μƒˆλ‘œμš΄ μ•ˆλ“œλ‘œμ΄λ“œ ν”Œλž«νΌμ„ μ œκ±°ν•˜κ³  μΆ”κ°€ν•˜λŠ” 것도 핡심 μš”μ†Œμ˜€μŠ΅λ‹ˆλ‹€.

@tryadelion , κ·€ν•˜μ˜ μ ‘κ·Ό 방식을 μ‹œλ„ν•  λ•Œ μ™œ 이 였λ₯˜κ°€ λ°œμƒν•˜λŠ”μ§€ μ•„μ‹­λ‹ˆκΉŒ?

A problem occurred configuring root project 'android'.
> Could not resolve all dependencies for configuration ':_debugApkCopy'.
   > Could not find com.google.gms:google-services:11.8.0.
     Required by:
         project :

λ‚˜λŠ” joteferκ°€ λ§ν•œ λŒ€λ‘œ ν–ˆκ³  λΉŒλ“œκ°€ μž‘λ™ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 원격 ꡬ성이 μž‘λ™μ„ λ©ˆμ·„μŠ΅λ‹ˆλ‹€. μ–΄λ–€ 아이디어라도?

κ°€μ Έμ˜€κΈ°κ°€ μž‘λ™ν•˜μ§€ μ•ŠλŠ” λ¬Έμ œμ— λŒ€ν•΄ μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λ‹ˆ κ°€μ Έμ˜€κΈ°λ₯Ό ν˜ΈμΆœν•  λ•Œ λ°œμƒν•˜λŠ” λ‹€μŒ μ˜ˆμ™Έ λ•Œλ¬Έμ΄λΌλŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€.

원인: java.lang.ClassNotFoundException: DexPathList κ²½λ‘œμ—μ„œ "android.support.v4.util.ArraySet" 클래슀λ₯Ό 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

μ–΄λ–€ 아이디어라도?

@remisture λ‹€λ₯Έ gradle 파일이 μ—¬μ „νžˆ 12.Xλ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμ„ λ•Œ κ·Έ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λΉŒλ“œ 정리λ₯Ό μ‹œλ„ν•΄ λ³΄μ„Έμš”.

platforms/android/build.gradle λ₯Ό μ—…λ°μ΄νŠΈν•˜μ—¬ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
전에

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

후에:

allprojects {
    repositories {
        //start here
        configurations.all {
            resolutionStrategy.eachDependency { DependencyResolveDetails details ->
                def requested = details.requested
                if (requested.group == 'com.google.android.gms') {
                    details.useVersion '11.8.0'
                }
                if (requested.group == 'com.google.firebase') {
                    details.useVersion '11.8.0'
                }
            }
        }
        //end
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

[email protected]μ—μ„œ ν…ŒμŠ€νŠΈλ¨

μ•„λž˜λŠ” λ‚΄ 전체 build.gradleμž…λ‹ˆλ‹€. λ˜ν•œ λͺ¨λ“  ν”„λ‘œμ νŠΈμ˜ 컴파일 SDKλ₯Ό λ³€κ²½ν•˜λŠ” 데 μœ μš©ν•œ λΉ„νŠΈκ°€ 끝에 μžˆμŠ΅λ‹ˆλ‹€.

buildscript {
    repositories {
        jcenter()
        google()
        mavenLocal()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        configurations.all {
            resolutionStrategy.eachDependency { DependencyResolveDetails details ->
                def requested = details.requested
                if (requested.group == 'com.google.android.gms') {
                    details.useVersion '12.0.1'
                }
            }
        }
        mavenLocal()
        jcenter()
        maven {
            url "https://jitpack.io"
        }
        maven {
            url 'https://maven.google.com'
        }
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
    }
}

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                compileSdkVersion 26
                buildToolsVersion '26.0.2'
            }
        }
    }
}

이것은 cordova-android-play-services-gradle-release λ₯Ό μ„€μΉ˜ν•˜μ—¬ μˆ˜μ •λœ κ²ƒμœΌλ‘œ

@soumak77 κ°μ‚¬ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰