설정 시작!
설정을 끝냈으면 android/app 경로로 앱 서명키를 생성한다.
release모드와 staging모두 같은 keystore를 사용한다. 브랜치마다 따로 생성할 필요 없음
android/app에 밑의 command를 입력한다.
keytool -genkey -v -keystore <내가 원하는 이름>.keystore -alias <내가 원하는 이름> -keyalg RSA -keysize 2048 -validity 10000
android/gradle.properties에 추가
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****
문제는 build gradle설정이 어려웠음
(참고로 buldtype에 CodePushDeploymentKey를 적으면 string.xml에 안써도됨!)
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
++ release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
// staging 키로 이 코드를 넣어주지 않으면 개발할때 빌드가 안됨
resValue "string", "CodePushDeploymentKey", "rxQKsUZ1ArWksRXj6NsAe6MG-lAlSDdg_1NtB"
}
++ release {
// Caution! In production, you need to generate your own keystore file.
// see https://reactnative.dev/docs/signed-apk-android.
signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
resValue "string", "CodePushDeploymentKey", "kQCmZujLyVa7VhKAxUv_MtwOyw38Kc4X5QXK5"
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
++ releaseStaging {
initWith release
matchingFallbacks = ['release']
signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
resValue "string", "CodePushDeploymentKey", "rxQKsUZ1ArWksRXj6NsAe6MG-lAlSDdg_1NtB"
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
주의해야 할 점은 code push는 개발모드에서 작동하지 않는다. 꼭 apk파일을 추출한 후 테스트해봐야 한다.
staging, release 각각 apk를 만들려면
/android 경로에 밑의 커맨드를 입력.
만약 unsigned apk가 나오면 잘못된거임!!! 꼭 확인!!!
//staging
gradlew assembleReleaseStaging
// release
gradlew assembleRelease
추출한 apk를 실행하려면
/// release모드에서는
react-native run-android --variant=release 실행
/// staging에서는
react-native run-android --variant=staging
staging은 기기에 설치가 안돼서 직접 apk를 드라이브에 옮긴다음 다운받아서 설치했음,
코드푸쉬를 사용하다 보면 메이저 혹은 마이너 업그레이드를 시켜서 플레이스토어에 버전을 업그레이드 하여 출시할 때가 있다. 이때는 업그레이드 된 버전의 프로덕션 어플에 직전 코드푸쉬가 영향을 주면 안된다. 이때 버전에 영향을 안 미치고 어떻게 출시하는지 알아보자.
(build.gradle)
"versionName": "1.0.1",
(package.json)
"codepush:android": "appcenter codepush release-react -a myapp -d Production --sourcemap-output --output-dir ./build -m -t 1.0",
"versionName": "1.0.1",
"versionName": "1.1.0"
"versionName": "2.0.0",
versionName 버전과 코드푸쉬 타겟버전은 두번째 자리까지 매치됨. 만약 version3.5.0 이고 build -m -t 3.4",이면 영향을 미치지 않음. 첫번째 자리와 두번째 자리까지 맞아야 영향을 미침
"versionName": "3.5.0",
build -m -t "3.5",
즉!
build.gradle에 version name과 코드푸쉬 타켓 버전(t n.n)에서 첫번째 두번째 자릿수까지 맞아야 코드푸쉬가 적용된다.
만약 플레이스토어에 배포할 일이 있고 코드푸쉬에 영향을 안받으려면 version name을 바꾸고 플레이스토어에 올려야함. 그 후 변경사항이 있으면 코드푸쉬 타겟버전을 바꿔서 올려야함. 만약 안 바꾸면 그 version name이 낮은 앱과 코드푸쉬가 충돌이 날 수 있기 때문에 유의해야함.