Android

μ•ˆλ“œλ‘œμ΄λ“œ μŠ€νŠœλ””μ˜€μ—μ„œ ꡬ글 λ§΅ μ‚¬μš©ν•˜κΈ°

567Rabbit 2024. 6. 18. 17:40

ꡬ글맡 μ‚¬μš©ν•˜κΈ°

 

https://developers.google.com/maps/documentation/android-sdk/secrets-gradle-plugin?hl=ko

 

 

- 이곳에 라이브러리 μ„€μΉ˜μ™€ ν™˜κ²½μ„€μ •μ— λŒ€ν•œ 정보가 λ‚˜μ™€μžˆλ‹€.

 

 


API ν‚€ κ°’ μƒμ„±ν•˜κ³  μ•ˆλ“œλ‘œμ΄λ“œ μŠ€νŠœλ””μ˜€μ— μž‘μ„±ν•˜κΈ°

 

https://console.cloud.google.com/welcome/new?project=igneous-axiom-426807-f3

 

Google ν΄λΌμš°λ“œ ν”Œλž«νΌ

둜그인 Google ν΄λΌμš°λ“œ ν”Œλž«νΌμœΌλ‘œ 이동

accounts.google.com

 

 

μ‚¬μš© ν΄λ¦­ν•˜κΈ°

 

 

 

 

μ‚¬μš©μž API ν‚€ 생성 ν›„, API ν‚€λ₯Ό ν΄λ¦­ν•΄μ„œ λ“€μ–΄κ°€μ„œ

 

 

 

 

Maps SDK for Android APIλ₯Ό μ„ νƒν•˜μ—¬ μ €μž₯ λˆ„λ₯΄κ³ ,

 

 

 

 

 

ν‚€ ν‘œμ‹œ λˆŒλŸ¬μ„œ ν‚€ κ°’ μ €μž₯해두기

 

 

 

 

 

Android -> Project Files둜 μ΄λ™ν•˜κΈ°

 

 

 

 

 

 

local.defaults.properties 와 secrets.properties 파일 λ§Œλ“€κ³ , local.defaults.propertiesλ₯Ό μ•„λž˜μ™€ 같이 μž‘μ„±ν•œλ‹€.

 

 

 

API ν‚€ λ³΅μ‚¬ν•œ 것 secrets.properties에 μž‘μ„±ν•˜κΈ°

 

 



 

 

build.gradle (Project)

 

 

