구글에서 제공하는 안드로이드 용 지도 앱(단순히 정해준 위치의 지도를 보여주는 기능) 사용하기 예제를 이용하여 테스트 하고 사용 방법을 익혀 봅니다아주 단순하고 간단하게 만들어 볼 수 있습니다. 웹 주소는

https://developers.google.com/maps/documentation/android-sdk/start


이곳으로 여기에 가면 소스를 그대로 복사해서 테스트 해 볼 수 있습니다웹 페이지에 나와있는 순서대로 작업을 해봅니다물론 순서는 편리에 따라 바꾸어도 상관 없습니다.

 

Step 1. Download Android Studio


https://developer.android.com/studio/index.html


android google map sdk


자신의 운영체제에 맞는 패키지를 다운받아 설치 합니다. 현재 3.5버전 이고 다른 버전이라도 설치되어 있으면 패스. 저는 업데이트 했습니다.

 

Step 2. Install the Google Play services SDK


안드로이드 스튜디오 메뉴에서 팝업 창을 열고

Tools > SDK Manager > Appearance & Behavior > System Settings > Android SDK

우측에서 SDK Tools 탭을 선택 합니다.


android google map sdk


Google Play services 를 체크하여 설치 합니다기존에 설치를 했으면 패스.

 

Step 3. Create a Google Maps project


그냥 생각 나는 이름으로 프로젝트를 하나 생성 합니다.

Activityempty를 선택하고 생성 했습니다.


android google map sdk


Package nameAPI 사이트에 등록을 해야 하니 적당하게 입력 합니다저는 copycoding.tistory.mylocation으로 했습니다.


android google map sdk


Step 4. Get a Google Maps API key


구글에서 API를 사용할 수 있는 키를 생성 합니다. 그리고 package name을 이용하여 등록을 합니다.  기존에 생성한 API 키가 있다면 package name만 신규로 등록 합니다키 생성 방법은 검색하면 자세한 설명들이 바글바글 합니다저도 하나 설명한게 있습니다.

[안드로이드] google map 사용을 위한 API 생성(2018.11)


android google map sdk


Step 5. Hello Map! Take a look at the code


이제 프로젝트에 사이트에 있는 소스를 복사해서 붙여 넣기를 합니다사이트에는 두개의 소스가 있습니다.

 

activity_main.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:tools="http://schemas.android.com/tools"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
android:id="@+id/map"
   
tools:context=".MapsActivity"
   
android:name="com.google.android.gms.maps.SupportMapFragment" />

 

MainActivity.java

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

   
private GoogleMap mMap;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
       
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(
this);
    }

   
@Override
   
public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

       
// Add a marker in Sydney, Australia, and move the camera.
       
LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(
new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(
CameraUpdateFactory.newLatLng(sydney));
    }
}

 

이 두가지로만 하면 오류가 발생 합니다.

사이트에 없지만 추가를 해야 하는 항목이 두개 있습니다간단해서 생략 했을 수도 있습니다.


AndroidManifest.xml

<meta-data
   
android:name="com.google.android.geo.API_KEY"
   
android:value="API 키 값" >
</
meta-data>

Step 4에서 생성한 API 키를 입력 합니다.

 

build.gradle(Module: app)

implementation 'com.google.android.gms:play-services-maps:10.2.0'

라이브러리도 추가 해줍니다.

 

Step 6. Connect an Android device


테스트를 진행하기 위해 가상 디바이스를 생성 하거나 실제 핸드폰을 연결 합니다


android google map sdk


Step 7. Build and run your app


이제 프로그램을 실행 하기만 하면 끝 입니다.


android google map sdk


GPS를 이용 하는게 아니라서 방구석 처밖혀 인터넷만 연결되면 테스트가 가능 합니다.

줌 기능을 추가하지 않아 그냥 세계지도를 보는 느낌이네요.

 

전체 소스

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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:layout_width="match_parent"
   
android:layout_height="match_parent"
   
tools:context=".MainActivity">

    <fragment
xmlns:android="http://schemas.android.com/apk/res/android"
       
xmlns:tools="http://schemas.android.com/tools"
       
android:layout_width="match_parent"
       
android:layout_height="match_parent"
       
android:id="@+id/map"
       
tools:context=".MapsActivity"
       
android:name="com.google.android.gms.maps.SupportMapFragment" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
   
package="copycoding.tistory.gpsmap">
    <application
       
