Tách biệt môi trường dev và prod Firebase


154

Tôi đang xem xét sử dụng Firebase làm MBaaS, tuy nhiên tôi không thể tìm thấy bất kỳ giải pháp đáng tin cậy nào cho vấn đề sau:

Tôi muốn thiết lập hai môi trường Firebase riêng biệt, một cho phát triển và một cho sản xuất, nhưng tôi không muốn sao chép thủ công các tính năng (ví dụ: thiết lập cấu hình từ xa, quy tắc thông báo, v.v.) giữa môi trường phát triển và sản xuất .

Có công cụ hay phương pháp nào tôi có thể dựa vào không? Thiết lập cấu hình từ xa hoặc quy tắc thông báo từ đầu có thể là nhiệm vụ khó khăn và quá rủi ro.

Bất kỳ đề xuất? Có cách tiếp cận nào tốt hơn là có hai môi trường riêng biệt?

Trước khi bạn đăng câu trả lời khác cho câu hỏi giải thích cách thiết lập các tài khoản Firebase riêng biệt: đó không phải là câu hỏi, hãy đọc lại. Câu hỏi là: làm thế nào để CHUYỂN các thay đổi giữa các tài khoản dev và prod riêng biệt hoặc bất kỳ giải pháp nào tốt hơn so với sao chép thủ công giữa chúng.


3
sẽ là tuyệt vời để có điều này như là một tính năng!
Patrick


@Timmerz Xem câu trả lời đầu tiên: chỉ liên quan đến lưu trữ và cơ sở dữ liệu, nhưng không liên quan đến các tính năng khác.
cuộc đua

Tôi đã gặp một vấn đề tương tự. Tôi đã giải quyết nó theo cách sau: Kiểm tra cái này: stackoverflow.com/questions/51646512/. Tôi đã giải quyết vấn đề này theo cách sau: 1.tạo cấu hình gỡ lỗi Vui lòng theo liên kết Medium.com/@Miqubel/ Mạnh vừa.com /@Miqubel/ . 2. Sau đó, tạo cơ sở dữ liệu mới Vui lòng theo liên kết: firebase.google.com/docs/database/usage/ cảm 3.Trong mã của bạn dựa trên hương vị sản phẩm của bạn kết nối với cơ sở dữ liệu tương ứng trên sản phẩm
Kunal Khaire

1
@LOGiah Lý do của bạn để tạo một thẻ hoàn toàn mới là gì? Điều này có giải quyết bất kỳ công nghệ mới nào chưa được bao phủ bởi [căn cứ hỏa lực] không?
Michael Dodd

Câu trả lời:


24

Như mọi người đã chỉ ra - bạn cần nhiều hơn một dự án / cơ sở dữ liệu.

Nhưng để trả lời câu hỏi của bạn về nhu cầu có thể sao chép cài đặt / dữ liệu, v.v. từ phát triển sang sản xuất. Tôi có cùng một nhu cầu. Một vài tháng trong quá trình phát triển và thử nghiệm, tôi không muốn sao chép dữ liệu theo cách thủ công.

Kết quả của tôi là sao lưu dữ liệu vào thùng lưu trữ, sau đó khôi phục dữ liệu từ đó vào cơ sở dữ liệu khác. Đó là một cách khá thô sơ để làm điều đó - và tôi đã thực hiện sao lưu / khôi phục toàn bộ cơ sở dữ liệu - nhưng bạn có thể có thể nhìn theo hướng đó để có cách kiểm soát tốt hơn. Tôi chưa sử dụng nó - nó rất mới - nhưng đây có thể là một giải pháp: NPM Module Firestore-export-import

Chỉnh sửa : Thông tin sao lưu / xuất / nhập Firestore tại đây Cloud Firestore Xuất và nhập dữ liệu

Nếu bạn đang sử dụng Firebase RTDB chứ không phải Firestore - tài liệu này có thể giúp: Sao lưu tự động Firebase

Bạn sẽ cần đặt quyền chính xác để cho phép cơ sở dữ liệu sản xuất của bạn truy cập vào cùng một nhóm lưu trữ như sự phát triển của bạn. Chúc may mắn.


Cảm ơn, đây là câu trả lời tốt nhất cho đến nay.
cuộc đua

4
Đối với bất kỳ dự án nào có vài nghìn người dùng, cuối cùng bạn sẽ chuyển một số dữ liệu từ cơ sở dữ liệu sản xuất sang máy chủ dàn dựng hoặc phát triển. Thật đáng tiếc vì điều này không được tích hợp trong Firebase, nhưng đó là điều cần phải được thực hiện cho bất kỳ loại dự án nào.

