Android
omkörningsfilen
Sök…
Anmärkningar
fastlane är ett verktyg för iOS-, Mac- och Android-utvecklare för att automatisera tråkiga uppgifter som att generera skärmdumpar, hantera leveransprofiler och släppa din applikation.
Dokument: https://docs.fastlane.tools/
Källkod: https://github.com/fastlane/fastlane
Fastfile för att bygga och ladda upp flera smaker till Beta av Crashlytics
Detta är ett exempel på Fastfile- inställningar för en app med flera smaker. Det ger dig ett alternativ att bygga och distribuera alla smaker eller en enda smak. Efter utplaceringen rapporterar den till Slack statusen för utplaceringen och skickar ett meddelande till testare i Beta av Crashlytics testargrupp.
För att bygga och distribuera alla smaker använder du:
fastlane android beta
För att bygga en enda APK och använda användning:
fastlane android beta app:flavorName
Med en enda Fastlane-fil kan du hantera iOS-, Android- och Mac-appar. Om du använder den här filen bara för en app platform
är inte nödvändig.
Hur det fungerar
-
android
argument berättar fastlane att vi kommer att använda:android
plattform. - Inuti
:android
plattformen kan du ha flera körfält. För närvarande har jag bara:beta
. Det andra argumentet från kommandot ovan specificerar den fil som vi vill använda. -
options[:app]
- Det finns två Gradle- uppgifter. Först körs
gradle clean
. Om du gav en smak medapp
nyckel, Fastfile körningargradle assembleReleaseFlavor
. Annars kör detgradle assembleRelease
att bygga alla build-smaker. - Om vi bygger för alla smaker lagras en rad genererade APK-filnamn i
SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS
. Vi använder detta för att gå igenom genererade filer och distribuera dem till Beta av Crashlytics .notifications
ochgroups
fält är valfria. De används för att meddela testare som är registrerade för appen på Beta av Crashlytics . - Om du känner till Crashlytics kanske du vet att för att aktivera en app i portalen måste du köra den på en enhet och använda den först. Annars kommer Crashlytics att anta appen inaktiv och kasta ett fel. I det här scenariot fångar jag det och rapporterar till Slack som ett misslyckande, så att du vet vilken app som är inaktiv.
- Om installationen lyckas skickar fastlane ett framgångsmeddelande till Slack .
-
#{/([^\/]*)$/.match(apk)}
detta regex används för att få smaknamn från APK-sökvägen. Du kan ta bort den om den inte fungerar för dig. -
get_version_name
ochget_version_code
är två Fastlane- plugins för att hämta appversionsnamn och kod. Du måste installera dessa ädelstenar om du vill använda eller så kan du ta bort dem. Läs mer om plugins här. - Det
else
uttalandet kommer att köras om du bygger och distribuerar en enda APK. Vi behöver inte tillhandahållaapk_path
till Crashlytics eftersom vi bara har en app. -
error do
block i slutet används för att bli meddelad om något annat går fel under körningen.
Notera
Glöm inte att ersätta SLACK_URL
, API_TOKEN
, GROUP_NAME
och BUILD_SECRET
med dina egna referenser.
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-körfält för att bygga och installera alla smaker för en viss byggtyp på en enhet
Lägg till denna körfält till din Fastfile och kör fastlane installAll type:{BUILD_TYPE}
i kommandoraden. Byt ut BUILD_TYPE
med den BUILD_TYPE
du vill bygga.
Till exempel: fastlane installAll type:Debug
Detta kommando bygger alla smaker av en viss typ och installerar det på din enhet. För närvarande fungerar det inte om du har fler än en enhet ansluten. Se till att du bara har en. I framtiden planerar jag att lägga till alternativ för att välja målenhet.
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