android:allowBackup="true"
       
android:icon="@mipmap/ic_launcher"
       
android:label="@string/app_name"
       
android:roundIcon="@mipmap/ic_launcher_round"
       
android:supportsRtl="true"
       
android:theme="@style/AppTheme">

        <meta-data
           
android:name="com.google.android.geo.API_KEY"
           
android:value="API Key "/>
        <activity
android:name=".MainActivity">
            <intent-filter>
                <action
android:name="android.intent.action.MAIN" />

                <category
android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

 

build.gradle(Module: app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion
29
   
buildToolsVersion '29.0.2'
   
defaultConfig {
        applicationId
"copycoding.tistory.gpsmap"
       
minSdkVersion 16
        
targetSdkVersion 29
       
versionCode 1
       
versionName "1.0"
       
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
   
}
    buildTypes {
        release {
           
minifyEnabled false
           
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
       
}
    }
}

dependencies {
    implementation fileTree(
dir: 'libs', include: ['*.jar'])
    implementation
'androidx.appcompat:appcompat:1.1.0'
   
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
   
implementation 'com.google.android.gms:play-services-maps:10.2.0'
   
testImplementation 'junit:junit:4.12'
   
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
   
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

 

 

 

 

MainActivity.java

package copycoding.tistory.mylocation;

import
androidx.appcompat.app.AppCompatActivity;
import
androidx.fragment.app.FragmentActivity;

import
android.os.Bundle;

import
com.google.android.gms.maps.CameraUpdateFactory;
import
com.google.android.gms.maps.GoogleMap;
import
com.google.android.gms.maps.OnMapReadyCallback;
import
com.google.android.gms.maps.SupportMapFragment;
import
com.google.android.gms.maps.model.LatLng;
import
com.google.android.gms.maps.model.MarkerOptions;

public class
MainActivity extends FragmentActivity implements OnMapReadyCallback {

   
private GoogleMap mMap;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_main);

       
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.
map);
       
mapFragment.getMapAsync(this);
   
}

   
@Override
   
public void onMapReady(GoogleMap googleMap) {
       
mMap = googleMap;

       
// Add a marker in Sydney, Australia, and move the camera.
       
LatLng sydney = new LatLng(-34, 151);
       
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
       
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
   
}
}

 

 - copy coding -


keytool을 이용하여 키를 생성할 때에는 java가 설치 되어 있어야 합니다자바를 설치하고 path가 잡혀있지 않다면 path를 잡아 주고 작업을 하면 편합니다여러 가지 이유로 인하여 java path 를 잡을 수 없는 경우에는 절대경로를 이용하여 keytool을 실행해 주면 됩니다저의 경우는 D:\Java\jdk1.8.0_131에 자바를 설치 하였고 path는 잡지 않고 있습니다. 그런 경우 아래처럼 명령을 실행해서 keytool을 사용 합니다. path를 잡았다면 D:\Java\jdk1.8.0_131\bin\ 는 생략하면 됩니다.

 

D:\Java\jdk1.8.0_131\bin\keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android


keytool


C:\>D:\Java\jdk1.8.0_131\bin\keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

keytool 오류: java.lang.Exception: 키 저장소 파일이 존재하지 않음: C:\Users\user\.android\debug.keystore

java.lang.Exception: 키 저장소 파일이 존재하지 않음: C:\Users\user\.android\debug.keystore

        at sun.security.tools.keytool.Main.doCommands(Main.java:745)

        at sun.security.tools.keytool.Main.run(Main.java:343)

        at sun.security.tools.keytool.Main.main(Main.java:336)


[키 저장소 파일이 존재하지 않음] 이라는 오류가 발생하였군요이런 경우는 간단하게 생성을 할 수 있도록 [-genkey] d옵션을 추가해 줍니다.

D:\Java\jdk1.8.0_131\bin\keytool -genkey -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

 

만일 생성시 이름, 국가, ,시를 입력하도록 물어보면 그냥 엔터키를 눌러도 된다.


keytool


C:\>D:\Java\jdk1.8.0_131\bin\keytool -genkey -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

별칭 이름: androiddebugkey

생성 날짜: 2019. 11. 26

항목 유형: PrivateKeyEntry

인증서 체인 길이: 1

인증서[1]:

소유자: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown

발행자: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown

일련 번호: 6668f1e2