Tôi đã nhập cơ sở dữ liệu bằng hướng dẫn "Di chuyển dữ liệu giữa các dự án". Nhưng nó đã tạo ra cơ sở dữ liệu Firestore trong chế độ Datastore. Tôi cần sử dụng nó trong chế độ bản địa.
Debiprasad

54

Nếu bạn đang sử dụng công cụ firebase, có một lệnh firebase usecho phép bạn thiết lập dự án nào bạn đang sử dụng chofirebase deploy

firebase use --addsẽ đưa ra một danh sách các dự án của bạn, chọn một dự án và nó sẽ yêu cầu bạn cho một bí danh. Từ đó bạn có thể firebase use aliasfirebase deploysẽ đẩy mạnh vào dự án đó.

Trong sử dụng cá nhân của tôi, tôi có my-app và my-app-dev như các dự án trong bảng điều khiển Firebase.


1
Theo như tôi hiểu thì các công cụ Firebase rất hữu ích để triển khai các tệp và cơ sở dữ liệu được lưu trữ, nhưng nó không làm gì với cơ sở dữ liệu, phân tích hoặc cấu hình từ xa. Hay tôi đang thiếu một cái gì đó?
cuộc đua

@racs có vẻ như đây là gần đây, nhưng tôi sắp bắt đầu thử sử dụng cli để gieo dữ liệu / bảo trì dữ liệu trên ví dụ dev của tôi: firebase.googleblog.com/2015/11/ Lỗi
Chris

@chris cảm ơn, đó là một sự khởi đầu ít nhất. Nhưng có vẻ như một điều khá phức tạp để làm. Chúc may mắn!
cuộc đua

@racs cho đến khi dữ liệu gieo hạt và dòng phát triển đi, nó hoạt động rất tốt. Tôi có thể thay đổi đáng tin cậy cơ sở dữ liệu dev của mình dựa trên các lệnh chạy npm được phiên bản và dữ liệu hạt giống được phiên bản. Bạn đang tìm cách sao chép dữ liệu meta nhưng tôi không thấy điều đó thật đáng tiếc.
Chris

@Chris cảm ơn vì đã cho chúng tôi biết về nó. Đây vẫn là một câu hỏi mở theo như tôi có thể nói.
cuộc đua

25

Tôi hiện không sử dụng Firebase, nhưng xem xét nó như chính mình. Có vẻ như cách để đi là tạo ra một dự án hoàn toàn riêng biệt trên bàn điều khiển. Có một blogpost giới thiệu điều này trên trang web Firebase cũ, dường như bây giờ sẽ bị xóa. https://web.archive.org/web/20160310115701/https://www.firebase.com/blog/2015-10-29-managing-development-envirments.html

Ngoài ra cuộc thảo luận này cũng đề xuất tương tự: https://groups.google.com/forum/#!msg/firebase-talk/L7ajIJoHPcA/7dsNUTDlyRYJ


2
Cảm ơn câu trả lời. Có hai dự án riêng biệt rất có thể là lựa chọn duy nhất. Tuy nhiên, sao chép dữ liệu giữa chúng là phức tạp nhất. Tôi tự hỏi liệu Firebase Tools có thể sao chép quy tắc, thiết lập đối tượng hay không, v.v. Dường như với tôi, nó chỉ xử lý các hoạt động liên quan đến cơ sở dữ liệu: github.com/firebase/firebase-tools
racs

2
Không chắc chắn nếu bạn đã thấy điều này, nhưng bạn có thể chạy dev của mình với máy chủ firebase
mẹo

2
Đó chính xác là những gì tôi đã làm, nhưng câu hỏi là: làm thế nào bạn có thể sao chép bất kỳ thiết lập nào giữa hai môi trường? Ví dụ. cấu hình từ xa, thiết lập đối tượng, vv? Thêm chúng thủ công vào môi trường sản xuất là khá dễ bị lỗi.
cuộc đua

