일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 안드로이드
- Gradle
- error
- 다트
- 에러
- 레트로핏
- ADB
- 안스
- 웹뷰
- coroutine
- viewpager
- 안드로이드 스튜디오
- GIT
- studio
- RecyclerView
- Github
- MVVM
- DI
- build
- 의존성주입
- image
- 안드로이드스튜디오
- 깃헙
- 스튜디오
- 코틀린
- dart
- Retrofit
- Android
- Kotlin
- WebView
- Today
- Total
목록전체 글 (159)
코딩하는 일용직 노동자
# 들어가며 하이브리드 앱에서 웹뷰로 열린 웹문서에 태그가 있습니다. 사진을 첨부하기 위한 기능입니다. iOS는 앱에서 별도의 처리가 없어도 사진을 선택하면 웹으로 사진이 잘 등록됩니다만, 안드로이드에서는 사진을 선택해도 웹으로 등록이 안됩니다. 이번 포스팅에서는 태그에 카메라 or 사진 갤러리를 표시하고 사진촬영이나 이미지 선택후 웹에 이미지를 넘겨주는 처리를 알려드리겠습니다. 우선 WebChromeClient() 를 상속받은 커스텀 클래스를 만들고 아래의 함수를 오버라이드 해줍니다. class CustomWebChromeClient(val activity: AppCompatActivity) : WebChromeClient() { var filePathCallbackLollipop: ValueCallb..
안드로이드에서 A액티비티에서 B액티비티로 이동할때 데이타를 보내는 경우가 있습니다. 간단한 몇개의 변수는 putExtra로 쉽게 보내고 받을 수 있지만, 데이타 클래스 객체를 통째로 보낼경우도 있습니다. 이렇게 안드로이드에서 Intent로 데이타 클래스 객체를 보낼때 Serializable 과 Parcelable을 사용할 수 있습니다. Serializable은 java에서 사용되던 것으로 사용방법은 쉽지만 제약도 많습니다. Serializable로 데이타 클래스 객체를 보낼때는 해당 데이타 클래스에서 사용하는 다른 모든 클래스 객체들도 Serializable을 implements된 상태여야 합니다. 안드로이드에는 새로운 직렬화 방법으로 Parcelable이 있습니다. Parcelable은 원하는 객체들만..
외부 네트워크 연결이 차단된 곳에서 개발하는 경우가 있습니다. 이럴경우 안드로이드 스튜디오의 빌드 셋팅을 오프라인 상태로 설정해야 합니다. 기존에는 아래의 경로에서 Offline work 를 체크해서 사용하면 됐습니다. 하지만 안드로이드 스튜디오 3.6 에서는 offline work 체크박스가 사라졌습니다. 당황하지 말고 다시 찾아보겠습니다. 해당 기능이 다른 곳으로 옮겨졌습니다. View > Tool Windows > Gradle Toggle Offline Mode 를 눌러 활성화 시키면 됩니다.
#0 static 자바의 static처럼 코틀린에서도 인스턴스가 단 하나임을 보장하는 클래스를 만들 수 있습니다. 싱글턴 인스턴스는 전역적으로 사용될 수 있으며, 메모리를 효율적으로 이용할 수 있습니다. #1 Object 코틀린에서는 클래스 이름앞에 object 키워드를 붙이면 곧바로 싱글톤 클래스가 됩니다. 하지만 이경우에는 생성자를 호출하지 않는 클래스에서만 사용할 수 있습니다. import android.util.Log // 싱글톤 클래스를 만들려면 앞에 object 를 붙이면 된다. object MyObjectSingleton { fun printMsg(msg: String) { Log.d("MyObjectSingleton", "msg: $msg") } } #2 companion object 생성..
import android.util.Base64 import java.io.UnsupportedEncodingException import java.security.InvalidAlgorithmParameterException import java.security.InvalidKeyException import java.security.NoSuchAlgorithmException import java.security.spec.AlgorithmParameterSpec import javax.crypto.BadPaddingException import javax.crypto.Cipher import javax.crypto.IllegalBlockSizeException import javax.crypto.No..
RecyclerView Adapter Boilerplate Code #1 기본적인 어댑터 import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.ViewHolder class MyAdapter: RecyclerView.Adapter() { private var context: Context? = null override fun onCreateViewHolder(parent:..
안드로이드 스튜디오 4.0 버전에서 업데이트된 Live Layout Inspector 기능을 살펴보겠습니다. 기존 3.1버전에서부터 Layout Inspector 기능이 있었고 이번에 업데이트가 되었습니다. 레이아웃의 계층구조를 3D로 살펴볼 수 있는 비슷한 기능을 iOS 개발하는 XCode에서 본적이 있는데 안드로이드 개발에서도 이용할 수 있게 되었습니다. Layout Inspector 창은 View > Tools Windows > Layout Inspector를 선택하면 사용할 수 있습니다. 우선 테스트 기기를 컴퓨터와 연결하거나 에뮬레이터를 작동시키고 디버그할 앱을 실행합니다. 그리고 [+Select Process]를 누르면 디버그할 앱을 선택할 수 있습니다. 레이아웃의 구조도 쉽게 표시가 되고, ..
안드로이드 9.0 Pie 부터는 https만 사용하도록 강제합니다. 만약 http로 연결을 시도하면 아래의 에러문구를 보실 수 있습니다. CLEARTEXT communication to XXXX not permitted by network security policy 하지만 개발중에 접속하는 서버가 https 만으로 구성된 경우는 드믑니다. 이를 해결하기 위한 방법이 있습니다. #1 targetSdk 버전을 28보다 작게 설정하면됩니다. 하지만 이것은 좋은 방법은 아닙니다. 언젠가는 올려야 하니까요. #2 usesCleartextTraffic 을 true로 설정하면됩니다. 안드로이드 매니페스트 파일에 이렇게 설정을 합니다. 이러면 http 로도 연결이 됩니다. 편리한 방법이긴 합니다만 정식 마켓등록하는 ..
안드로이드 스튜디오가 4.0버전으로 정식 업데이트 되었습니다. gradle에서 데이타 바인딩을 이용하기 위한 설정 방법이 바뀌었습니다. 기존에는 dataBinding { enabled = true } 이렇게 설정해서 사용했지만 안드로이드 스튜디오 4.0 부터는 이렇게 설정하면 DSL element 'android.dataBinding.enabled' is obsolete and has been replaced with 'android.buildFeatures.dataBinding'. 빌드시 이런 에러가 발생합니다. 앞으로는 buildFeatures { dataBinding = true } 이렇게 설정하셔야 합니다.
안드로이드 앱을 릴리즈 버전으로 빌드하려니 30분이 넘도록 빌드를 하는 현상이 있었습니다. 빌드 로그를 보니 아래의 메세지가 반복적으로 표시되었습니다. Expiring Daemon because JVM heap space is exhausted 안드로이드 스튜디오의 heap memory 가 부족한듯 합니다. 사용할 수 있는 메모리를 더 높게 설정해보겠습니다. Preferences(Settings) > Memory Settings 메뉴에서 설정할 수 있습니다.