Android
तेज गति की लेन
खोज…
टिप्पणियों
fastlane iOS, Mac और Android डेवलपर्स के लिए एक टूल है, जो थकाऊ कार्यों को स्वचालित करने के लिए स्क्रीनशॉट जनरेट करता है, प्रोविजनिंग प्रोफाइल से निपटता है, और आपके एप्लिकेशन को रिलीज़ करता है।
डॉक्स: https://docs.fastlane.tools/
स्रोत कोड: https://github.com/fastlane/fastlane
Crashlytics द्वारा बीटा को कई फ्लेवर बनाने और अपलोड करने के लिए फास्टफ़ाइल
यह एक बहु-स्वाद ऐप के लिए एक नमूना Fastfile सेटअप है। यह आपको सभी स्वादों या एकल स्वाद को बनाने और तैनात करने का विकल्प देता है। परिनियोजन के बाद, यह परिनियोजन की स्थिति को धीमा करने के लिए रिपोर्ट करता है, और क्रैशशीटिक्स परीक्षक समूह द्वारा बीटा में परीक्षकों को एक अधिसूचना भेजता है।
सभी जायके का उपयोग बनाने और तैनात करने के लिए:
fastlane android beta
एक APK बनाने और उपयोग करने के लिए:
fastlane android beta app:flavorName
एकल फास्टलेन फ़ाइल का उपयोग करके, आप आईओएस, एंड्रॉइड और मैक एप्लिकेशन का प्रबंधन कर सकते हैं। यदि आप इस फ़ाइल का उपयोग सिर्फ एक ऐप platform
लिए कर रहे हैं, तो इसकी आवश्यकता नहीं है।
यह काम किस प्रकार करता है
-
android
तर्क फास्टलेन को बताता है कि हम उपयोग करेंगे:android
प्लेटफ़ॉर्म। - इनसाइड
:android
प्लेटफॉर्म पर आपके पास कई लेन हो सकते हैं। वर्तमान में, मेरे पास केवल:beta
लेन है। ऊपर दिए गए कमांड से दूसरा तर्क उस लेन को निर्दिष्ट करता है जिसे हम उपयोग करना चाहते हैं। -
options[:app]
- दो ग्रेडल कार्य हैं। सबसे पहले, यह
gradle clean
रन करता है। आपapp
कुंजी के साथ एक स्वाद प्रदान किया है, Fastfile रनgradle assembleReleaseFlavor
। अन्यथा, यह सभी निर्माण जायके बनाने के लिएgradle assembleRelease
को चलाता है। - यदि हम सभी स्वादों के लिए निर्माण कर रहे हैं, तो उत्पन्न APK फ़ाइल नामों की एक सरणी
SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS
अंदर संग्रहीत की जाती है। हम इसका उपयोग उत्पन्न फ़ाइलों के माध्यम से लूप करने के लिए करते हैं और उन्हें क्रैशलाईटिक्स द्वारा बीटा में तैनात करते हैं।notifications
औरgroups
फ़ील्ड वैकल्पिक हैं। उनका उपयोग क्रैशलीटिक्स द्वारा बीटा पर ऐप के लिए पंजीकृत परीक्षकों को सूचित करने के लिए किया जाता है। - यदि आप Crashlytics से परिचित हैं, तो आप जान सकते हैं कि पोर्टल में किसी ऐप को सक्रिय करने के लिए, आपको इसे एक डिवाइस पर चलाना होगा और पहले इसका उपयोग करना होगा। अन्यथा, Crashlytics ऐप को निष्क्रिय मान लेगा और एक त्रुटि फेंक देगा। इस परिदृश्य में, मैं इसे कैप्चर करता हूं और एक विफलता के रूप में स्लैक को रिपोर्ट करता हूं, इसलिए आपको पता चल जाएगा कि कौन सा ऐप निष्क्रिय है।
- यदि तैनाती सफल होती है, तो फास्टलेन स्लैक के लिए एक सफलता संदेश भेजेगा।
-
#{/([^\/]*)$/.match(apk)}
इस रेगेक्स का उपयोग एपीके पथ से स्वाद नाम प्राप्त करने के लिए किया जाता है। आप इसे हटा सकते हैं यदि यह आपके लिए काम नहीं करता है। -
get_version_name
औरget_version_code
ऐप संस्करण का नाम और कोड प्राप्त करने के लिए दो फास्टलेन प्लगइन्स हैं। यदि आप उपयोग करना चाहते हैं, तो आपको इन रत्नों को स्थापित करना होगा या आप इन्हें हटा सकते हैं। प्लगइन्स के बारे में यहाँ और पढ़ें। - यदि आप एक ही एपीके का निर्माण और तैनाती कर रहे हैं, तो
else
विवरण निष्पादित किया जाएगा। हमेंapk_path
कोapk_path
प्रदान नहीं करना है क्योंकि हमारे पास केवल एक ऐप है। -
error do
अंत में ब्लॉक कुछ और निष्पादन के दौरान गलत हो जाता है, तो सूचना पाने के लिए प्रयोग किया जाता है।
ध्यान दें
अपने स्वयं के क्रेडेंशियल्स के साथ SLACK_URL
, API_TOKEN
, GROUP_NAME
और BUILD_SECRET
को बदलना न भूलें।
fastlane_version "1.46.1"
default_platform :android
platform :android do
before_all do
ENV["SLACK_URL"] = "https://hooks.slack.com/servic...."
end
lane :beta do |options|
# Clean and build the Release version of the app.
# Usage `fastlane android beta app:flavorName`
gradle(task: "clean")
gradle(task: "assemble",
build_type: "Release",
flavor: options[:app])
# If user calls `fastlane android beta` command, it will build all projects and push them to Crashlytics
if options[:app].nil?
lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].each do | apk |
puts "Uploading APK to Crashlytics: " + apk
begin
crashlytics(
api_token: "[API_TOKEN]",
build_secret: "[BUILD_SECRET]",
groups: "[GROUP_NAME]",
apk_path: apk,
notifications: "true"
)
slack(
message: "Successfully deployed new build for #{/([^\/]*)$/.match(apk)} #{get_version_name} - #{get_version_code}",
success: true,
default_payloads: [:git_branch, :lane, :test_result]
)
rescue => ex
# If the app is inactive in Crashlytics, deployment will fail. Handle it here and report to slack
slack(
message: "Error uploading => #{/([^\/]*)$/.match(apk)} #{get_version_name} - #{get_version_code}: #{ex}",
success: false,
default_payloads: [:git_branch, :lane, :test_result]
)
end
end
after_all do |lane|
# This block is called, only if the executed lane was successful
slack(
message: "Operation completed for #{lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].size} app(s) for #{get_version_name} - #{get_version_code}",
default_payloads: [:git_branch, :lane, :test_result],
success: true
)
end
else
# Single APK upload to Beta by Crashlytics
crashlytics(
api_token: "[API_TOKEN]",
build_secret: "[BUILD_SECRET]",
groups: "[GROUP_NAME]",
notifications: "true"
)
after_all do |lane|
# This block is called, only if the executed lane was successful
slack(
message: "Successfully deployed new build for #{options[:app]} #{get_version_name} - #{get_version_code}",
default_payloads: [:git_branch, :lane, :test_result],
success: true
)
end
end
error do |lane, exception|
slack(
message: exception.message,
success: false,
default_payloads: [:git_branch, :lane, :test_result]
)
end
end
end
डिवाइस के लिए दिए गए बिल्ड प्रकार के लिए सभी फ्लेवर बनाने और स्थापित करने के लिए फास्टफाइल लेन
इस लेन को अपने Fastfile में जोड़ें और fastlane installAll type:{BUILD_TYPE}
चलाएँ fastlane installAll type:{BUILD_TYPE}
कमांड लाइन में fastlane installAll type:{BUILD_TYPE}
। BUILD_TYPE
को उस बिल्ड प्रकार से बदलें, BUILD_TYPE
आप बनाना चाहते हैं।
उदाहरण के लिए: fastlane installAll type:Debug
यह कमांड दिए गए प्रकार के सभी स्वादों का निर्माण करेगा और इसे आपके डिवाइस में इंस्टॉल करेगा। वर्तमान में, यह काम नहीं करता है यदि आपके पास एक से अधिक उपकरण संलग्न हैं। सुनिश्चित करें कि आपके पास केवल एक है। भविष्य में मैं लक्ष्य डिवाइस का चयन करने के लिए विकल्प जोड़ने की योजना बना रहा हूं।
lane :installAll do |options|
gradle(task: "clean")
gradle(task: "assemble",
build_type: options[:type])
lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].each do | apk |
puts "Uploading APK to Device: " + apk
begin
adb(
command: "install -r #{apk}"
)
rescue => ex
puts ex
end
end
end