2
Một vấn đề tôi gặp phải là xác thực với nhiều phiên bản firebase với cùng một gói và chữ ký. Bảng điều khiển sẽ không cho phép bạn thêm cùng gói sha1 vào nhiều dự án, vì vậy điều này có thể không thực hiện được. Các tài liệu nói rằng có một công việc xung quanh khách hàng danh sách trắng, nhưng tôi đã không thành công với điều đó. Các công việc khác xung quanh là các tên gói riêng biệt (chính xác hơn là 'applicationIds)' nhưng sau đó có các biến chứng khác
Patrick

3
Cũng đọc điều này: firebase.googleblog.com/2016/08/
cuộc đua

8

Cách tôi đã làm:

  1. Tôi đã có 2 dự án trên firebase - một cho DEV cho dự án SẢN XUẤT
  2. Tại địa phương, ứng dụng của tôi cũng có 2 chi nhánh - một chi nhánh có tên DEV, còn lại có tên là SẢN PHẨM
  3. Trong nhánh DEV của tôi, tôi luôn có tệp JSON của dự án căn cứ hỏa lực DEV và tương tự như vậy cho SẢN PHẨM

Bằng cách này, tôi không bắt buộc phải duy trì JSON của mình.


1
Tôi hiểu, nhưng không có giải pháp chung cho câu hỏi được hỏi theo phiên bản firebase mới nhất. Bạn phải chơi với các tùy chọn hiện tại và rút ra một thực tiễn tốt nhất. Có thể câu trả lời của tôi không chỉ ra điều này, nhưng tôi chỉ muốn giúp người hỏi với quan điểm của tôi.
Kunal Khaire

5

Blogpost này mô tả một cách tiếp cận rất đơn giản với loại xây dựng gỡ lỗi và phát hành.

Tóm lại:

  • Tạo một ứng dụng mới trên Firebase cho mỗi loại bản dựng bằng hậu tố id ứng dụng khác nhau.
  • Định cấu hình dự án Android của bạn với tệp JSON mới nhất.
  • Sử dụng applicationIdSuffix, thay đổi Id ứng dụng để khớp với các Ứng dụng khác nhau trên Firebase tùy thuộc vào loại bản dựng.

=> xem blogpost để biết mô tả chi tiết.

Nếu bạn muốn sử dụng các hương vị xây dựng khác nhau, hãy đọc blogpost rộng rãi này từ blog firebase chính thức. Nó chứa rất nhiều thông tin có giá trị.

Mong rằng sẽ giúp!


Cảm ơn vì đã trả lời. Tôi đã có thể thiết lập các ứng dụng khác nhau, nhưng tôi vẫn đang tìm kiếm một phương pháp để sao chép các thiết lập khác nhau từ ứng dụng FB dev sang ứng dụng FB prod như tôi đã hỏi trong câu hỏi. (Ví dụ: cài đặt đối tượng hoặc cấu hình từ xa.)
racs

2
Xin lưu ý rằng điều này tạo ra hai ứng dụng trong cùng một dự án, do đó bạn sẽ tách một số dịch vụ như phân tích nhưng cơ sở dữ liệu sẽ được chia sẻ để không phải là một môi trường tách biệt thực sự như được giải thích ở đây firebase.googleblog.com/2016/08/
Thẻ

5

Bạn sẽ cần phải quản lý các loại bản dựng khác nhau

Làm theo

  1. Đầu tiên, tạo một dự án mới tại bảng điều khiển Firebase, đặt tên id là YOUAPPNAME-DEV

  2. Nhấp vào nút "Thêm ứng dụng Android" và tạo một ứng dụng mới. Đặt tên là com.yourapp.debug chẳng hạn. Tệp google-services.json mới sẽ được tải xuống tự động

  3. Trong thư mục src dự án của bạn, tạo thư mục mới với tên "gỡ lỗi" và sao chép tệp google-services.json mới tại đây

  4. Trong cấp độ mô-đun build.gradle thêm điều này

    debug {
            applicationIdSuffix ".debug"
        }
    

Bây giờ khi bạn xây dựng một bản sửa lỗi, hãy xây dựng google-services.json từ thư mục "gỡ lỗi" và khi nào bạn sẽ xây dựng trong chế độ phát hành, google-services.json từ thư mục gốc của mô-đun sẽ được xem xét.


Trong trường hợp bất kỳ ai cần tài liệu chính thức, Plugin Google Services Gradle biết tìm google-services.json theo thư mục con của srcbuildType như được giải thích ở đây developers.google.com/android/guides/
tựa

4

Để giải quyết vấn đề này cho tình huống của tôi, tôi đã tạo ra ba dự án Firebase, mỗi dự án có cùng một dự án Android (nghĩa là giống nhau applicationIdmà không sử dụng applicationIdSuffixđề xuất của người khác). Điều này dẫn đến ba tệp google-services.json mà tôi đã lưu trữ trong máy chủ Tích hợp liên tục (CI) của mình dưới dạng các biến môi trường tùy chỉnh . Đối với mỗi giai đoạn của quá trình xây dựng (dev / staging / prod), tôi đã sử dụng tệp google-services.json tương ứng.

Đối với dự án Firebase được liên kết với dev, trong dự án Android của nó, tôi đã thêm dấu vân tay chứng chỉ SHA gỡ lỗi. Nhưng để dàn dựng và sản xuất tôi chỉ cần CI ký APK.

Đây là một bản rút gọn .gitlab-ci.ymlhoạt động cho thiết lập này:

# This is a Gitlab Continuous Integration (CI) Pipeline definition
# Environment variables:
#   - variables prefixed CI_ are Gitlab predefined environment variables (https://docs.gitlab.com/ee/ci/variables/predefined_variables.html)
#   - variables prefixed GNDR_CI are Gitlab custom environment variables (https://docs.gitlab.com/ee/ci/variables/#creating-a-custom-environment-variable)
#
# We have three Firebase projects (dev, staging, prod) where the same package name is used across all of them but the
# debug signing certificate is only provided for the dev one (later if there are other developers, they can have their
# own Firebase project that's equivalent to the dev one).  The staging and prod Firebase projects use real certificate
# signing so we don't need to enter a Debug signing certificate for them.  We don't check the google-services.json into
# the repository.  Instead it's provided at build time either on the developer's machine or by the Gitlab CI server
# which injects it via custom environment variables.  That way the google-services.json can reside in the default
# location, the projects's app directory.  The .gitlab-ci.yml is configured to copy the dev, staging, and prod equivalents
# of the google-servies.json file into that default location.
#
# References:
# https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html
# /programming/57129588/how-to-setup-firebase-for-multi-stage-release

stages:
  - stg_build_dev
  - stg_build_staging
  - stg_build_prod

jb_build_dev:
  stage: stg_build_dev
  image: jangrewe/gitlab-ci-android
  cache:
    key: ${CI_PROJECT_ID}-android
    paths:
      - .gradle/
  script:
    - cp ${GNDR_CI_GOOGLE_SERVICES_JSON_DEV_FILE} app/google-services.json
    - ./gradlew :app:assembleDebug
  artifacts:
    paths:
      - app/build/outputs/apk/

jb_build_staging:
  stage: stg_build_staging
  image: jangrewe/gitlab-ci-android
  cache:
    key: ${CI_PROJECT_ID}-android
    paths:
      - .gradle/
  dependencies: []
  script:
    - cp ${GNDR_CI_GOOGLE_SERVICES_JSON_STAGING_FILE} app/google-services.json
    - ./gradlew :app:assembleDebug
  artifacts:
    paths:
      - app/build/outputs/apk/

jb_build_prod:
  stage: stg_build_prod
  image: jangrewe/gitlab-ci-android
  cache:
    key: ${CI_PROJECT_ID}-android
    paths:
      - .gradle/
  dependencies: []
  script:
    - cp ${GNDR_CI_GOOGLE_SERVICES_JSON_PROD_FILE} app/google-services.json

    # GNDR_CI_KEYSTORE_FILE_BASE64_ENCODED created on Mac via:
    # base64 --input ~/Desktop/gendr.keystore --output ~/Desktop/keystore_base64_encoded.txt
    # Then the contents of keystore_base64_encoded.txt were copied and pasted as a Gitlab custom environment variable
    # For more info see http://android.jlelse.eu/android-gitlab-ci-cd-sign-deploy-3ad66a8f24bf
    - cat ${GNDR_CI_KEYSTORE_FILE_BASE64_ENCODED} | base64 --decode > gendr.keystore

    - ./gradlew :app:assembleRelease
      -Pandroid.injected.signing.store.file=$(pwd)/gendr.keystore
      -Pandroid.injected.signing.store.password=${GNDR_CI_KEYSTORE_PASSWORD}
      -Pandroid.injected.signing.key.alias=${GNDR_CI_KEY_ALIAS}
      -Pandroid.injected.signing.key.password=${GNDR_CI_KEY_PASSWORD}
  artifacts:
    paths:
      - app/build/outputs/apk/

Tôi hài lòng với giải pháp này vì nó không dựa vào các thủ thuật build.gradle mà tôi tin là quá mờ và do đó khó duy trì. Ví dụ, khi tôi thử các cách tiếp cận bằng cách sử dụng applicationIdSuffixvà các cách khác nhau buildType, tôi thấy rằng tôi không thể có các bài kiểm tra cụ để chạy hoặc thậm chí biên dịch khi tôi cố gắng chuyển đổi các kiểu xây dựng bằng cách sử dụng testBuildType. Android dường như cung cấp các thuộc tính đặc biệt debug buildTypemà tôi không thể kiểm tra để hiểu.

Theo kinh nghiệm của tôi, hầu như không phải là minh bạch và dễ bảo trì, theo kinh nghiệm của tôi. Thật vậy, cách tiếp cận mà tôi đã mô tả có hiệu quả: Khi tôi chạy từng APK được tạo bởi CI trên trình giả lập, bước "Chạy ứng dụng của bạn để xác minh cài đặt" của bảng điều khiển Firebase đã đi từ

Kiểm tra xem ứng dụng đã liên lạc với máy chủ của chúng tôi chưa. Bạn có thể cần gỡ cài đặt và cài đặt lại ứng dụng của bạn.

đến:

Xin chúc mừng, bạn đã thêm thành công Firebase vào ứng dụng của mình!

cho cả ba ứng dụng khi tôi khởi động từng cái một trong trình giả lập.


Cảm ơn bạn cho tất cả các mô tả chi tiết này, Michael. Tôi đã quản lý kết quả tương tự bằng cách thêm các hương vị riêng biệt và sao chép google-services.json phù hợp trong các thư mục cho mỗi hương vị. Tuy nhiên, đây không phải là câu hỏi của tôi, xin vui lòng đọc lại.
cuộc đua

Tôi đồng ý @racs nhưng thật không may khi tôi viết stackoverflow.com/questions/37450439/ cấp , nó được đánh dấu là một bản sao câu hỏi của bạn bởi stackoverflow.com/users/807126/doug-stevenson
Michael Osofsky

1
Doug ... Bạn đã làm gì! : DI đừng bận tâm câu trả lời của bạn ở đây, tôi chắc chắn nó hữu ích cho một số người đang tìm kiếm giải pháp cho môi trường riêng biệt.
cuộc đua

vâng, chúng tôi đã tìm kiếm một giải pháp cho ứng dụng di động của chúng tôi cần các môi trường riêng biệt với dịch vụ hỏa lực. Đây chắc chắn là một điểm khởi đầu tốt cho chúng tôi. Chúng tôi sẽ thử nó.
LT

2

Firebase có một trang về điều này thông qua cách thiết lập nó cho dev và prod

https://firebase.google.com/docs/fifts/config-env

Đặt cấu hình môi trường cho dự án của bạn Để lưu trữ dữ liệu môi trường, bạn có thể sử dụng các hàm firebase: config: set lệnh trong Firebase CLI. Mỗi khóa có thể được đặt tên bằng cách sử dụng dấu chấm để nhóm cấu hình liên quan với nhau. Hãy nhớ rằng chỉ các ký tự chữ thường được chấp nhận trong các phím; ký tự viết hoa không được phép.

Ví dụ: để lưu trữ ID khách hàng và khóa API cho "Một số dịch vụ", bạn có thể chạy:

firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"

Truy xuất cấu hình môi trường hiện tại Để kiểm tra những gì hiện được lưu trữ trong cấu hình môi trường cho dự án của bạn, bạn có thể sử dụng các hàm firebase: config: get. Nó sẽ xuất ra JSON như thế này:

{
  "someservice": {
    "key":"THE API KEY",
    "id":"THE CLIENT ID"
  }
}

1
Giải quyết theo 404. Lần sau cũng bao gồm các nội dung!
CorayThan

1

Tôi đang cập nhật câu trả lời này dựa trên thông tin tôi vừa tìm thấy.

Bước 1

Trong firebase.google.com, tạo nhiều môi trường của bạn (ví dụ: dev, staging, prod)


mysite-dev

dàn dựng

mysite-prod


Bước 2

a. Di chuyển đến trực tiếp bạn muốn làm mặc định của bạn (ví dụ: dev)

b. Chạyfirebase deploy

c. Sau khi triển khai, chạyfirebase use --add

d. Một tùy chọn sẽ xuất hiện để chọn từ các dự án khác nhau mà bạn hiện có.

Di chuyển đến dự án bạn muốn thêm: dàn dựng mysite và chọn nó.

e. Sau đó, bạn sẽ được yêu cầu một bí danh cho dự án đó. Nhập dàn .

Chạy các mục ae một lần nữa cho prod và dev, để mỗi môi trường sẽ có một bí danh


Biết bạn đang ở trong môi trường nào

Chạy firebase use default (mysite-dev)

* dev (mysite-dev)

staging (mysite-staging)

prod (mysite-dev)

(một trong những môi trường sẽ có dấu hoa thị ở bên trái của nó. Đó là môi trường bạn hiện đang ở. Nó cũng sẽ được tô sáng màu xanh lam)


Chuyển đổi giữa các môi trường

Chạy firebase use staginghoặc firebase use prodđể di chuyển giữa chúng.

Khi bạn ở trong môi trường bạn muốn, hãy chạy firebase deployvà dự án của bạn sẽ triển khai ở đó.

Đây là một vài liên kết hữu ích ...

Tham khảo CLI

Triển khai đến nhiều môi trường

Hi vọng điêu nay co ich.


0

Cách chúng tôi đang làm là bằng cách tạo các tệp khóa json khác nhau cho các môi trường khác nhau. Chúng tôi đã sử dụng tính năng tài khoản dịch vụ theo khuyến nghị của google và có một tệp phát triển và một tệp khác để sản xuất

nhập mô tả hình ảnh ở đây


0

Tạo dự án Tow với Dev và Môi trường sản xuất trên firebase Tải xuống tệp json từ thre

và thiết lập SDK theo: https://firebase.google.com/docs/android/setup Hoặc cho Crashlytics: https://firebase.google.com/docs/crashlytics/get-started?pl platform = android

Đầu tiên, đặt google_service.json tương ứng cho mỗi buildType ở các vị trí sau:

app/src/debug/google_services.json
app/src/test/google_services.json
app/google_services.json

Lưu ý: Root app / google_service.json Tệp này phải ở đó theo các biến thể xây dựng sao chép mã json trong tệp gốc json

Bây giờ, hãy thực hiện một số tác vụ cấp độ trong: build.gradle của ứng dụng để tự động hóa việc chuyển google_service.json thích hợp sang app / google_service.json

sao chép này trong tập tin ứng dụng / Gradle

task switchToDebug(type: Copy) {
description = 'Switches to DEBUG google-services.json'
from "src/debug"
include "google-services.json"
into "."
}

task switchToRelease(type: Copy) {
description = 'Switches to RELEASE google-services.json'
from "src/release"
include "google-services.json"
into "."
}

Tuyệt vời - nhưng phải tự chạy các tác vụ này trước khi bạn xây dựng ứng dụng của mình thì cồng kềnh. Chúng tôi muốn tác vụ sao chép thích hợp ở trên chạy một lúc nào đó trước đây: assemblybleDebug hoặc: assemblybleRelease được chạy. Hãy xem điều gì xảy ra khi: assemblybleRelease được chạy: sao chép tệp này trong tệp / gradlew

Zaks-MBP:my_awesome_application zak$ ./gradlew assembleRelease
Parallel execution is an incubating feature.
.... (other tasks)
:app:processReleaseGoogleServices
....
:app:assembleRelease

Lưu ý: ứng dụng: processReleaseGoogleService. Tác vụ này chịu trách nhiệm xử lý tệp google_service.json gốc. Chúng tôi muốn google_service.json chính xác được xử lý, vì vậy chúng tôi phải chạy tác vụ sao chép của chúng tôi ngay lập tức. Thêm phần này vào build.gradle của bạn. Lưu ý bao vây sau khi định giá.

sao chép này trong tập tin ứng dụng / Gradle

afterEvaluate {
processDebugGoogleServices.dependsOn switchToDebug
processReleaseGoogleServices.dependsOn switchToRelease
}

Bây giờ, bất cứ lúc nào: app: processReleaseGoogleService được gọi, ứng dụng mới được xác định của chúng tôi: app: switchToRelease sẽ được gọi trước. Logic tương tự cho buildType gỡ lỗi. Bạn có thể chạy: app: assemblybleRelease và phiên bản phát hành google_service.json sẽ được tự động sao chép vào thư mục gốc của mô-đun ứng dụng của bạn.


1
Bạn đã đặt rất nhiều năng lượng vào câu trả lời này, nhưng 1. điều này không liên quan gì đến câu hỏi (vui lòng đọc lại), 2. bạn không phải sao chép google-services.jsontệp vào thư mục gốc, nếu bạn giữ nó trong thư mục hương vị đó là hoàn toàn tốt. Thay vào đó assembleReleasebạn chỉ có thể gọi một assembleTestReleasenhiệm vụ.
cuộc đua
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.