본문 바로가기
플러터(flutter)

플러터에서 androidManifest에 localProperties 값 대입하기

by 기계공학 주인장 2023. 8. 8.
반응형

플러터에서 GoogleMap을 사용하려고

 

GoogleMap API Key를 local.properties에 넣고 build.gradle에서 값을 가져와서 androidManifest에서 사용할 수 있도록

 

다음과 같은 방법으로 build.gradle에서 값을 가져왔습니다.

 

manifestPlaceholders = [
            'googleMapsApiKey': localProperties['google_maps_api_key']
        ]

 

그런데 다음과 같은 에러가 발생하네요?

 

Attribute application@name at AndroidManifest.xml:5:9-42 requires a placeholder substitution but no value for <applicationName> is provided.

 

왜 위와 같은 에러가 발생했고

 

어떻게 해결했는지 알려드리겠습니다.

 

참고로 제가 테스트에서 사용한 환경은 다음과 같습니다.

 

OS: Winsdows
Flutter Version: 3.10.3
Dart: 3.0.3

에러가 발생한 원인은 무엇일까?

분명히 local.properties에 넣은 값은 다음과 같은 이름을 가진 값인데

google.maps.apiKey

 

왜 아무 상관없는 androidManifest에 있는 applicationName값을 읽을 수 없게 된건지 이해할 수 없었습니다.

 

값을 읽을 수 없게 됐다는 것은 분명히 뭔가가 덮어씌여진 것이라고 생각했습니다.

 

그렇다면 값을 가져오는 단계인 build.gradle의 이 코드에 문제가 있다는 의미라고 생각했습니다.

 

manifestPlaceholders = [
            'googleMapsApiKey': localProperties['google_maps_api_key']
        ]

 


해결 방법은 무엇일까?

local.properties에 있는 google_maps_api_key 값만 가져와서 넣어보면 어떻까?를 생각해봤습니다.

 

그래서 나온 결론이

 

build.gradle에서 다음과 같이 정의하는 것이었습니다.

 

// 최상위에 정의
def googleMapsApiKey = localProperties.getProperty('google.maps.apiKey')

android {
	...
    
    defaultConfig {
            .....
            // 위에서 가져온 값을 대입
            manifestPlaceholders += [googleMapsApiKey: googleMapsApiKey]
        }
        
    ...
}

 

그리고 androidManifest에서 다음과 같이 사용할 수 있습니다.

 

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="${googleMapsApiKey}" />

 

 

flutter_dotenv을 사용해서 local에 API Key 보관하기

안드로이드에서 API Key 같은 것을 Project 내에 보관해서 사용할 때는 local.properties에 값을 저장해서 사용하곤 했다. 하지만, 해당 방법을 flutter에서 사용하기 쉽지 않기 때문에 플러터의 flutter_dotenv

android-developer.tistory.com

 

반응형


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


댓글