728x90

 

Title: Android Jetpack: Understand the CameraX Camera-Support Library (Google I/O'19)

Speaker(s): Vinit Modi, James Fung, Franklin Wu, Trevor McGuire

 

 

 

1. 카메라 개발은 어렵습니다. 이유는?

- 앱에서 다양한 OS별로 신경써야함

- 저가형 entry부터 고가의 flagship까지 일관성이 있어야함

- 카메라 API의 복잡성

 

 

2. (testlab에서 테스트 다 하면서 개발했다는) CamaraX

 - 현 시장의 90%에 가까운 기기에서 호환됨

 - target SDK가 API 21 이상이면 사용 가능

 - Camera1 Api 및 Camera2 Legay Layer와 일관되게 제공됨.

 - 사용하기 쉬워짐

 - Lifecycle aware: Preview, Image Analysis, Caputre 기능 -> 각 개별 thread 필요 없어짐

 - 

CameraX 이전, CameraX 이후 동작

 

3. 사용 예제

 

1) Preview

/*display preview on screen*/

//configure preview
val previewConfig = PreviewConfig.Builder().build()

//create preview
val preview = Preview(previewConfig)

preview.setOnPreviewOutputUpdateListener {
    PreviewOutput : Preview.PreviewOutput? ->
    // your code here. e.g. use previewOutput?.surfaceTexture
    // and post to a GL renderer.
}

//attach preview to lifecycle
CameraX.bindToLifecycle(this as LifecycleOwner, preview)

 

2) Image Analysis

 

//configure image analysis

//set resolution
val imageAnalysisConfig = ImageAnalysisConfig.Builder()
    .setTargetResolution(Size(1280, 720))
    .build()

//create image analysis
val imageAnalysis = ImageAnalysis(imageAnalysisConfig)

//attach output
imageAnalysis.setAnalyzer({ image : ImageProxy, rotationDegrees : Int ->
    val cropRect = image.cropRect
    //insert your code here
})

//attach image analysis & preview to lifecycle
CameraX.bindToLifecycle(this as LifecycleOwner, imageAnalysis, preview)

 

 

 

 3) Image Capture

 

/*configure image capture*/

//manage rotation
val imageCaptureConfig = ImageCaptureConfig.Builder()
    .setTargetRotation(windowManager.defaultDisplay.rotation)
    .build()

//create image capture
val imageCapture = ImageCapture(imageCaptureConfig)

//bind all use cases
CameraX.bindToLifecycle(this as LifecycleOwner, imageCapture, imageAnalysis, preview)

 

//on user action save a picture
fun onClick() {
    val file = File(...)
    imageCapture.takePicture(file,
        object : ImageCapture.OnImageSavedListener {
            override fun onError(error: ImageCapture.UserCaseError,
                                message: String, exc: Throwable?){
                // insert your code here 
            }
            override fun onImageSaved(file: File) {
                // insert your code here
            }
        })
}

 

 

 

Reference

https://www.youtube.com/watch?v=kuv8uK-5CLY

 

728x90
728x90

1. 서론

  • 카카오맵 API는 다음 링크에 가이드가 존재합니다.
    http://apis.map.kakao.com/android/guide/

    먼저 사용했던 네이버 지도는 gradle에 한두줄 적고 설정하면 알아서 되었습니다만...
    카카오맵은 가이드에 라이브러리 파일 추가시 어떻게 해야하는지 불편하고 모호한 점들이 있어서,
    초보였던 제가 겪었던 시행착오 를 작성하여 공유 합니다.

2. 시행착오

1) 라이브러리 파일 추가 경로는?

  • 가이드에는 아래처럼 적혀있습니다.
  • 매우 초보인 저의 궁금증 및 문제:
    1) so 확장자 파일은 뭐지?
    2) 정작 2019년 7월 기준으로 최신 SDK 압축파일 까보니, 가이드에서 3개라는 파일이 4개로 늘어나 있음. (arm64-v8a 폴더?) 그대로 복붙하면 되는건가?
    3) libs 폴더란걸 그냥 생성하고 똑같이 추가했으나 되지 않음.

  • 각 의미를 찾아보니:
    1) 카카오의 SDK 파일인 ".so" 확장자 파일은 JNI library를 의미합니다.

    2) 'arm64-v8a'는 2019년 8월부터 구글플레이에 올라가는 앱 64비트를 대응하기 위한 네이티브 코드 라이브러리 소스를 의미. (안드로이드의 출발은 32비트였으나 2017년 이후로는 64비트 cpu를 지원하는 기기들로 변화하고 있기 때문) --> 즉 현재 대부분의 기기가 64비트이기 때문에, 가이드가 그 전에 작성된 것으로 추정됨. (즉 무조건 4개 파일 전부 추가하세요)

    3) libs 폴더에 so파일 넣는건 과거 Eclipse 개발 환경에서 추가할 때의 경로. Android에서는 .jar파일은 libs 폴더, .so파일은 jniLibs 폴더를 생성하고 추가 해야합니다.

2) 키 해시는 뭘 입력 해야하는가?

- 콘솔에 들어가서 설정 > 일반 > 플랫폼 추가 - 안드로이드 시

아래처럼 키 해시를 입력 해야만 합니다.

만약 해당 키 해시가 등록되지 않으면, 라이브러리를 올바로 추가하고 개발을 잘 해도 화면에 나타나지 않습니다.
그런데 이 키 해시는 debug용과 release용 keyStore에 따라 달라집니다. 따라서 필요에 따라 해당 코드를 이용해서 키 해시를 입력하시면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
try{
    PackageInfo info = getPackageManager().getPackageInfo("com.android.패키지 경로",PackageManager.GET_SIGNATURES);
    for(Signature signature : info.signatures){
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("keyHash:",Base64.encodeToString(md.digest(),Base64.DEFAULT));
    }
 
}catch(Exception e){
    e.printStackTrace();
}
 
 
cs

작성하다보니까 지도 개발 가이드 문서에는 없지만, 카카오 Android 개발가이드에 설명이 있었네요.
보다 설명이 더 자세히 나와있으므로 설명은 해당 링크 참고하시면 될거 같습니다.
https://developers.kakao.com/docs/android/getting-started#키해시-등록

Reference

728x90

+ Recent posts