적합한 시작 날짜: Tue Nov 26 22:21:02 GMT+09:00 2019, 종료 날짜: Mon Feb 24 22:21:02 GMT+09:00 2020

인증서 지문:

         MD5: 80:3E: AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA

         SHA1: D4:06:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA         SHA256:45:7E:94:79:5E:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA

         서명 알고리즘 이름: SHA1withDSA

         버전: 3

 

확장:

 

#1: ObjectId: 2.5.29.14 Criticality=false

SubjectKeyIdentifier [

KeyIdentifier [

0000: B0 2C 9F AA AA AA AA AA AA AA AA AA AA AA AA AA.,.a.........a.

0010: AA 06 AA A2                                        ..<.

]

]


오류 없이 잘 생성이 되었습니다.


- copy coding -


배를 타는 꿈 해몽

 -> 시행하는 일이 모두 잘 이루어질 것이다.


배 안에서 음식을 먹는 꿈 해몽

 -> 어느 누구의 부탁을 완벽하게 처리하게 된다.


배 안으로 물고기가 들어오는 꿈 해몽

 -> 위기를 당한 사람을 구해주거나 생각지도 못한 재물을 얻게 된다.


배가 난파되었다가 구조되는 꿈 해몽

 -> 생활의 활기를 얻어서 매우 바쁘게 살아가게 된다.


배가 부딪치는 꿈 해몽

 -> 생활환경의 변화를 맞게 된다.


배가 하늘을 날으는 꿈 해몽

 -> 본인의 업적이 좋은 결실을 맺어 대중에게 인정받을 징조이다.


배를 타고 떠나는 꿈 해몽

 -> 인생에 있어서 중요한 전환기를 맞게 되며, 환자는 죽음을 예고하고 있다.


혼자 배를 타고 강이나 바다를 건너는 꿈 해몽

 -> 지위가 오르고 벼슬운이 열리며, 귀인을 만나 큰 도움을 받게 될 징조이다.


배를 타고 강을 건너는 꿈 해몽

 -> 배를 타고 강을 완전히 건너가는 꿈은 죽음을 암시하고 있다.


배가 항구로 들어오는 꿈 해몽

 -> 지금까지 한 일의 결과를 보는 것을 뜻한다.


배가 항구에서 나가는 꿈 해몽

 -> 새로운 출발점에 와 있음을 암시한 꿈이다.


여객선이 항구에서 떠나는 꿈 해몽

 -> 새로운 계획을 세워서 추진하게 된다.


dream ship train 해몽



배가 항구에 정박해 있는 꿈 해몽

 -> 인생의 침체기에 들어섰음을 상징한다.


화물선이 부두에 정박하는 꿈 해몽

 -> 경제적인 곤란이 해결되고 큰 수입을 보게 될 징조이다.


배가 항구에 정박하는 꿈 해몽

 -> 계획했던 일을 잘 마무리하여 주위사람들의 인정을 받게 될 것이다.


배의 닻이 내려지는 꿈 해몽

 -> 미혼자는 결혼하여 가정을 만들고 안정된 생활을 하게 될 것이다.


배가 뒤집히거나 가라앉는 것을 본 꿈 해몽

 -> 사업이나 가정에서 심각한 어려움을 당하게 된다.


폭풍으로 배가 뒤집히는 꿈 해몽

 -> 사소한 문제로 인하여 진행하고 있는 일의 기반이 흔들릴 징조이다.


배가 침몰하는 것을 보는 꿈 해몽

 -> 사업이나 소망을 성취시킬 일이 생길 것이다.


자기가 탄 배가 뒤집어지려 해서 사람들이 아우성을 치는 꿈 해몽

 -> 사업가는 하루아침에 모든 것을 잃게 될 위기에 처하게 되고, 가장이 실직하거나 병을 얻어 집안 전체가 흔들리게 된다.


배가 하늘을 날으는 꿈 해몽

 -> 성공의 호기가 오고 부귀와 명예가 생기게 된다.


모터보트를 타고 수면을 가르며 질주하는 꿈 해몽

 -> 생활에서 불안과 긴장에 싸여 있다.


혼자 배를 타는 꿈 해몽

 -> 병원에 입원하거나 여러 가지 문제가 한꺼번에 발생하여 해결이 어렵다.


뱃머리에 깃발이 꽂혀 있는 배를 타는 꿈 해몽

 -> 신상에 불행한 일이 일어날 징조이다.


