코드 사용보다는 cmd 창에서 명령어로 구하는것이 더 간편하다
디버그 해시키 값 구하기
keytool -exportcert -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64
릴리즈 해시키 값 구하기
keytool -exportcert -alias [YOUR_KEY_ALIAS] -keystore [YOUR_KEYSTORE_PATH] | openssl sha1 -binary | openssl base64
해시키값을 구하는 코드
public static String checkApp(Context context) {
/*
무결성 체크, 실행되어있는 모드가 디버그모드면 디버그 해시키값, 릴리즈모드면 릴리즈 해시키값을 반환한다.
*/
try {
@SuppressLint("PackageManagerGetSignatures")
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
Signature signature = packageInfo.signatures[0];
final String currentSignature = obtainSignatureString(signature);
return currentSignature;
} catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
private static String obtainSignatureString(Signature signature) throws NoSuchAlgorithmException {
byte[] certBytes = signature.toByteArray();
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(certBytes);
// 16진수 변환 (예: A1:B2:C3... 형식)
StringBuilder hexString = new StringBuilder();
for (int i = 0; i < digest.length; i++) {
if (i > 0) hexString.append(":");
hexString.append(String.format("%02X", digest[i] & 0xFF));
}
return hexString.toString();
}
openssl을 사용하여 해시키 값을 구하면 이상한 해시키 값을 가져올 수 있다고해서 코틀린 코드를 이용해 찾았더니
E/MapViewLocationManager 에러가 나오지않았다.
import android.content.pm.PackageManager
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Base64
import android.util.Base64.encodeToString
import android.util.Log
import android.view.ViewGroup
import androidx.annotation.RequiresApi
import net.daum.mf.map.api.MapView
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
getHashKey()
}
val mapView = MapView(this)
val mapViewContainer = findViewById(R.id.map_view) as ViewGroup
mapViewContainer.addView(mapView)
}
private fun getHashKey() {
var packageInfo: PackageInfo? = null
try {
packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
if (packageInfo == null) Log.e("KeyHash", "KeyHash:null")
for (signature in packageInfo!!.signatures) {
try {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("KeyHash", Base64.encodeToString(md.digest(), Base64.DEFAULT))
} catch (e: NoSuchAlgorithmException) {
Log.e("KeyHash", "Unable to get MessageDigest. signature=$signature", e)
}
}
}
}
혹은 해당 프로젝트 폴더의 cmd창으로 이동해서 아래 명령어를 입력한다.
openssl이 설치되어있어야한다.
keytool -exportcert -alias androiddebugkey -keystore "%USERPROFILE%\.android\debug.keystore" -storepass android -keypass android | openssl sha1 -binary | openssl base64
출처 : https://snaildeveloper.tistory.com/11
[Kakao Api] 키 해시 생성 및 플랫폼 등록
윈도우 기준으로 작성 된 방법이므로, Mac 등 다른 운영체제의 방법과는 상이할 수 있습니다. 1. Kakao Developer에 애플리케이션 추가 https://developers.kakao.com/ Kakao Developers 카카오 API를 활용하여 다양
snaildeveloper.tistory.com
'프로그래밍 > Android' 카테고리의 다른 글
안드로이드 어플 아이콘 변경 (0) | 2021.07.24 |
---|---|
카카오맵 NativeBaseNetConnection 해결법 (0) | 2021.07.24 |
[Android] 프로젝트명 변경 (0) | 2021.07.23 |
adb 명령어 (0) | 2021.07.22 |
[scrcpy] 안드로이드 디바이스 PC 화면에 미러링 (0) | 2021.07.22 |
댓글