#1 Kakaoマップアンドロイドアプリケーションに表示


0、緒論


KakaoマップAPIの方法で公式サイトでうまく表現できたと思うので敢えて挑戦してみましたが、実際にやってみるとそうではないことに気づきました...😂 API使用前の準備事項がうっすらと書かれていて、最終的にはグーグルで解決され、次の2つの条件でかなり時間がかかりました.
  • 多くの人がkotlinを使用しています.
  • アンドロイドスタジオ、私
  • いずれにしても、本格的なプロジェクト開発に入る前に、Androidプロジェクトの大まかな仕組みなどの基礎知識を学ぶべきです.私のようにAndroidスタジオの基礎さえ知らずにKakao地図APIを利用する人が時間を無駄にしないように、ここで私の苦労した場所とコードの全文を記録します.

    どうやってキハシを手に入れたの?


    mainactivity.Javaの既存のonCreateではなく、次のコードをコピーします.
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Log.d("getKeyHash", "" + getKeyHash(MainActivity.this));
            
        }
    
        public static String getKeyHash(final MainActivity context) {
            PackageManager pm = context.getPackageManager();
            try {
                PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
                if (packageInfo == null)
                    return null;
    
                for (Signature signature : packageInfo.signatures) {
                    try {
                        MessageDigest md = MessageDigest.getInstance("SHA");
                        md.update(signature.toByteArray());
                        return android.util.Base64.encodeToString(md.digest(), android.util.Base64.NO_WRAP);
                    } catch (NoSuchAlgorithmException e) {
                        e.printStackTrace();
                    }
                }
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
            return null;
        }
    アプリケーションを実行する場合、getKeyHash:後のセクションで「」の内容をキーワードとして登録すればよい.

    2.ライブラリからダウンロードしたSDKを整理させてもらいましたが、libsとjniLibsファイルは全然見えませんでした。


    ライブラリウィンドウの左上隅からロボットヘッドの画像とAndroidの部分が見えます.

    ここをクリックしてprojectに変更し、projectname-appをクリックすると、ずっと探していたlibsが表示されます.ここです.jarを入れ、残りの3つのファイルをappに直接追加し、jniLibsファイルに入れればいいです.

    3.テストをしたいのですが、アプリケーションはいつも実行せずに電源を切ります。


    これは私を最も長い間苦しめた問題です.
    Can`t load DaumMapEngineApi.so file
    これらのエラーコードを見つけてこの文章を読んでいる人もいるかもしれません.このエラーは、KACOマップAPIがARMアーキテクチャのみをサポートしているため、仮想デバイス上で使用できないためです.解決策は、自分のスマートフォンに直接接続してテストすることです.デバイスマネージャでWi-FiでPhysical-pairをクリックすると、QRコードで自分のデバイスを登録できます.その後、自分のデバイス上で開発者モードを実行し、アンドロイドスタジオとの無線接続でテストすることができます.

    [原句]何が問題なのかさっぱりわからない!


    そんな人のために、必死にコード全文をコピーします.全部で5つのファイルを修正したり作成したりして、自分の機械にココアマップを置くこともできます.
    1) mainactivity.java
    package com.example.kakaomap_personal;
    
    import android.os.Bundle;
    import android.view.ViewGroup;
    
    //추가한 부분 1
    import androidx.appcompat.app.AppCompatActivity;
    import net.daum.mf.map.api.MapView;
    //
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    		
            //추가한 부분2
            MapView mapView = new MapView(this);
            ViewGroup mapViewContainer = (ViewGroup) findViewById(R.id.map_view);
            mapViewContainer.addView(mapView);
            //
        }
    
    }
    2) activity_main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    	
        <!--추가한 부분-->
        <RelativeLayout
            android:id="@+id/map_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <!---->
    
    </RelativeLayout>
    3) androidMainfest.xml
    Android:valueはkakaodevelopersに提供されるネイティブアプリケーション鍵をコピーすればよい.
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.example.kakaomap_personal">
    
    	<!--추가한 부분 1-->
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    	<!---->
        
        <application
    		
            <!--추가한 부분 2-->
    		android:usesCleartextTraffic="true"
            android:networkSecurityConfig="@xml/network_security_config"
            <!---->
    
            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/Theme.KakaoMap_personal"
            tools:targetApi="n">
    		
            <!--추가한 부분 3-->
            <meta-data
                android:name="com.kakao.sdk.AppKey"
                android:value="6b275ec303646674b725f9e9b859b7b2"/>
            <!---->
    
            <activity
                android:name=".MainActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application
    >
    
    </manifest>
    4) build.gradle (:app)
    dependenciesに数行しか追加されていないようですが、file-project構造でも何かをするときに追加されたものがあるので、はっきり覚えていません...
    plugins {
        id 'com.android.application'
    }
    
    android {
        compileSdk 32
    
        defaultConfig {
            applicationId "com.example.kakaomap_personal"
            minSdk 21
            targetSdk 32
            versionCode 1
            versionName "1.0"
    
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    
    dependencies {
        implementation files('libs/libDaumMapAndroid.jar')
    
        implementation 'androidx.appcompat:appcompat:1.4.1'
        implementation 'com.google.android.material:material:1.5.0'
        implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
        implementation fileTree(dir: 'src\\main\\jniLibs', include: ['*.aar', '*.jar'], exclude: [])
    
        testImplementation 'junit:junit:4.13.2'
        androidTestImplementation 'androidx.test.ext:junit:1.1.3'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    }
    5) network_security_config.xml
    res右クリックしてnew-Android resource fileをクリックし、表示されるウィンドウでresource typeをXMLに追加し、次の内容を貼り付けます.
    <?xml version="1.0" encoding="utf-8"?>
    <!-- http 통신 허용 -->
    <network-security-config>
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <certificates src="system" />
            </trust-anchors>
        </base-config>
    </network-security-config>