연인과 보트를 타고 노는 꿈 해몽

 -> 보트가 흔들리거나 위태로우면 연애나 사업, 일 등이 흔들리게 된다.


자기가 탄 배가 바람을 받아 순조롭게 운항하는 꿈 해몽

 -> 벌이고 있는 사업이나 일 등이 잘 되면서 소원을 성사시킬 수 있다.


자기가 바다 가운데서 널조각을 잡고 가다가 다른 배에 구조되는 꿈 해몽

 -> 귀인의 도움으로 취직, 결혼 등을 하여 희망을 가질 수 있게 될 것이다.


배를 타고 가는 도중에 물이 말라버리는 꿈 해몽

 -> 현재 진행중인 일을 중단하게 된다.


배가 거꾸로 떠 있는 꿈 해몽

 -> 사업이 잘 되지 않고 가정에 불화가 생길 징조이다.


뒤집힌 배가 하늘을 나는 꿈 해몽

 -> 파업이나 시위를 겪게 되거나 어떤 일에 있어 본인의 의사에 반대하는 방해자가 나타나 일을 방해하게 된다.


배를 타고 항구에 도착하거나 입항하여 상륙하는 꿈 해몽

 -> 지위가 오르고 명예가 상승하며 안정과 발전이 따르는 운세이다.


배를 타고 해나 달을 바라보는 꿈 해몽

 -> 벼슬길이 트이고 경사가 중중하며, 귀인의 도움을 받아 번영할 길몽이다.


배를 타고 다리 밑을 통과하는 꿈 해몽

 -> 그 동안 업무에 가로막고 있던 장애가 모두 없어질 징조이다.


배 안으로 물이 새는 꿈 해몽

 -> 소망하던 일이 이루어지고 재물과 권세가 많아서 안정을 누리게 된다.


배 안에 물이 고여 있는 꿈 해몽

 -> 본인의 작업 성과가 알려지게 되고 재물이 들어올 징조의 길몽이다.


물위에 있는 배에서 잔치를 베푸는 꿈 해몽

 -> 먼 곳에서 손님이나 소식이 오거나, 이사 등의 변동수가 있을 징조이다.


대중들과 어울려 배에 승선하는 꿈 해몽

 -> 이익과 권세가 늘어나고 원하는 바가 이루어지며, 직업의 변동, 이사를 하게 된다.


병환이 있는 사람이 배를 타는 꿈 해몽

 -> 고생하고 있던 병이 쾌유되고 우환이 모두 없어지는 등의 좋은 조짐이다.


돛단배가 떠다니는 꿈 해몽

 -> 주변의 도움으로 매사가 순조롭게 풀리고 번영하게 된다.


배에 실린 목재를 내리는 꿈 해몽

 -> 어느 누구를 통해 큰 이득을 쟁취하게 된다.


부둣가에서 누구를 보내는 꿈 해몽

 -> 지위가 상승하고 본인의 명성을 널리 알리게 될 것이다.


기차나 버스를 타고 종착역에 도착하는 꿈 해몽

 -> 과거를 청산하고 새구도로 바꾸고자 하는 노력이 성공을 거둘 것이다.


기차를 타고 가면서 풍경을 구경하는 꿈 해몽

 -> 사업이나 직장 또는 주거 환경에 이동수가 생겨 변화가 있을 징조이다.


기차나 전철을 타는 꿈 해몽

 -> 계획이 순조롭게 진행되고 있다는 신호이다.


기차나 전철에서 내리는 꿈 해몽

 -> 내린 곳이 목표한 행선지였다면 일이 성공을 거두게 된다.


기차가 운행 도중에 내리는 꿈 해몽

 -> 현재 진행중인 일을 중단하게 된다는 암시이다.


기차를 타고 터널 속을 지나가는 꿈 해몽

 -> 사업이 어려운 지경에 부딪히고 계획에 차질이 생기는 등의 난관을 겪게 된다.


기차가 터널 안을 전조등을 비추며 통과하는 꿈 해몽

 -> 본인의 관운이나 사업운이 크게 열리게 된다.


기차가 탈선하거나 전복되는 꿈 해몽

 -> 가정에 재난이 발생하거나 사업이 난관을 당하는 등의 궂은 일이 있을 것이다.


기차가 전복되거나 폭파되어 사람들이 죽고 부상을 당하는 꿈 해몽

 -> 관공서의 기능이 마비될 일이 생길 수 있다.


