문서 / 설정 / Android / HERE

HERE 설정

HERE SDK(Explore Edition을 상정)를 MapConductor에서 쓰는 절차입니다. HERE SDK는 Maven이 아니라 AAR로 배포되기 때문에, 파일을 프로젝트에 두는 절차가 들어갑니다.

MODULE
com.mapconductor:for-here
API KEY
Key ID + Secret
VIEW
HereMapView
TIME
25분
같은 프로바이더, 다른 플랫폼iOSReact

시작하기 전에

Android 개발 환경(Android Studio)
HERE 개발자 계정
Access Key ID와 Access Key Secret
HERE SDK Explore Android의 AAR 파일(4.26 계열)
STEP 01

인증 정보와 AAR을 준비한다

  1. HERE Developer 계정을 만듭니다.
  2. HERE Developer Portal에서 프로젝트를 만듭니다.
  3. Access Key ID와 Secret을 생성합니다.
  4. HERE SDK Explore Android의 AAR을 다운로드합니다. 4.26 계열이면 동작합니다.
STEP 02

AAR을 프로젝트에 둔다

AAR을 프로젝트의 libs/에 둡니다. 파일 이름은 Gradle에서 참조하는 이름과 완전히 일치시켜 주세요.

project layouttext
<project root>/
└── libs/
    └── heresdk-explore-android-4.27.2.0.309975.aar
파일 이름에 포함되는 빌드 번호는 참고값입니다. MapConductor의 개발과 검증은 이 버전으로 하고 있지만, 여기에 고정할 필요는 없습니다. MapConductor는 각 지도 SDK의 고유 기능에 되도록 의존하지 않는 만듦새로 하고 있기 때문에, 버전이 다소 달라도 동작합니다. 실제로 다운로드한 AAR의 파일 이름으로 바꿔 읽어 주세요.
주의
HERE SDK의 AAR은 재배포가 제한되어 있습니다. 공개 저장소에 커밋하지 마세요(.gitignore에 libs/heresdk-*.aar을 추가합니다).
STEP 03

Secrets Gradle Plugin을 넣는다

키를 소스 관리에 두지 않기 위한 구조입니다. 플러그인이 secrets.properties를 읽고, 빌드 시에 AndroidManifest.xml의 플레이스홀더에 값을 끼워 넣습니다.

(root)/build.gradle.ktsKotlin
plugins {
    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1" apply false
}
STEP 04

의존 관계를 추가한다

AAR은 로컬 파일로 참조합니다. 파일 이름은 실제로 둔 것에 맞춰 주세요.

app/build.gradle.ktsKotlin
plugins {
    // ... other plugins
    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
}

dependencies {
    // HERE SDK (local AAR).
    // This build number is only the one MapConductor is developed against —
    // use the file name of the AAR you downloaded.
    implementation(
        files("${rootProject.projectDir}/libs/heresdk-explore-android-4.27.2.0.309975.aar")
    )

    // MapConductor BOM pins every module below
    implementation(platform("com.mapconductor:mapconductor-bom:1.3.1"))

    implementation("com.mapconductor:core")
    implementation("com.mapconductor:for-here")
}
STEP 05

매니페스트와 인증 정보를 설정한다

HERE는 ID와 Secret의 2가지를 씁니다. 양쪽을 플레이스홀더 경유로 넘깁니다.

AndroidManifest.xmlXML
<manifest>
    <!-- Add internet and location permissions -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application>
        <!-- HERE Access Key ID -->
        <meta-data
            android:name="HERE_ACCESS_KEY_ID"
            android:value="${HERE_ACCESS_KEY_ID}" />

        <!-- HERE Access Key Secret -->
        <meta-data
            android:name="HERE_ACCESS_KEY_SECRET"
            android:value="${HERE_ACCESS_KEY_SECRET}" />
    </application>
</manifest>
secrets.propertiesProperties
HERE_ACCESS_KEY_ID=your_actual_here_access_key_id
HERE_ACCESS_KEY_SECRET=your_actual_here_access_key_secret
주의
secrets.properties는 버전 관리에 커밋하지 마세요. .gitignore에 추가해 두면 사고를 막을 수 있습니다. CI에서는 환경 변수 등 다른 안전한 경로로 넘깁니다.

동작 확인

여기까지 보이면 완료

HERE의 지도가 나오면 완료입니다.

TestHere.ktJetpack Compose
@Composable
fun TestHere(modifier: Modifier = Modifier) {
    val mapState = rememberHereMapViewState(
        cameraPosition = MapCameraPosition(
            position = GeoPoint(35.6762, 139.6503),
            zoom = 12.0,
        ),
    )

    // If the map appears, the setup is correct.
    HereMapView(modifier = modifier, state = mapState)
}

지도 디자인

HereMapDesign은 HERE의 맵 스킴에 대응합니다. 낮밤이나 물류용 등, 용도별 스타일이 갖춰져 있습니다.

HereMapDesign
Notes
NormalDay / NormalNight
표준 스타일의 낮・밤
Satellite
위성 화상
HybridDay / HybridNight
위성 화상+도로와 라벨
LiteDay / LiteNight
정보량을 줄인 경량 스타일
LogisticsDay
물류용
RoadNetworkDay
도로 네트워크 중시

잘 안 될 때

지도가 읽히지 않는다

  • secrets.properties의 Access Key ID와 Secret이 올바른지 확인합니다.
  • 키가 유효한지(무효화되지 않았는지) 확인합니다.

AAR을 찾을 수 없다고 한다

  • AAR이 libs/에 있는지 확인합니다.
  • 파일 이름이 build.gradle.kts의 기술과 완전 일치하는지 확인합니다(버전 번호까지).

빌드가 통과하지 않는다

  • 지도 SDK의 좌표와 버전이 버전 카탈로그의 지정과 일치하는지 확인합니다.
  • 저장소 정의가 settings.gradle.kts에 있는지 확인합니다(repositoriesMode가 FAIL_ON_PROJECT_REPOS이면, 모듈 쪽의 repositories는 무시됩니다).
  • 여러 지도 SDK를 동시에 넣고 있는 경우는, 의존의 충돌이 없는지 ./gradlew :app:dependencies로 확인합니다.

다음

HereMapView가 나오면, 다른 프로바이더와 같은 공통 API로 오버레이를 겹칠 수 있습니다.