Github 작업을 사용하여 수동으로 apk 생성
특정 분기의 기능을 테스트해야 하는 경우가 있습니까?그런데 현지에 환경을 만들지 않았어요?아니면 당신은 어디에서 당신의 컴퓨터를 방문할 수 없습니까?아니면 고객/QA가 APK에 특정한 설정과 기능을 제공하기 위해 계속 핑을 하고 있습니까?
이 블로그에서는 Github 작업을 사용하여 APK를 수동으로 생성하여 이러한 문제를 해결하는 방법에 대해 설명합니다.자, 시작합시다.
선결 조건
Github actions.
우리는 어떤 문제를 해결하고 싶습니까?
문제는 작업 환경, 팀 규모 및 고객에 따라 다를 수 있습니다.우리 하나하나를 이해해 봅시다.
우리는 어떻게 이 문제를 해결합니까?
Github Actions는 워크플로우를 실행하기 위해 다양한 트리거 이벤트를 제공합니다.다음은 트리거 이벤트의 예입니다. 예를 들어 주 지점에서 제출, 요청 만들기, 표시 등입니다.
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- main
pull_request:
branches:
- main
branches:
# Push events on main branch
- main
# Push events to branches matching refs/heads/mona/octocat
- 'mona/octocat'
# Push events to branches matching refs/heads/releases/10
- 'releases/**'
tags:
- v1 # Push events to v1 tag
- v1.*
수동으로 이벤트를 트리거하기 위해 Github actions에 workflow dispatch라는 새 트리거 이벤트가 추가되었습니다.다음은 샘플 코드 및 UI입니다.(다음 섹션에서는 자세히 설명합니다.)
on:
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
tags:
description: 'Test scenario tags'
설치 프로그램
우선android에서 설정할 수 있는 파라미터를 설정해야 합니다. 그리고 작업 흐름의GitHub로 이 파라미터를 업데이트할 수 있습니다.그러니까 우리 안드로이드부터
android의 설정 가능한 속성입니다.
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- main
pull_request:
branches:
- main
branches:
# Push events on main branch
- main
# Push events to branches matching refs/heads/mona/octocat
- 'mona/octocat'
# Push events to branches matching refs/heads/releases/10
- 'releases/**'
tags:
- v1 # Push events to v1 tag
- v1.*
on:
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
tags:
description: 'Test scenario tags'
우선android에서 설정할 수 있는 파라미터를 설정해야 합니다. 그리고 작업 흐름의GitHub로 이 파라미터를 업데이트할 수 있습니다.그러니까 우리 안드로이드부터
android의 설정 가능한 속성입니다.
local.properties
파일에 넣었는데, 우리는 보통 VCS에 서명하지 않는다.참고: 모든 파일일 수 있습니다.우리는 단지
build.gradle
중의 그 서류를 지적하고 싶을 뿐이다.local.properties
파일을 만들거나 업데이트합니다(예: this.BASE_URL="https://production.example.com/api/v1"
MAP_KEY="production_sample_key"
RETRY_ATTEMPTS=3
THRESHOLD_VALUE=0.05
응용 프로그램에서 업데이트
build.gradle
, 예를 들어this.def localProperties = new Properties()
localProperties.load(new FileInputStream(rootProject.file("local.properties")))
android {
defaultConfig {
//...
buildConfigField("String", "APP_BASE_URL", localProperties['BASE_URL'])
buildConfigField("int", "APP_RETRY_ATTEMPTS", localProperties['RETRY_ATTEMPTS'])
buildConfigField("float", "APP_THRESHOLD_VALUE", localProperties['THRESHOLD_VALUE'])
}
buildTypes {
debug {
resValue("string", "maps_key", localProperties['MAP_KEY'])
}
release {
//..
}
}
}
우리는 이 프로그램에서
BuildConfig
로컬 속성을 인용할 수 있습니다.class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val txtConfig = findViewById<TextView>(R.id.txtConfig)
val configText = """
BASE URL : ${BuildConfig.APP_BASE_URL}
MAP_KEY : ${getString(R.string.maps_key)}
RE-ATTEMPT : ${BuildConfig.APP_RETRY_ATTEMPTS}
THRESHOLD VALUE : ${BuildConfig.APP_THRESHOLD_VALUE}
""".trimIndent()
txtConfig.text = configText
}
}
참고 동기화할 때 local.properties
가 생성되지 않는 경우도 있습니다BuildConfig
.이것은 우리가 apk를 구축할 때 생성될 것입니다.Ref Github 워크플로우 설정
우리는
.github/workflow
폴더에yaml 파일을 만듭니다.수동으로 작업 흐름을 촉발하려면 workflow_dispatch
를 촉발기로 사용할 것입니다.위에 표시된 실행 워크플로 UI가 표시됩니다.name: Manual Generate APK
on:
workflow_dispatch:
/....
입력 설정 값을 표시하기 위해서, 우리는 여기에 입력을 사용합니다.baseUrl
는 입력 키입니다. 우리는 그것을 사용하여 값을 읽을 것입니다.name: Manual Generate APK
on:
workflow_dispatch:
inputs:
baseUrl:
description: 'Base URL'
required: true
default: 'https://production.example.com/api/v1'
mapKey:
description: 'Map Key'
required: true
default: 'production_sample_key'
reAttempt:
description: 'Number of re-attempts'
default: '3'
thresholdValue:
description: 'Threshold value'
default: '0.05'
required
매개변수를 true
로 설정하면 필수 필드를 나타내는 별표가 표시됩니다.description
UI에 필드 이름으로 표시됩니다.default
매개 변수는 입력 필드에 기본값을 설정합니다.apk를 구축하기 위해 명령을 추가할 것입니다.
- name: Assemble app debug APK
run: bash ./gradlew assembleDebug --stacktrace
bash 스크립트 설정
이 오류가 발견되면 실행을 시도합니다 (915).VCS에 파일을 체크 인하지 않았기 때문입니다.우리는 로컬을 만들 수 있습니다.github 작업 흐름을 실행할 때 속성을 동적으로 표시합니다.우리는 작업 흐름에서 linux 명령을 실행함으로써 이 작업을 실현할 수 있습니다. 이 작업 흐름은 모든 설정 값을 포함하는
local.properties
파일을 만들 것입니다.이 linux 명령 시퀀스를 bash 스크립트에 포장하는 것이 좋습니다.그것은 작업 흐름에서 혼란스러운 코드를 피하고 스크립트를 업데이트하는 데 더 큰 유연성을 제공할 것이다.
현재, 우리는 VCS에서 bash 스크립트 파일
update_properties.sh
을 만들고 서명할 것입니다. 이 파일은 다음과 같습니다.#!/bin/bash
touch local.properties
echo "BASE_URL=\"$1\"" >> local.properties
echo "MAP_KEY=\"$2\"" >> local.properties
echo "RETRY_ATTEMPTS=$3" >> local.properties
echo "THRESHOLD_VALUE=$4" >> local.properties
$1, $2, $3 및 $4는 입력 값에서 스크립트로 전달되는 4개의 매개 변수입니다.apk를 구축하기 전에 bash 스크립트를 실행하려면 입력값을 사용해야 합니다.우리는
github.event.inputs.{key}
속성을 사용하여 이 값을 얻는다.소스 파일local.properties을 찾을 수 있습니다.- name: Print Params Values
run: |
bash update_properties.sh ${{ github.event.inputs.baseUrl }} ${{ github.event.inputs.mapKey }} ${{ github.event.inputs.reAttempt }} ${{ github.event.inputs.thresholdValue }}
- name: Assemble app debug APK
run: bash ./gradlew assembleDebug --stacktrace
흥미로운 사실: 17번의 시도가 실패한 후에 나는 스크립트를 실행할 수 있다.따라서 스크립트가 처음 작동하지 않으면 걱정하지 마세요.저처럼 계속 구글 검색을 해보도록 하겠습니다.😂here
워크플로우 실행
local.properties
또는 이미 사용 중인 다른 파일을 업데이트하려면 스크립트를 변경해야 합니다.예를 들어 이것을 검사해 주세요.지부 기구 기억해야 할 중요한 일
main/master
에 없으면 워크플로우 UI가 표시되지 않습니다.워크플로우를 분기main/master
로 푸시할 때만 워크플로우를 볼 수 있습니다.sed -i
명령은 linux에서 실행되는github 작업에서 작동합니다.mac에 대해 우리는 사용해야 한다sed -i ""
local.properties
가 생성되지 않는 경우도 있습니다BuildConfig
.이것은 우리가 apk를 구축할 때 생성될 것입니다. 심판
결론
GitHub 수동 트리거는 개발자가 처음 작업을 시작할 때 요구한 것이다.특히 고객/QA에 대한 유연성과 용이성을 제공하기 때문에 이 워크플로우를 트리거할 수 있는 API가 하나 더 있어 자동화의 문을 열었습니다.
만약 무슨 문제가 있으면 나에게 연락해도 된다.내 블로그 구독을 통해 업데이트를 유지합니다.시간을 내서 본문을 읽어 주셔서 감사합니다.만약 당신이 이 글을 좋아한다면, 당신의 친구/동료와 공유하고 전파하는 것을 좋아하십시오.
리소스
Reference
이 문제에 관하여(Github 작업을 사용하여 수동으로 apk 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/burhanrashid52/manually-generate-apk-using-github-actions-2c64텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)