기차를 타는 꿈 해몽

 -> 모든 일이 순조롭게 풀리고 인간관계도 원만해진다.


어린아이를 업거나 짐을 지고 기차에 오르는 꿈 해몽

 -> 부담감을 가지고 어떤 단체나 조직의 일을 해야 하는 것을 뜻한다.


애인과 같이 기차를 타는 꿈 해몽

 -> 애인이나 동업자와 같이 일을 처리해야 할 것을 의미하는 것이다.


기차가 산야 바다 등의 공중을 질주하는 꿈 해몽

 -> 어떤 개인이나 세력이 사회적으로 크게 성공할 것이다.


기차가 철로 위를 달리는 꿈 해몽

 -> 소망하는 있는 일이 막힘없이 추진될 징조이다.


레일이 없는 곳을 기차가 달리는 꿈 해몽

 -> 본인이 속한 단체가 원활하게 움직이고, 타인에게 자랑할 만한 일이 생긴다.


전철이나 버스를 놓친 꿈 해몽

 -> 계획이 순조롭게 진행되지 않아서 초조해 하고 있다.


기차의 불빛이 본인을 비추는 꿈 해몽

 -> 본인의 업적이 사람들의 인정을 받게 된다.


- copy coding -


예전에는 디스크가 하나로 파티션이 잡혀 있으면 파티션을 나누기 위해 운영체제가 삭제되고 다시 설치하는 등의 작업을 하였는데 이제는 사용 중에 파티션을 나누어도 이상이 없네요.

작업 방법은 간단해서 그림만 보아도 쉽게 이해가 되겠지만 간단히 설명을 추가해 봅니다.

 

우선 저장 공간이 어느정도 인지 확인을 하기 위해 탐색기를 열어 봅니다.


windows 10 파티션


두개로 나누어도 충분한 용량 이군요파티션 작업은 [컴퓨터 관리] 응용프로그램을 이용해서 진행 합니다.  [컴퓨터 관리] 프로그램은 검색을 통하여 쉽게 찾을 수 있습니다.


windows 10 파티션


실행해 보면 화면 구성은 예나 지금이나 별로 달라진게 없네요.


windows 10 파티션


디스트 0Windows (C)가 보입니다이걸 나눠야 하니 마우스를 대고 우측 버튼을 클릭해 줍니다.


windows 10 파티션


기존 볼륨을 축소하기 위해 [볼륨 축소]를 선택 합니다.  


windows 10 파티션


그럼 어느 정도 축소할 것인지 입력을 합니다그리고 [축소] 버튼을 클릭 합니다.


windows 10 파티션


C:가 축소 되었네요. 그리고 할당되지 않은 공간이 남았습니다이 공간에 새로운 볼륨을 만들면 되는데 역시 마우스를 대고 우측 버튼을 클릭 합니다.


windows 10 파티션


[새 단순 볼륨]을 선택 합니다


windows 10 파티션


이제 부터는 아무 생각 없이 [다음] 버튼을 클릭 하면 됩니다.


windows 10 파티션


파티션을 다시 잘게 나누려면 여기서 크기를 정하면 되는데 저는 그냥 그대로 하나의 볼륨으로 하기 위해 [다음] 버튼을 클릭 합니다.


windows 10 파티션


여기서도 정해준대로 그냥 [다음] 버튼을 클릭 합니다.


windows 10 파티션


포맷을 하기 위해 [다음] 버튼을 클릭 합니다 


windows 10 파티션


다음 버튼만 누르다 보니 벌써 끝이 났네요어떻게 잘 나누어 졌는지 [마침] 버튼을 클릭 하고 확인해 봅니다.


windows 10 파티션


C:만 존재하던 디스크에 D: 영역이 생겼습니다탐색기를 한번 볼까요?


windows 10 파티션


여기에도 D:가 있군요파티션을 나누는 이유는 다양하겠지만 개인적으로는 운영체제에 문제가 발생하는 경우 하나의 파티션인 경우 데이터까지 날려야 하는 상황이 발생 합니다파티션을 나누어 놓으면 운영체제에 문제가 있으면 운영체제만 새로 설치하여 사용할 수 있습니다최악의 경우에는 다른 컴에 디스크를 연결해서 D: 영역의 데이터를 백업 할 수도 있습니다.


- copy coding -


1···22232425262728···61

+ Recent posts