java
λ‹«κΈ°
buildscript { ​​​​dependencies { ​​​​​​​​classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1") ​​​​} }

 

 

 

 

 

 

build.gradle (:app)

 

 

java
λ‹«κΈ°
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")

 

 

 

 

 

java
λ‹«κΈ°
secrets { ​​​​// Optionally specify a different file name containing your secrets. ​​​​// The plugin defaults to "local.properties" ​​​​propertiesFileName = "secrets.properties" ​​​​// A properties file containing default secret values. This file can be ​​​​// checked in version control. ​​​​defaultPropertiesFileName = "local.defaults.properties" ​​​​// Configure which keys should be ignored by the plugin by providing regular expressions. ​​​​// "sdk.dir" is ignored by default. ​​​​ignoreList.add("keyToIgnore") // Ignore the key "keyToIgnore" ​​​​ignoreList.add("sdk.*") // Ignore all keys matching the regexp "sdk.*" }

 

 

 

 

 

java
λ‹«κΈ°
​​​​buildFeatures { ​​​​​​​​buildConfig = true ​​​​}
java
λ‹«κΈ°
implementation("com.google.android.gms:play-services-maps:18.2.0")

 

 

 

 

Sync Now λˆ„λ₯΄κΈ°

 

 

 

 

 

Manifest μ„€μ •ν•˜κΈ°

 

 

 

java
λ‹«κΈ°
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

java
λ‹«κΈ°
<meta-data ​​​​android:name="com.google.android.geo.API_KEY" ​​​​android:value="${MAPS_API_KEY}"/> <meta-data ​​​​android:name="com.google.android.gms.version" ​​​​android:value="@integer/google_play_services_version"/>

 

 

 

 

 

activity_main μž‘μ„±ν•˜κΈ°

 

java
λ‹«κΈ°
<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" ​​​​xmlns:app="http://schemas.android.com/apk/res-auto" ​​​​xmlns:tools="http://schemas.android.com/tools" ​​​​android:id="@+id/map" ​​​​android:layout_width="match_parent" ​​​​android:layout_height="match_parent" ​​​​tools:context=".MainActivity" ​​​​android:name="com.google.android.gms.maps.SupportMapFragment"> </fragment>

 

 

 

 

 

MainActivity μž‘μ„±ν•˜κΈ°

 

java
λ‹«κΈ°
package com.~.map; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; public class MainActivity extends AppCompatActivity { ​​​​@Override ​​​​protected void onCreate(Bundle savedInstanceState) { ​​​​​​​​super.onCreate(savedInstanceState); ​​​​​​​​setContentView(R.layout.activity_main); ​​​​​​​​SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); ​​​​​​​​// 지도 μ€€λΉ„λ˜λ©΄ ν•΄λ‹¬λΌλŠ” ν•¨μˆ˜ ​​​​​​​​mapFragment.getMapAsync(new OnMapReadyCallback() { ​​​​​​​​​​​​@Override ​​​​​​​​​​​​public void onMapReady(@NonNull GoogleMap googleMap) { ​​​​​​​​​​​​​​​​// 맡이 μ€€λΉ„λ˜λ©΄ λ‚΄ μœ„μΉ˜λ₯Ό μ€‘μ‹¬μœΌλ‘œ 지도가 λ‚˜μ˜€κ²Œ 해라 λΌλŠ” μ½”λ“œ μž‘μ„± ​​​​​​​​​​​​​​​​// 1. νŠΉμ • μœ„λ„, 경도 κ°’μœΌλ‘œ μ§€λ„μ˜ μœ„μΉ˜λ₯Ό μ μš©μ‹œν‚€λŠ” μ½”λ“œ ​​​​​​​​​​​​​​​​LatLng myLocation = new LatLng(37.5428, 126.6772); //ν‘œν˜„ν•˜κ³ μž ν•˜λŠ” μœ„μΉ˜μ˜ μœ„λ„ 경도 μž‘μ„± ​​​​​​​​​​​​​​​​googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 17)); ​​​​​​​​​​​​​​​​// 2. 마컀λ₯Ό λ§Œλ“€μ–΄μ„œ, 지도에 ν‘œμ‹œν•˜λŠ” μ½”λ“œ ​​​​​​​​​​​​​​​​MarkerOptions markerOptions = new MarkerOptions(); ​​​​​​​​​​​​​​​​markerOptions.position(myLocation).title("연희직업전문학ꡐ"); ​​​​​​​​​​​​​​​​// 3. 마컀λ₯Ό ν΄λ¦­ν•˜λ©΄, λ™μž‘ν•˜λŠ” μ½”λ“œ μž‘μ„± ​​​​​​​​​​​​​​​​// μ€‘μš”! μœ„μ—μ„œ MarkerOptionsλ₯Ό λ§Œλ“€ λ•Œ, νƒœκ·Έλ₯Ό λ‹¬μ•„μ€˜μ„œ ꡬ뢄해 μ€˜μ•Ό ν•œλ‹€. ​​​​​​​​​​​​​​​​googleMap.addMarker(markerOptions).setTag(0); ​​​​​​​​​​​​​​​​googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { ​​​​​​​​​​​​​​​​​​​​@Override ​​​​​​​​​​​​​​​​​​​​public boolean onMarkerClick(@NonNull Marker marker) { ​​​​​​​​​​​​​​​​​​​​​​​​int tag = (int) marker.getTag(); ​​​​​​​​​​​​​​​​​​​​​​​​Toast.makeText(MainActivity.this, ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​"μ œκ°€ λˆ„λ₯Έ 마컀의 νƒœκ·ΈλŠ” : " + tag + "\n 타이틀은 : " + marker.getTitle(), ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​Toast.LENGTH_SHORT).show(); ​​​​​​​​​​​​​​​​​​​​​​​​return false; ​​​​​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​​​​​}); ​​​​​​​​​​​​​​​​// 4. μ§€λ„μ˜ νƒ€μž…μ„ μ„€μ •ν•˜λŠ” μ½”λ“œ ​​​​​​​​​​​​​​​​// googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); ​​​​​​​​​​​​} ​​​​​​​​}); ​​​​} }