app확장자로 등록해야 안드로이드로서 등록, 배포할 수 있다.
Flutter는 안드로이드로서 등록하기 위해서는 키가 필요하다.
1. 키 생성
keytool -genkey -v -keystore upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
생성된 키는 upload-keystore.jks로 저장된다.
2. 생성된 키를 /android/app 내에 저장한다.
3. /android에 key.properties 파일을 생성한다.
비밀번호는 키 생성시 사용했던 비밀번호를 사용하면 된다.
storePassword=비밀번호
keyPassword=비밀번호
keyAlias=upload
storeFile=upload-keystore.jks
4. keyAlias가 일치하지 않는다면 다시 확인할 수 있다.
keytool -list -v -keystore android/app/upload-keystore.jks
5. /app/build.gradle.kts에 인증 관련 항목을 추가한다.
gradle인지 gradle.kts인지 확인해서 적용해야 한다.
// --- 1. Import (파일 맨 위에 필요) ---
import java.util.Properties
import java.io.FileInputStream
val keystoreProperties = Properties()
val keystorePropertiesFile = project.rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
android {
namespace = "내 앱"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
signingConfigs {
create("release") {
if (keystoreProperties.containsKey("storeFile")) {
keyAlias = keystoreProperties.getProperty("keyAlias")
keyPassword = keystoreProperties.getProperty("keyPassword")
storePassword = keystoreProperties.getProperty("storePassword")
storeFile = file(keystoreProperties.getProperty("storeFile"))
} else {
println("WARNING: 'storeFile' key not found in key.properties. Release signing config will be empty.")
}
}
}
buildTypes {
getByName("release") {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
6. 위의 과정에서 발생했던 오류다.
Execution failed for task ':app:signReleaseBundle'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.FinalizeBundleTask$BundleToolRunnable
> java.lang.NullPointerException (no error message)
데이터를 찾을 수 없다는 오류.
원인은 두가지였다.
1. storeFile=upload-keystore.jks 경로에 app/을 넣은 것. 경로가 맞지 않아 생기는 오류다.
해당 gradle은 동일한 파일에 있기 때문에 app/을 넣지 말아야 한다.
2. gradle에서 rootProject가 잘 불러와지지 않는 오류.
val keystorePropertiesFile = rootProject.file("android/key.properties")을 사용할 경우 호출이 되지 않아 빌드 오류가 발생했다.
val keystorePropertiesFile = project.rootProject.file("key.properties") 로 변경하니 빌드가 완료되었다.
'Flutter' 카테고리의 다른 글
| [flutter] webview_flutter를 사용한 flutter 프로젝트에서 웹 뷰 디버깅 하기 (0) | 2026.01.09 |
|---|