<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1945506117809528017</id><updated>2026-10-12T05:57:27.968+09:00</updated><category term="팁"/><category term="문제해결"/><category term="NDK"/><category term="Android Studio"/><category term="eclipse"/><category term="메모"/><category term="ICS"/><category term="JellyBean"/><category term="앱 소개"/><category term="Android Tool"/><category term="Nexus S"/><category term="ant"/><category term="개발 환경"/><category term="네트워크"/><category term="롬 업데이트"/><category term="Android SDK"/><category term="Camera2Interop"/><category term="CameraX"/><category term="Gradle"/><category term="KAPT"/><category term="KSP"/><category term="MediaCodec"/><category term="Nexus 7"/><category term="UPnP Tool"/><category term="adb shell"/><category term="annotationProcessor"/><category term="kotlin"/><category term="proguard"/><category term="갤럭시탭 10.1"/><category term="편리"/><title type='text'>Android 개발</title><subtitle type='html'>Android 앱 개발 관련 사항</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>108</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-7026689615012091018</id><published>2026-08-23T15:17:57.128+09:00</published><updated>2026-08-23T15:17:57.128+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="앱 소개"/><title type='text'>YTPlayer</title><content type='html'>&lt;p&gt;&lt;img alt=&quot;아이콘 이미지&quot; aria-hidden=&quot;true&quot; class=&quot;T75of nm4vBd arM4bb&quot; data-iml=&quot;8526&quot; itemprop=&quot;image&quot; src=&quot;https://play-lh.googleusercontent.com/Yc6g1PgHOFSYGIt9f7Hld_ClqIdSyfVlcqXV4OdlMyipWEtU6Bwxljy1tXTyYeusd9CxEODxaCuOnvvyu5RyXQ=w240-h480&quot; /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.tjapps.ytplayer&quot;&gt;https://play.google.com/store/apps/details?id=com.tjapps.ytplayer&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;YouTube Player 입니다&lt;/p&gt;&lt;p&gt;- 백그라운드 재생, 플레이리스트 기능&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/7026689615012091018/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2026/08/ytplayer.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/7026689615012091018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/7026689615012091018'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2026/08/ytplayer.html' title='YTPlayer'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://play-lh.googleusercontent.com/Yc6g1PgHOFSYGIt9f7Hld_ClqIdSyfVlcqXV4OdlMyipWEtU6Bwxljy1tXTyYeusd9CxEODxaCuOnvvyu5RyXQ=s72-w240-h480-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-1585565028614811243</id><published>2024-05-27T17:49:00.002+09:00</published><updated>2024-05-27T17:49:56.015+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>[Android Studio 팁] powershell7 터미널 설정</title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;증상:&lt;/h3&gt;&lt;p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhvGIQDYQHDCfwRSPO_uLZF9peHP-sM56du0xANTwN8EUj1Te1nvqrbD9RN-D0-a09PVoB4oRlOHaD6YWyBugpXT4pJzMdPO02WZ7qEQ2Fzw1HmHKIVJcFC6iv8Art3pqwwMxf-w9OFHJwAH7JbFI4opbwtqpvmbH0XXoGf1obL_OMio3z-VED_v0yT&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;197&quot; data-original-width=&quot;317&quot; height=&quot;199&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhvGIQDYQHDCfwRSPO_uLZF9peHP-sM56du0xANTwN8EUj1Te1nvqrbD9RN-D0-a09PVoB4oRlOHaD6YWyBugpXT4pJzMdPO02WZ7qEQ2Fzw1HmHKIVJcFC6iv8Art3pqwwMxf-w9OFHJwAH7JbFI4opbwtqpvmbH0XXoGf1obL_OMio3z-VED_v0yT&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Android Studio 터미널&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Powershell7 을 윈도에 설치하였지만 Android Studio 터미널은 내장 powershell (5.1 버전) 이다.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;powershell 설치 &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;해결:&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi1YO0rcvOylEm9Ilpkt8m9z_OWmc8_-0u7R1rAnmpv9xnFcJABJZaAHXbS0RWxU7KyzdqOCCCH2Pgmftz707ByvmlEkiVO1cfuru3YP7qSwco309vRCmIPZFJJIKgtyumqxkNloR7GE5A4DaAA6U9qiPSCXDO4PmpWKLWhhUOapV3nMGtRiAfqLn9k&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;301&quot; data-original-width=&quot;410&quot; height=&quot;235&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi1YO0rcvOylEm9Ilpkt8m9z_OWmc8_-0u7R1rAnmpv9xnFcJABJZaAHXbS0RWxU7KyzdqOCCCH2Pgmftz707ByvmlEkiVO1cfuru3YP7qSwco309vRCmIPZFJJIKgtyumqxkNloR7GE5A4DaAA6U9qiPSCXDO4PmpWKLWhhUOapV3nMGtRiAfqLn9k=w320-h235&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;File -&amp;gt; Settings&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgObv2oh2wqGElHwDN1oJK81i4AIIQGC6-_zrhhorRqMuwtg70IzUYzzQgcQ-B6j6nFMKHSXZcYzaLKrTXF7u7ttt_31-wut92xqXqv6xBXNu-u7-RiTrsk4X06YHCzPSvts6iS0ifqh21BqRaLNCQv5MgP8Nw92OBpd3CspBs3dA5N_JH2R-ZOnbld&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;731&quot; data-original-width=&quot;984&quot; height=&quot;476&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgObv2oh2wqGElHwDN1oJK81i4AIIQGC6-_zrhhorRqMuwtg70IzUYzzQgcQ-B6j6nFMKHSXZcYzaLKrTXF7u7ttt_31-wut92xqXqv6xBXNu-u7-RiTrsk4X06YHCzPSvts6iS0ifqh21BqRaLNCQv5MgP8Nw92OBpd3CspBs3dA5N_JH2R-ZOnbld=w640-h476&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Tools -&amp;gt; Terminal -&amp;gt; Application Settings -&amp;gt; Shell path&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;e.g.) C:\Program Files\PowerShell\7\pwsh.exe&lt;/p&gt;&lt;p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjDuS4dXhYV0l1xMkpAOZoXJCOE7j4vONIaKM4h9KYBQLuWNNHPoAOJtr4or_I03kmdXc9haBeTVQDSzXY0XUjQX6l5kYMtiosorirVYZqfrHNS4I3op6Tomm4EoGzLBm-NGJBCI_wdU5bOJiwasC136Ko7bBB8IKCQ8BUa3xVmguaC_cWc8lWFWkOr&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;208&quot; data-original-width=&quot;428&quot; height=&quot;195&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjDuS4dXhYV0l1xMkpAOZoXJCOE7j4vONIaKM4h9KYBQLuWNNHPoAOJtr4or_I03kmdXc9haBeTVQDSzXY0XUjQX6l5kYMtiosorirVYZqfrHNS4I3op6Tomm4EoGzLBm-NGJBCI_wdU5bOJiwasC136Ko7bBB8IKCQ8BUa3xVmguaC_cWc8lWFWkOr=w400-h195&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Android Studio 터미널&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/1585565028614811243/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2024/05/android-studio-powershell7.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1585565028614811243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1585565028614811243'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2024/05/android-studio-powershell7.html' title='[Android Studio 팁] powershell7 터미널 설정'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhvGIQDYQHDCfwRSPO_uLZF9peHP-sM56du0xANTwN8EUj1Te1nvqrbD9RN-D0-a09PVoB4oRlOHaD6YWyBugpXT4pJzMdPO02WZ7qEQ2Fzw1HmHKIVJcFC6iv8Art3pqwwMxf-w9OFHJwAH7JbFI4opbwtqpvmbH0XXoGf1obL_OMio3z-VED_v0yT=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-2675331995729124813</id><published>2024-05-21T23:00:00.008+09:00</published><updated>2024-05-21T23:04:19.990+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="annotationProcessor"/><category scheme="http://www.blogger.com/atom/ns#" term="KAPT"/><category scheme="http://www.blogger.com/atom/ns#" term="KSP"/><title type='text'>KSP? KAPT? annotationProcessor?</title><content type='html'>&lt;h4 style=&quot;text-align: left;&quot;&gt;증상:&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://developer.android.com/training/data-storage/room&quot;&gt;Room tutorial&lt;/a&gt; 수행 중 kapt? ksp? 의존성을 추가하는 부분이 있었고 적용하였더니 빌드 에러가 발생했다&lt;/li&gt;&lt;ul&gt;&lt;li&gt;어떤 함수를 찾지 못하는 문제&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;background-color: #f3f3f3; font-family: courier;&quot;&gt;java.lang.NoSuchMethodError: &#39;void org.jetbrains.kotlin.incremental.IncrementalCompilationContext.&amp;lt;init&amp;gt;(org.jetbrains.kotlin.incremental.storage.FileToPathConverter, org.jetbrains.kotlin.incremental.storage.FileToPathConverter, boolean, org.jetbrains.kotlin.incremental.CompilationTransaction, org.jetbrains.kotlin.build.report.ICReporter, boolean, boolean, boolean, int, kotlin.jvm.internal.DefaultConstructorMarker)&#39;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Impl 클래스가 없다고 하는 문제&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;background-color: #f3f3f3; font-family: courier;&quot;&gt;Android room persistent: AppDatabase_Impl does not exist&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;그래서 KSP 가 뭔지 구글링 하다 보니 kapt 에서 ksp 로 mirgration 하는 문서가 있었다 (kapt 는 ksp 의 전신이며 ksp 가 kapt 보다 빌드 속도가 많이 개선되었다고 함)&lt;/li&gt;&lt;li&gt;kapt 는 또 뭔가 해서 찾아보았더니 그전에 사용되던 annotationProcessor 가 바뀐거란다 (참고: &lt;a href=&quot;https://3edc.tistory.com/65&quot;&gt;https://3edc.tistory.com/65&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;원하는 설명은 찾기 어렵고 후신의 플러그인들만 검색되는 상태&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;해결법:&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Kapt (the Kotlin Annotation Processing Tool) 는 Kotlin 에서 Java annotation 을 사용할 수 있도록 해준다&lt;/li&gt;&lt;li&gt;KSP (Kotlin Symbol Processing) 는 kapt 대체제로 kapt 보다 최대 2배 빠르다고 한다&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://developer.android.com/build/migrate-to-ksp&quot;&gt;https://developer.android.com/build/migrate-to-ksp&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;주의 사항: &lt;b&gt;kotlin 버전과 ksp 버전을 맞춰줘야 한다&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;예를 들어 kotlin 버전이 1.9.23 이면 ksp 버전은 1.9.23-1.0.20 식으로 kotlin 버전이 포함된 범위를 설정해 줘야 한다&lt;/li&gt;&lt;ul&gt;&lt;li&gt;참고:&amp;nbsp;&lt;a href=&quot;https://github.com/android/sunflower/blob/15898e5e5c2212cb7d174e6d182f92baee2d6cae/gradle/libs.versions.toml#L39-L40&quot;&gt;https://github.com/android/sunflower/blob/15898e5e5c2212cb7d174e6d182f92baee2d6cae/gradle/libs.versions.toml#L39-L40&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Sunflower: Room + compose + ksp 가 적용된 샘플 코드 (구글 공식)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/android/sunflower&quot;&gt;https://github.com/android/sunflower&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ksp 설정 관련 파일들&lt;/li&gt;&lt;ul&gt;&lt;li&gt;최상위 build.gradle.kts &lt;a href=&quot;https://github.com/android/sunflower/blob/15898e5e5c2212cb7d174e6d182f92baee2d6cae/build.gradle.kts#L29&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;&lt;li&gt;app/build.gradle.kts &lt;a href=&quot;https://github.com/android/sunflower/blob/15898e5e5c2212cb7d174e6d182f92baee2d6cae/build.gradle.kts#L29&quot;&gt;링크&lt;/a&gt;, &lt;a href=&quot;https://github.com/android/sunflower/blob/15898e5e5c2212cb7d174e6d182f92baee2d6cae/app/build.gradle.kts#L112-L113&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;&lt;li&gt;libs.gradle.toml &lt;a href=&quot;https://github.com/android/sunflower/blob/15898e5e5c2212cb7d174e6d182f92baee2d6cae/gradle/libs.versions.toml#L39-L40&quot;&gt;링크&lt;/a&gt;, &lt;a href=&quot;https://github.com/android/sunflower/blob/15898e5e5c2212cb7d174e6d182f92baee2d6cae/gradle/libs.versions.toml#L123&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/2675331995729124813/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2024/05/ksp-kapt-annotationprocessor.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/2675331995729124813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/2675331995729124813'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2024/05/ksp-kapt-annotationprocessor.html' title='KSP? KAPT? annotationProcessor?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-1339922472427812368</id><published>2024-05-20T22:02:00.006+09:00</published><updated>2024-05-27T09:22:56.271+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kotlin"/><title type='text'>[Kotlin] 권한 처리</title><content type='html'>&lt;h2 style=&quot;text-align: left;&quot;&gt;권한 처리 방법 정리&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;예시 화면&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy8T4NwXzZK3iAMt7iXhU33-_Z2aLuzgj1B0gGrSojRkbOgrAtYFKrxWHCgnsFzEELRDT6JBpWQpMsapGt_pPNlfWi1DTjSgxhr1ueTQULt5dFmlMLkLHTw2g3g369gq8cqbciF3kgsSqtt9RmhZJdO7tTHo8w2fHxruH9duFQv6QhmKbWNtk6OohW/s1920/Screenshot_20240506_041132.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1920&quot; data-original-width=&quot;1080&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy8T4NwXzZK3iAMt7iXhU33-_Z2aLuzgj1B0gGrSojRkbOgrAtYFKrxWHCgnsFzEELRDT6JBpWQpMsapGt_pPNlfWi1DTjSgxhr1ueTQULt5dFmlMLkLHTw2g3g369gq8cqbciF3kgsSqtt9RmhZJdO7tTHo8w2fHxruH9duFQv6QhmKbWNtk6OohW/s320/Screenshot_20240506_041132.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4XspO55e05RuPdbM7hbQShFqYwOT42hGm0krEqn57nsqB1zYJFB0r6WjwXbIZOMXso_wIqNZ2L9AstVY_Z69BuSghKy6VyXl4BDFihzDffomYW6-LbJFGuA2mhIpNJN8MSp1Yzsb1PhfX1rG2gEd78GvAQLou8kRHvZxVo-teQyB-Nd9koi8dvhdE/s1920/Screenshot_20240506_041158.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1920&quot; data-original-width=&quot;1080&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4XspO55e05RuPdbM7hbQShFqYwOT42hGm0krEqn57nsqB1zYJFB0r6WjwXbIZOMXso_wIqNZ2L9AstVY_Z69BuSghKy6VyXl4BDFihzDffomYW6-LbJFGuA2mhIpNJN8MSp1Yzsb1PhfX1rG2gEd78GvAQLou8kRHvZxVo-teQyB-Nd9koi8dvhdE/s320/Screenshot_20240506_041158.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhDOj-ajObVZghCT-7scIyONw_gbAlndN0L6JwqdKkpeDj44XUNTOuggA0Pmpyh3cf6K9qSohswpEvz-8SxeU6G3vHRAqiGTGDFwm5rhbL6mmRW-KIvu0uxvQed064eUnDjMnndzC8M48tI4A0JIVLkmGeb7ECd-TceE3N1yK-aMveHj0OGzVetmP6f&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;981&quot; data-original-width=&quot;1004&quot; height=&quot;624&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhDOj-ajObVZghCT-7scIyONw_gbAlndN0L6JwqdKkpeDj44XUNTOuggA0Pmpyh3cf6K9qSohswpEvz-8SxeU6G3vHRAqiGTGDFwm5rhbL6mmRW-KIvu0uxvQed064eUnDjMnndzC8M48tI4A0JIVLkmGeb7ECd-TceE3N1yK-aMveHj0OGzVetmP6f=w640-h624&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;권한 처리 과정&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;권한 처리를 위하여 AndroidManifest.xml 에 작성할 부분과 코드 상 작성할 부분을 구분하여 정리&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;권한 요청은 두 가지 방법&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;requestPermission() 함수를 이용하는 방식&lt;/li&gt;&lt;li&gt;ActivityResultApi 를 사용하는 방식&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;전체 샘플 코드&lt;/h4&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/bjtj/tjsamples/tree/main/android/PermissionSample&quot;&gt;Github&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;주요코드 위치: android/PermissionSample/app/src/main/java/com/example/permissionsample/CheckPermission.kt&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;목차&lt;/h2&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;AndroidManifest.xml 에 필요 권한 작성&lt;/li&gt;&lt;ol&gt;&lt;li&gt;uses-permission 설명&lt;/li&gt;&lt;li&gt;uses-feature 설명&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;[코드] 권한 확인하기&lt;/li&gt;&lt;li&gt;[코드] 권한 요청하기 (2가지 방식)&lt;/li&gt;&lt;ol&gt;&lt;li&gt;requestPermissions() &amp;amp; onRequestPermissionsResult() 방식&lt;/li&gt;&lt;li&gt;ActivityResultApi 방식&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;1. AndroidManifest.xml 에 필요 권한 작성&lt;/h2&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;예제) Camera 와 audio 녹음 권한 필요시&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;
  
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;!-- A camera with burst capability is required to use this application --&amp;gt;
&amp;lt;uses-feature android:name=&quot;android.hardware.camera.any&quot; /&amp;gt;

&amp;lt;!-- Permission declarations --&amp;gt;
&amp;lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; /&amp;gt;
&amp;lt;uses-permission android:name=&quot;android.permission.RECORD_AUDIO&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;


&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;안드로이드 권한 목록&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://developer.android.com/reference/android/Manifest.permission&quot;&gt;https://developer.android.com/reference/android/Manifest.permission&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;1.1. uses-permission 설명&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;설명&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;앱이 필요로 하는 권한들 선언&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;참고:&amp;nbsp;&lt;a href=&quot;https://developer.android.com/guide/topics/manifest/uses-permission-element&quot;&gt;https://developer.android.com/guide/topics/manifest/uses-permission-element&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;예제) AndroidManifest.xml&lt;/h4&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;!-- Permission declarations --&amp;gt;
&amp;lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; /&amp;gt;
&amp;lt;uses-permission android:name=&quot;android.permission.RECORD_AUDIO&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;참고:&amp;nbsp;&lt;a href=&quot;https://github.com/android/camera-samples/blob/96cbc7d8014d72470c4b70ca76adfdc332d60123/Camera2Video/app/src/main/AndroidManifest.xml#L21C1-L23C71&quot;&gt;https://github.com/android/camera-samples/blob/96cbc7d8014d72470c4b70ca76adfdc332d60123/Camera2Video/app/src/main/AndroidManifest.xml#L21C1-L23C71&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;1.2. uses-feature 설명&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;설명&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;마켓플레이스 (Google Play 스토어) 에 필터링 적용&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;예) 카메라가 반드시 있어야 하는 앱은 카메라가 없는 휴대폰에서는 플레이 스토어에 표시 안함&lt;/li&gt;&lt;li&gt;참고:&amp;nbsp;&lt;a href=&quot;https://developer.android.com/guide/topics/manifest/uses-feature-element&quot;&gt;https://developer.android.com/guide/topics/manifest/uses-feature-element&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;예제) AndroidManifest.xml&lt;/h4&gt;

&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;!-- A camera with burst capability is required to use this application --&amp;gt;
&amp;lt;uses-feature android:name=&quot;android.hardware.camera.any&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;참고:&amp;nbsp;&lt;a href=&quot;https://github.com/android/camera-samples/blob/96cbc7d8014d72470c4b70ca76adfdc332d60123/Camera2Video/app/src/main/AndroidManifest.xml#L25C1-L26C64&quot;&gt;https://github.com/android/camera-samples/blob/96cbc7d8014d72470c4b70ca76adfdc332d60123/Camera2Video/app/src/main/AndroidManifest.xml#L25C1-L26C64&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;2. [코드] 권한 확인하기&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;devsite-heading-link&gt;&lt;/devsite-heading-link&gt;&lt;/p&gt;&lt;pre class=&quot;clear-for-copy&quot; is-upgraded=&quot;&quot; style=&quot;left: -99999px; position: absolute; text-align: left; top: -99999px;&quot;&gt;&lt;div&gt;https://developer.android.com/training/permissions/requesting#already-granted&lt;/div&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;예제) 권한 목록과 모든 권한 확인&lt;/h4&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;import android.Manifest
import androidx.core.content.ContextCompat

...

private val PERMISSIONS_REQUIRED = arrayOf(
        Manifest.permission.CAMERA,
        Manifest.permission.RECORD_AUDIO)

...

fun hasPermissions(context: Context) = PERMISSIONS_REQUIRED.all {
    ContextCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED
}
&lt;/code&gt;&lt;/pre&gt;

&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;코드 설명&lt;/h4&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;함수 원형:&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;public static int &lt;b&gt;checkSelfPermission&lt;/b&gt;(@NonNull Context &lt;b&gt;context&lt;/b&gt;, @NonNull String &lt;b&gt;permission&lt;/b&gt;)&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Permission 상수 값들은 android.Manifest.permission 클래스에 선언되어 있음&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://developer.android.com/reference/android/Manifest.permission?hl=en&quot;&gt;https://developer.android.com/reference/android/Manifest.permission?hl=en&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;둘 중 하나의 값 리턴&lt;/li&gt;&lt;ol&gt;&lt;li&gt;PERMISSION_DENIED (-1)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://developer.android.com/reference/android/content/pm/PackageManager#PERMISSION_DENIED&quot;&gt;https://developer.android.com/reference/android/content/pm/PackageManager#PERMISSION_DENIED&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;PERMISSION_GRANTED (0)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://developer.android.com/reference/android/content/pm/PackageManager#PERMISSION_GRANTED&quot;&gt;https://developer.android.com/reference/android/content/pm/PackageManager#PERMISSION_GRANTED&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;shouldShowRequestPermissionRationale&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://developer.android.com/reference/androidx/core/app/ActivityCompat#shouldShowRequestPermissionRationale(android.app.Activity,java.lang.String)&quot;&gt;https://developer.android.com/reference/androidx/core/app/ActivityCompat#shouldShowRequestPermissionRationale(android.app.Activity,java.lang.String)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;예)&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;
ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA)
&lt;/code&gt;&lt;/pre&gt;


&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;설명&lt;/h4&gt;&lt;p style=&quot;text-align: left;&quot;&gt;사용자 UI, 예를 들어 권한이 필요한 이유를 설명하는 화면를 보여줘야할 필요가 있다고 안드로이드 운영체제가 판단하는지 여부를 확인하는 함수&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;문제는 언제 true/false 값을 주는지 앱 개발자 측면에서 명확하지는 않다.&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;다만 안드로이드 공식 예제를 통해 처리 시점을 가늠해 본다&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/android/platform-samples/blob/main/samples/privacy/permissions/src/main/java/com/example/platform/privacy/permissions/MultiplePermissions.kt#L96&quot;&gt;https://github.com/android/platform-samples/blob/main/samples/privacy/permissions/src/main/java/com/example/platform/privacy/permissions/MultiplePermissions.kt#L96&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;3. [코드] 권한 요청&lt;/h2&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;권한 요청하는 방식은 2가지&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;requestPermissions() &amp;amp; onRequestPermissionsResult() 방식&lt;/li&gt;&lt;ul&gt;&lt;li&gt;AppCompatActivity 와 Fragment 에 내장된 함수들&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;AcitivtyResultApi 방식 (공식 문서 추천)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://developer.android.com/training/basics/intents/result&quot;&gt;https://developer.android.com/training/basics/intents/result&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;3.1. requestPermissions() &amp;amp; onRequestPermissionsResult() 방식&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;예제 코드)&amp;nbsp;&lt;a href=&quot;https://github.com/android/camera-samples/blob/main/Camera2Video/app/src/main/java/com/example/android/camera2/video/fragments/PermissionsFragment.kt&quot;&gt;https://github.com/android/camera-samples/blob/main/Camera2Video/app/src/main/java/com/example/android/camera2/video/fragments/PermissionsFragment.kt&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;requestPermissions() -&amp;gt; override fun onRequestPermissionsResult()&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;3.2. ActivityResultApi 방식 (공식 문서 추천)&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;requestPermissions 와 차이점&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;주요 차이점: request code 필요 없음&lt;/li&gt;&lt;li&gt;코드 스타일: 권한 핸들러를 따로 독립적으로 구현하여 Activity flow 와 섞임 방지&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;단일 권한&lt;/h4&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;예제)&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;class MainActivity : AppCompatActivity() {
    private val requestPermission = registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -&amp;gt;
        // returns boolean representind whether the 
        // permission is granted or not
        if (isGranted) {
            Log.i(&quot;DEBUG&quot;, &quot;permission granted&quot;)
        } else {
            Log.i(&quot;DEBUG&quot;, &quot;permission denied&quot;)
        }
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        findViewById&amp;lt;Button&amp;gt;(R.id.button).setOnClickListener {
            // call launch with string containing permission to be 
            // requested to show the system permission dialog
            requestPermission.launch(Manifest.permission.CAMERA)
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;


&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;복수 권한&lt;/h4&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;예제)&lt;/div&gt;

&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;
class MainActivity : AppCompatActivity() {
    private val requestPermission = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions -&amp;gt;

        permissions.forEach { actionMap -&amp;gt;
            when (actionMap.key) {
                Manifest.permission.CAMERA -&amp;gt; {
                    if (actionMap.value) {
                        
                        Log.i(&quot;DEBUG&quot;, &quot;permission granted&quot;)
                    } else {

                        Log.i(&quot;DEBUG&quot;, &quot;permission denied&quot;)
                    }
                }
            }
        }
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        findViewById&amp;lt;Button&amp;gt;(R.id.button).setOnClickListener {

            requestMultiplePermissions.launch(
                arrayOf(
                    Manifest.permission.CAMERA,
                    Manifest.permission.ACCESS_FINE_LOCATION
                )
            )
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;


&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/1339922472427812368/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2024/05/kotlin.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1339922472427812368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1339922472427812368'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2024/05/kotlin.html' title='[Kotlin] 권한 처리'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy8T4NwXzZK3iAMt7iXhU33-_Z2aLuzgj1B0gGrSojRkbOgrAtYFKrxWHCgnsFzEELRDT6JBpWQpMsapGt_pPNlfWi1DTjSgxhr1ueTQULt5dFmlMLkLHTw2g3g369gq8cqbciF3kgsSqtt9RmhZJdO7tTHo8w2fHxruH9duFQv6QhmKbWNtk6OohW/s72-c/Screenshot_20240506_041132.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-1000238253779218870</id><published>2024-05-08T09:32:00.004+09:00</published><updated>2024-05-19T08:41:54.975+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Camera2Interop"/><category scheme="http://www.blogger.com/atom/ns#" term="CameraX"/><title type='text'>CameraX Camera2 Interop 사용례</title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;CameraX?&lt;/h3&gt;&lt;p&gt;CameraX 는 Camera2 API(low-level API) 기반으로 만들어 졌다. CameraX 는 카메라 API 의 기기 하위 호환성을 보장하고 Camera2 API 를 사용하는 거 보다 훨씬 간단한 코드로 카메라를 사용하는 앱을 개발할 수 있게 돕는다.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;참고:&amp;nbsp;&lt;a href=&quot;https://developer.android.com/media/camera/camerax?hl=ko&quot;&gt;https://developer.android.com/media/camera/camerax?hl=ko&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Camera2Interop?&lt;/h3&gt;&lt;p&gt;CameraX 에서 일부 Camera2 설정(low-level API) 을 적용할 수 있도록 Camera2Interop 모듈을 제공한다.&lt;/p&gt;&lt;p&gt;몇가지 사용 사례를 설명함.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Full코드:&amp;nbsp;&lt;a href=&quot;https://github.com/bjtj/camera-samples/tree/camera2interop/CameraXVideo&quot;&gt;https://github.com/bjtj/camera-samples/tree/camera2interop/CameraXVideo&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/android/camera-samples&quot;&gt;공식 저장소&lt;/a&gt;에서 fork 함&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;1. 카메라 ID 얻기&lt;/h3&gt;&lt;p&gt;예제) &lt;a href=&quot;https://github.com/bjtj/camera-samples/blob/b0f35ee2b3a331a256090578efdb6c719624d7e7/CameraXVideo/app/src/main/java/com/example/android/camerax/video/fragments/CaptureFragment.kt#L263-L264&quot;&gt;Github 링크&lt;/a&gt;&lt;/p&gt;&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;&lt;pre style=&quot;font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;val &lt;/span&gt;camera = provider.bindToLifecycle(requireActivity(), camSelector)&lt;br /&gt;QualitySelector&lt;br /&gt;    .getSupportedQualities(camera.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;cameraInfo&lt;/span&gt;)&lt;br /&gt;    .&lt;span style=&quot;color: #57aaf7; font-style: italic;&quot;&gt;filter &lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;{ &lt;/span&gt;quality &lt;span style=&quot;font-weight: bold;&quot;&gt;-&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;listOf&lt;/span&gt;(Quality.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;UHD&lt;/span&gt;, Quality.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;FHD&lt;/span&gt;, Quality.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;HD&lt;/span&gt;, Quality.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;SD&lt;/span&gt;)&lt;br /&gt;            .contains(quality)&lt;br /&gt;    &lt;span style=&quot;font-weight: bold;&quot;&gt;}&lt;/span&gt;.&lt;span style=&quot;color: #57aaf7; font-style: italic;&quot;&gt;also &lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #c77dbb;&quot;&gt;cameraCapabilities&lt;/span&gt;.add(CameraCapability(camSelector, &lt;span style=&quot;font-weight: bold;&quot;&gt;it&lt;/span&gt;))&lt;br /&gt;    &lt;span style=&quot;font-weight: bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;val &lt;/span&gt;info = Camera2CameraInfo.from(camera.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;cameraInfo&lt;/span&gt;)&lt;br /&gt;Log.d(&lt;span style=&quot;color: #c77dbb;&quot;&gt;TAG&lt;/span&gt;&lt;span style=&quot;color: #6f737a;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #6aab73;&quot;&gt;&quot;Camera ID: &lt;/span&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;${&lt;/span&gt;info.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;cameraId&lt;/span&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #6aab73;&quot;&gt;&quot;&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;설명&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;CameraX 의 &lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider&quot;&gt;ProcessCameraProvider&lt;/a&gt;.&lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider?hl=en#bindToLifecycle(androidx.lifecycle.LifecycleOwner,androidx.camera.core.CameraSelector,androidx.camera.core.UseCaseGroup)&quot;&gt;bindToLifecycle()&lt;/a&gt; 는 &lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/camera/core/Camera&quot;&gt;Camera&lt;/a&gt; 객체를 리턴한다.&lt;/li&gt;&lt;li&gt;Camera 안에는 cameraInfo (&lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/camera/core/CameraInfo&quot;&gt;CameraInfo&lt;/a&gt;) 가 있다.&lt;/li&gt;&lt;li&gt;Camera2Interop 의&amp;nbsp;&lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/Camera2CameraInfo&quot;&gt;Camera2CameraInfo&lt;/a&gt;.&lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/Camera2CameraInfo#from(androidx.camera.core.CameraInfo)&quot;&gt;from()&lt;/a&gt; 은 CameraInfo 를 파라메터로&amp;nbsp;&lt;a href=&quot;https://developer.android.com/reference/androidx/camera/camera2/interop/Camera2CameraInfo&quot;&gt;Camera2CameraInfo&lt;/a&gt; 를 리턴한다.&lt;/li&gt;&lt;li&gt;Camera2CameraInfo 안에는 cameraId 값이 있다. (Camera2 의 &lt;a href=&quot;https://developer.android.com/reference/android/hardware/camera2/CameraDevice#getId()&quot;&gt;CameraDevice ID&lt;/a&gt; 값과 동일)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;2. CameraCharacteristics 얻기&lt;/h3&gt;&lt;p&gt;예제) &lt;a href=&quot;https://github.com/bjtj/camera-samples/blob/b0f35ee2b3a331a256090578efdb6c719624d7e7/CameraXVideo/app/src/main/java/com/example/android/camerax/video/fragments/CaptureFragment.kt#L265-L268&quot;&gt;Github 링크&lt;/a&gt;&lt;/p&gt;&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;&lt;pre style=&quot;font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;val &lt;/span&gt;exposureTimeRange = info.getCameraCharacteristic(CameraCharacteristics.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;SENSOR_INFO_EXPOSURE_TIME_RANGE&lt;/span&gt;)&lt;br /&gt;Log.d(&lt;span style=&quot;color: #c77dbb;&quot;&gt;TAG&lt;/span&gt;, &lt;span style=&quot;color: #6aab73;&quot;&gt;&quot;Camera Face (camera id: &lt;/span&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;${&lt;/span&gt;info.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;cameraId&lt;/span&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #6aab73;&quot;&gt;) exposureTimeRange: &lt;/span&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;$&lt;/span&gt;exposureTimeRange&lt;span style=&quot;color: #6aab73;&quot;&gt;&quot;&lt;/span&gt;)&lt;br /&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;val &lt;/span&gt;sensitivityRange = info.getCameraCharacteristic(CameraCharacteristics.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;SENSOR_INFO_SENSITIVITY_RANGE&lt;/span&gt;)&lt;br /&gt;Log.d(&lt;span style=&quot;color: #c77dbb;&quot;&gt;TAG&lt;/span&gt;, &lt;span style=&quot;color: #6aab73;&quot;&gt;&quot;Camera Face (camera id: &lt;/span&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;${&lt;/span&gt;info.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;cameraId&lt;/span&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #6aab73;&quot;&gt;) sensitivityRange: &lt;/span&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;$&lt;/span&gt;sensitivityRange&lt;span style=&quot;color: #6aab73;&quot;&gt;&quot;&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;설명&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Camera2CameraInfo 에는 &lt;a href=&quot;https://developer.android.com/reference/androidx/camera/camera2/interop/Camera2CameraInfo#getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key%3CT%3E)&quot;&gt;getCameraCharacteristics()&lt;/a&gt; 함수가 있다. (Camera2 의 CameraManager.&lt;a href=&quot;https://developer.android.com/reference/android/hardware/camera2/CameraManager#getCameraCharacteristics(java.lang.String)&quot;&gt;getCameraCharacteristics()&lt;/a&gt; 와 동일)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;3. Camera2 CaptureRequest 설정&lt;/h3&gt;&lt;p&gt;예제) AE 모드를 off 하고 exposure time(shutter speed) 와 ISO 값 조정 &lt;a href=&quot;https://github.com/bjtj/camera-samples/blob/b0f35ee2b3a331a256090578efdb6c719624d7e7/CameraXVideo/app/src/main/java/com/example/android/camerax/video/fragments/CaptureFragment.kt#L150-L157&quot;&gt;Github 링크&lt;/a&gt;&lt;/p&gt;&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;&lt;pre style=&quot;font-family: &amp;quot;JetBrains Mono&amp;quot;, monospace; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;val &lt;/span&gt;camera = cameraProvider.bindToLifecycle(&lt;br /&gt;    &lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;viewLifecycleOwner&lt;/span&gt;,&lt;br /&gt;    cameraSelector,&lt;br /&gt;    &lt;span style=&quot;color: #c77dbb;&quot;&gt;videoCapture&lt;/span&gt;,&lt;br /&gt;    preview&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;val &lt;/span&gt;control = camera.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;cameraControl&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;val &lt;/span&gt;camControl = Camera2CameraControl.from(control)&lt;br /&gt;&lt;span style=&quot;color: #cf8e6d;&quot;&gt;val &lt;/span&gt;options = CaptureRequestOptions.Builder()&lt;br /&gt;    .setCaptureRequestOption(CaptureRequest.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;CONTROL_AE_MODE&lt;/span&gt;, CaptureRequest.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;CONTROL_AE_MODE_OFF&lt;/span&gt;)&lt;br /&gt;    .setCaptureRequestOption(CaptureRequest.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;SENSOR_SENSITIVITY&lt;/span&gt;, &lt;span style=&quot;color: #2aacb8;&quot;&gt;3368&lt;/span&gt;)&lt;br /&gt;    .setCaptureRequestOption(CaptureRequest.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;SENSOR_EXPOSURE_TIME&lt;/span&gt;, &lt;span style=&quot;color: #2aacb8;&quot;&gt;38860 &lt;/span&gt;* &lt;span style=&quot;color: #2aacb8;&quot;&gt;100&lt;/span&gt;)&lt;br /&gt;    .build()&lt;br /&gt;camControl.&lt;span style=&quot;color: #c77dbb; font-style: italic;&quot;&gt;captureRequestOptions &lt;/span&gt;= options&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;설명&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;CameraX 의&amp;nbsp;&lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider&quot;&gt;ProcessCameraProvider&lt;/a&gt;.&lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider?hl=en#bindToLifecycle(androidx.lifecycle.LifecycleOwner,androidx.camera.core.CameraSelector,androidx.camera.core.UseCaseGroup)&quot;&gt;bindToLifecycle()&lt;/a&gt; 는&amp;nbsp;&lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/camera/core/Camera&quot;&gt;Camera&lt;/a&gt;&amp;nbsp;객체를 리턴한다.&lt;/li&gt;&lt;li&gt;Camera 안에는 cameraControl (&lt;a href=&quot;https://developer.android.com/reference/androidx/camera/core/CameraControl&quot;&gt;CameraControl&lt;/a&gt;) 이 있다.&lt;/li&gt;&lt;li&gt;Camera2Interop 의 &lt;a href=&quot;https://developer.android.com/reference/androidx/camera/camera2/interop/Camera2CameraControl&quot;&gt;Camera2CameraControl&lt;/a&gt;.&lt;a href=&quot;https://developer.android.com/reference/androidx/camera/camera2/interop/Camera2CameraControl#from(androidx.camera.core.CameraControl)&quot;&gt;from()&lt;/a&gt; 은 CameraControl 을 파라메터로&amp;nbsp;&lt;a href=&quot;https://developer.android.com/reference/androidx/camera/camera2/interop/Camera2CameraControl&quot;&gt;Camera2CameraControl&lt;/a&gt;&amp;nbsp;를 리턴한다.&lt;/li&gt;&lt;li&gt;Camera2CameraControl 에 captureRequestOptions 값을 설정하면 되는데 &lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/CaptureRequestOptions.Builder?hl=en&quot;&gt;CameraRequestOptions.Builder()&lt;/a&gt;&amp;nbsp;(Camera2 의&amp;nbsp;&lt;a href=&quot;https://developer.android.com/reference/android/hardware/camera2/CaptureRequest.Builder#set(android.hardware.camera2.CaptureRequest.Key%3CT%3E,%20T)&quot;&gt;CaptureRequest.Builder.set()&lt;/a&gt; 과 유사) 를 이용한 값을 설정하면 된다.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;설정에 사용되는 값은 Camera2 의 &lt;a href=&quot;https://developer.android.com/reference/android/hardware/camera2/CaptureRequest?hl=en&quot;&gt;CaptureRequest&lt;/a&gt; 와 동일&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/1000238253779218870/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2024/05/camerax-camera2-interop.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1000238253779218870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1000238253779218870'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2024/05/camerax-camera2-interop.html' title='CameraX Camera2 Interop 사용례'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-173846658083775244</id><published>2024-05-07T10:56:00.003+09:00</published><updated>2024-05-07T10:56:45.596+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>[Android Studio 팁] 자동으로 Run 탭으로 이동하는 증상</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;증상&lt;/h3&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgZdkPt4IuAyZk4PyvKUwaIwtSPB3CN4nH9mnp_XRvMFxu2fTbklJxNRvbuVYPyNTb-3YjdNtJ-3gPxtF8GJHonfEWMPrZvdZ9s-m8NfpkTTuqyaBkLQGHRXWsx8kI0omDa0SIaJiLHaCpOs5BAlMcyGNZOR0z9wBAtbMjk9URzeKRsK57CmYrHtwZz&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;166&quot; data-original-width=&quot;308&quot; height=&quot;172&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgZdkPt4IuAyZk4PyvKUwaIwtSPB3CN4nH9mnp_XRvMFxu2fTbklJxNRvbuVYPyNTb-3YjdNtJ-3gPxtF8GJHonfEWMPrZvdZ9s-m8NfpkTTuqyaBkLQGHRXWsx8kI0omDa0SIaJiLHaCpOs5BAlMcyGNZOR0z9wBAtbMjk9URzeKRsK57CmYrHtwZz&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;앱을 실행하면 자동으로 Run 탭으로 이동한다.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;로그캣 탭을 보고 있는데 자동으로 Run 탭으로 넘어가 불편하다&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;실행시 자동으로 Run 탭으로 이동하지 않도록 하기&lt;/h3&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjSXpptj-IUGQI1NdLupr-METtMpbDgO42-mF90o_mqMtMhJfr__gPZp9kn6-1b7txI1ChlldYFAUGdtmS9i6GczqAHDxuXRvaJzHyxbj3Uabdfe6bXg6f13nrYG0CkrIzjckvO8LzaxI8DROgGUeQyeFfdSLLBXtzV3KnrVgmkEyKBdRapY52_6HsB&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;396&quot; data-original-width=&quot;626&quot; height=&quot;253&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjSXpptj-IUGQI1NdLupr-METtMpbDgO42-mF90o_mqMtMhJfr__gPZp9kn6-1b7txI1ChlldYFAUGdtmS9i6GczqAHDxuXRvaJzHyxbj3Uabdfe6bXg6f13nrYG0CkrIzjckvO8LzaxI8DROgGUeQyeFfdSLLBXtzV3KnrVgmkEyKBdRapY52_6HsB=w400-h253&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;메뉴 -&amp;gt; Run -&amp;gt; Edit Configurations...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiHEBN3ddoZ5ogR_KqtzhhATM6SigExzinOOjWd9El6xq4ZvVWs1lyW7Ugp48thaXnPCF4MrPZE1Ebk7NZL64WMymayAXXYI5ycm_FkC8k0C8Ie_pLcMHbQmBsXhE8bWlSHut1vL4MHA-hbaaWNPHqjyRb2Rl1HhG_MaT8szUVd9oj4La7LEg6OkdWe&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;972&quot; data-original-width=&quot;877&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiHEBN3ddoZ5ogR_KqtzhhATM6SigExzinOOjWd9El6xq4ZvVWs1lyW7Ugp48thaXnPCF4MrPZE1Ebk7NZL64WMymayAXXYI5ycm_FkC8k0C8Ie_pLcMHbQmBsXhE8bWlSHut1vL4MHA-hbaaWNPHqjyRb2Rl1HhG_MaT8szUVd9oj4La7LEg6OkdWe=w577-h640&quot; width=&quot;577&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;제일 아래 Activate tool window 체크를 없애면 증상이 없어진다&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;제일 아래 있기 때문에 스크롤 필요할 수 있다&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/173846658083775244/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2024/05/android-studio-run.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/173846658083775244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/173846658083775244'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2024/05/android-studio-run.html' title='[Android Studio 팁] 자동으로 Run 탭으로 이동하는 증상'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgZdkPt4IuAyZk4PyvKUwaIwtSPB3CN4nH9mnp_XRvMFxu2fTbklJxNRvbuVYPyNTb-3YjdNtJ-3gPxtF8GJHonfEWMPrZvdZ9s-m8NfpkTTuqyaBkLQGHRXWsx8kI0omDa0SIaJiLHaCpOs5BAlMcyGNZOR0z9wBAtbMjk9URzeKRsK57CmYrHtwZz=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-5384322552836513457</id><published>2022-10-31T14:33:00.000+09:00</published><updated>2022-10-31T14:33:48.317+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="문제해결"/><title type='text'>[문제해결] Android Studio 가 app 을 실행하지 않는다.</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;증상:&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;- 안드로이드 스튜디오에서 앱을 실행하면 설치는 되는데 아래와 같이 logcat 로그가 있고 앱은 실행하지 않는다.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;2022-10-31 14:09:25.302&amp;nbsp; 5891-5891&amp;nbsp; studio.deploy&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pid-5891&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E&amp;nbsp; Could not remove dir &#39;/data/data/kr.myapp/code_cache/.ll/&#39;: No such file or directory&lt;/blockquote&gt;&lt;br /&gt;&amp;nbsp;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;해결:&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;- 참고: &lt;a href=&quot;https://issuetracker.google.com/issues/243496470#comment23&quot;&gt;https://issuetracker.google.com/issues/243496470#comment23&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;실행 설정 확인 (Run Configuration)&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;414&quot; src=&quot;data:image/png;base64,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&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Launch Options 확인&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;원인:&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;- 프로젝트 생성시 No Activity 로 하여 기본 설정이 Nothing 으로 설정된 경우 였음&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;462&quot; src=&quot;data:image/png;base64,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&quot; width=&quot;640&quot; /&gt; &lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;- 증상에 나오는 로그는 문제 해결 후에도 실행할 때 뜨는 것을 확인함&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/5384322552836513457/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2022/10/android-studio-app.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/5384322552836513457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/5384322552836513457'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2022/10/android-studio-app.html' title='[문제해결] Android Studio 가 app 을 실행하지 않는다.'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-8003709185281024925</id><published>2018-11-24T14:46:00.000+09:00</published><updated>2018-11-24T14:46:14.241+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Gradle"/><title type='text'>Gradle 의존성 옵션 &amp; api 와 implementation 차이점</title><content type='html'>&lt;h2&gt;
의존성 옵션&lt;/h2&gt;
&lt;br /&gt;
Gradle 프로젝트는 여러 모듈을 포함할 수 있고 하나의 모듈은 다른 모듈을 의존할 수 있다&lt;br /&gt;
그리고 의존하고 있는 모듈이 또다른 모듈을 의존할 수 있다&lt;br /&gt;
&lt;br /&gt;
모듈이 커지면 빌드 시간이 오래 걸리고 여러 모듈이 많이 얽혀 있을 수록 빌드 시간이 오래 걸린다&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVYRkE5fnQUhwSHOlnuCwTBFkOnIr018QNmiwlyQyXinz1RLK8I60aa1F7LCPk11HvJoIuzNoKkvoLeMJk3WQwjbH23ASWKytCxvqX884PvaJGkC22TczYFKti-srWvc9AGtr9C8amoA/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2018-11-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+1.26.05.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;43&quot; data-original-width=&quot;647&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVYRkE5fnQUhwSHOlnuCwTBFkOnIr018QNmiwlyQyXinz1RLK8I60aa1F7LCPk11HvJoIuzNoKkvoLeMJk3WQwjbH23ASWKytCxvqX884PvaJGkC22TczYFKti-srWvc9AGtr9C8amoA/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2018-11-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+1.26.05.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;apple sd gothic neo&amp;quot;; font-size: 12.8px;&quot;&gt;compile 옵션 사용시 warning 문구&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Gradle 3.0 부터 의존 라이브러리 수정 시 재빌드가 필요한 라이브러리를 선택적으로 할 수 있도록 compile 대신 api 와 implementation 으로 나눠 필요없는 경우 재빌드 하지 않도록 함&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.android.com/studio/build/dependencies?utm_source=android-studio#dependency_configurations&quot;&gt;https://developer.android.com/studio/build/dependencies?utm_source=android-studio#dependency_configurations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Gradle 버전 호환을 위해 compile 은 api 와 동일한 동작을 함&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;2018년 까지만 지원할 것으로 보임 &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h3&gt;
api 와 implementation 차이점&lt;/h3&gt;
&lt;br /&gt;
&lt;br /&gt;
참고&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/mindorks/implementation-vs-api-in-gradle-3-0-494c817a6fa&quot;&gt;https://medium.com/mindorks/implementation-vs-api-in-gradle-3-0-494c817a6fa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/44419574/5676460&quot;&gt;https://stackoverflow.com/a/44419574/5676460&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
차이점&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;api: 의존 라이브러리 수정시 본 모듈을 의존하고 있는 모듈들 또한 재빌드&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;A(api) &amp;lt;- B &amp;lt;- C 의 경우 C 에서 A 를 접근할 수 있음&lt;/li&gt;
&lt;li&gt;A 수정시 B 와 C 모두 재빌드&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;implementaion: 의존 라이브러리 수정시 본 모듈까지만 재빌드&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;A(implementation) &amp;lt;- B &amp;lt;- C 의 경우 C 에서 A 를 접근할 수 없음&lt;/li&gt;
&lt;li&gt;A 수정시 B 까지 재빌드&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h4&gt;
의존성 옵션들&lt;/h4&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;implementation: 의존 라이브러리 수정시 본 모듈까지만 재빌드&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;본 모듈을 의존하는 모듈은 해당 라이브러리의 api 를 사용할 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;api: 의존 라이브러리 수정시 본 모듈을 의존하는 모듈들도 재빌드&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;본 모듈을 의존하는 모듈들도 해당 라이브러리의 api 를 사용할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;compileOnly: compile 시에만 빌드하고 빌드 결과물에는 포함하지 않음&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;runtime 시 필요없는 라이브러리인 경우 (runtime 환경에 이미 라이브러리가 제공되고 있는가 하는 등의 경우)&lt;/li&gt;
&lt;li&gt;참고:&amp;nbsp;&lt;a href=&quot;https://blog.gradle.org/introducing-compile-only-dependencies&quot;&gt;https://blog.gradle.org/introducing-compile-only-dependencies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;runtimeOnly: runtime 시에만 필요한 라이브러리인 경우&lt;/li&gt;
&lt;li&gt;annotationProcessor: annotation processor 명시 (gradle 4.6)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;참고:&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.gradle.org/4.6/release-notes.html&quot;&gt;https://docs.gradle.org/4.6/release-notes.html&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.gradle.org/incremental-compiler-avoidance#about-annotation-processors&quot;&gt;https://blog.gradle.org/incremental-compiler-avoidance#about-annotation-processors&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Annotation processing 이 필요없다고 예측되는 경우 빌드 제외&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h3&gt;
특정 build flavor 에서만 동작&lt;/h3&gt;
&lt;br /&gt;
예) 무료 버전 빌드라는 의미로 free 라는 flavor 를 미리 작성한 경우&lt;br /&gt;
freeImplementation 으로 지정하면 free flavor 일때만 의존성 빌드&lt;br /&gt;
&lt;br /&gt;
testImplementation 은 test 시에만 의존되며 본 모듈을 의존하는 다른 모듈은 빌드에 영향이 없게 함&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
계속해서 warning 이 뜨는 경우&lt;/h3&gt;
&lt;br /&gt;
자신의 프로젝트에 모든 compile 옵션을 제거했는데도 warning 이 뜨는 경우&lt;br /&gt;
종속 라이브러리 버전을 올리면 warning 이 사라질 수 있음&lt;br /&gt;
&lt;br /&gt;
참고:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/49586312/5676460&quot;&gt;https://stackoverflow.com/a/49586312/5676460&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;h3&gt;
결론&lt;/h3&gt;
&lt;br /&gt;
주로 외부 라이브러리를 사용하는 경우 api 나 implementation 나 별 차이 없을 것으로 보임&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/8003709185281024925/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2018/11/api-implementation.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/8003709185281024925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/8003709185281024925'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2018/11/api-implementation.html' title='Gradle 의존성 옵션 &amp; api 와 implementation 차이점'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVYRkE5fnQUhwSHOlnuCwTBFkOnIr018QNmiwlyQyXinz1RLK8I60aa1F7LCPk11HvJoIuzNoKkvoLeMJk3WQwjbH23ASWKytCxvqX884PvaJGkC22TczYFKti-srWvc9AGtr9C8amoA/s72-c/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2018-11-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+1.26.05.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-1657423793288699443</id><published>2018-03-11T09:54:00.002+09:00</published><updated>2018-03-11T09:54:20.776+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="문제해결"/><title type='text'>ListView 의 footer view 가 보이지 않는 문제</title><content type='html'>AddFooterView() 함수를 사용해서 footer view 를 추가했지만 화면에 표시가 되지 않았다&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
AddFooterView() 함수를 ListView 에 adapter 를 설정하기 전에 불러주어야 했다&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/1657423793288699443/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2018/03/listview-footer-view.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1657423793288699443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1657423793288699443'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2018/03/listview-footer-view.html' title='ListView 의 footer view 가 보이지 않는 문제'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-4663996213701508572</id><published>2017-07-04T23:04:00.000+09:00</published><updated>2018-01-06T10:54:20.685+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android SDK"/><title type='text'>Service AIDL</title><content type='html'>&lt;div&gt;
Official: &lt;a href=&quot;https://developer.android.com/guide/components/aidl.html&quot;&gt;https://developer.android.com/guide/components/aidl.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
다른 앱들간 통신하기 위한 여러 방법이 있지만 method 를 직접적으로 호출하고 바로 리턴 받을 수 있는 AIDL 구현 예제 설명&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
용어&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Bind&lt;/h3&gt;
&lt;div&gt;
서비스와 통신하기 위해 연결과정을 binding 이라고 함&lt;br /&gt;
bindService() 로 실행된 서비스는 unbindService() 될 때 종료됨&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
AIDL (Android Interface Definition Language)&lt;/h3&gt;
&lt;div&gt;
Service 와 client 간 통신 규약 파일이며 service 측과 client 측이 통신하기 위해 동일한 aidl 파일을 공유해야 함&lt;br /&gt;
예를 들어 service 와 client 가 다른 프로젝트라면 aidl 을 같은 package 위치에 복사해야 하며 변경 사항 발생시 공유 해야 함&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
AIDL 예제&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;
Service 와 Client 작성 예제&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bjtj/tjsamples/tree/master/android/RemoteClient&quot;&gt;https://github.com/bjtj/tjsamples/tree/master/android/RemoteClient&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bjtj/tjsamples/tree/master/android/RemoteServer&quot;&gt;https://github.com/bjtj/tjsamples/tree/master/android/RemoteServer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3&gt;
1. Service (com.sample.myservice)&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
com.sample.myservice.IMyService.aidl 작성&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// IMyServiceInterface.aidl&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package com.sample.myservice;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Declare any non-default types here with import statements&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;interface IMyServiceInterface {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; String greet();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;greet() 함수 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
com.sample.myservice.MyService.java 작성&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package com.sample.myservice;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.app.Service;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.content.Intent;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.IBinder;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.RemoteException;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class MyService extends Service {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public MyService() {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private IMyServiceInterface.Stub binder = new IMyServiceInterface.Stub() {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public String greet() throws RemoteException {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &quot;Hello&quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public IBinder onBind(Intent intent) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return binder;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;aidl 파일 작성 후 Android Studio 의 build -&amp;gt; make project 를 해야 aidl 을 자동 인식&lt;/li&gt;
&lt;li&gt;IMyServiceInterface.Stub 을 구현&lt;/li&gt;
&lt;li&gt;onBind() 시 구현한 IMyServiceInterface.Stub 리턴&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3&gt;
2. Client 예제 (com.sample.myapp 다른 프로젝트)&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
IMyService.aidl 복사&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;위에 생성한 aidl 을 복사&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
com.sample.myapp.MainActivity.java 생성&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package com.sample.myapp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.content.ComponentName;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.content.Intent;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.content.ServiceConnection;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.Bundle;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.IBinder;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.RemoteException;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.support.v7.app.AppCompatActivity;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.util.Log;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import com.sample.myservice.IMyServiceInterface;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class MainActivity extends AppCompatActivity {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private final static String TAG = &quot;MainActivity&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private IMyServiceInterface myservice;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private ServiceConnection serviceConnection = new ServiceConnection() {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onServiceConnected(ComponentName componentName, IBinder iBinder) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; myservice = IMyServiceInterface.Stub.asInterface(iBinder);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.d(TAG, myservice.greet());&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (RemoteException e) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.e(TAG, &quot;exception&quot;, e);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onServiceDisconnected(ComponentName componentName) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; myservice = null;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; protected void onCreate(Bundle savedInstanceState) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.onCreate(savedInstanceState);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.activity_main);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Intent intent = new Intent();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; intent.setClassName(&quot;com.sample.myservice&quot;, &quot;com.sample.myservice.MyService&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bindService(intent, serviceConnection, BIND_AUTO_CREATE);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; protected void onDestroy() {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.onDestroy();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;unbindService(serviceConnection);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;마찬가지로 make project 를 해야 Anroid Studio 가 aidl 파일을 자동 인식&lt;/li&gt;
&lt;li&gt;외부 service 이기 때문에 intent 에 setClassName() 으로 서비스 지정&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Service 의 package 명과 Service 의 full package 명이 파라메터&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;ServiceConnection 의 onServiceConnected() 와 onSerivceDisconnected() 처리&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;IMyServiceInterface.Stub.asInterface() 로 따로 casting 필요없음&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;aidl 구현 함수들은 RemoteException 을 throw 할 수 있음&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;연결 해제된 경우 등&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;onCreate() 에서 bindService() 했으니 onDestroy() 시 unbindService()&lt;/li&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2&gt;
Callback 예제&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;
Service -&amp;gt; Client 방향으로 통신할 수 있도록 callback 을 등록&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
1. Service 수정&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
com.sample.myservice.IMyCallbackInterface.aidl 생성&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// IMyCallbackInterface.aidl&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package com.sample.myservice;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Declare any non-default types here with import statements&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;interface IMyCallbackInterface {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; void onUpdate(int value);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Service 에서 호출할 onUpdate() 함수 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4&gt;
com.sample.myservice.IMyServiceInterface 수정&lt;/h4&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// IMyServiceInterface.aidl&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package com.sample.myservice;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Declare any non-default types here with import statements&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import com.sample.myservice.IMyCallbackInterface;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;interface IMyServiceInterface {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; String greet();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; boolean registerCallback(IMyCallbackInterface callback);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; boolean unregisterCallback(IMyCallbackInterface callback);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;registerCallback(), unregisterCallback() 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
com.sample.service.MyService.java 수정&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package com.sample.myservice;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.app.Service;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.content.Intent;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.Handler;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.IBinder;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.Message;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.RemoteCallbackList;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.RemoteException;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.util.Log;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class MyService extends Service {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private final static String TAG = &quot;MyService&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private RemoteCallbackList&amp;lt;IMyCallbackInterface&amp;gt; callbackList = new RemoteCallbackList&amp;lt;&amp;gt;();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private int value;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public MyService() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private IMyServiceInterface.Stub binder = new IMyServiceInterface.Stub() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public String greet() throws RemoteException {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &quot;Hello&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public boolean registerCallback(IMyCallbackInterface callback) throws RemoteException {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return callbackList.register(callback);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public boolean unregisterCallback(IMyCallbackInterface callback) throws RemoteException {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return callbackList.unregister(callback);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private final static int MSG_BROADCAST = 0;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private Handler handler = new Handler() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void handleMessage(Message msg) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.handleMessage(msg);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch (msg.what) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case MSG_BROADCAST:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value++;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int size = callbackList.beginBroadcast();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; size; i++) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; callbackList.getBroadcastItem(i).onUpdate(value);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (RemoteException e) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.e(TAG, &quot;exception&quot;, e);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; callbackList.finishBroadcast();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sendEmptyMessageDelayed(MSG_BROADCAST, 1000);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; default:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public IBinder onBind(Intent intent) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return binder;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public void onCreate() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.onCreate();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; handler.sendEmptyMessageDelayed(MSG_BROADCAST, 1000);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public void onDestroy() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.onDestroy();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; handler.removeCallbacksAndMessages(null);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;android.os.RemoteCallbackList 사용&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;broadcast&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;beginBroadcast() 로 등록된 callback 통신 시작&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;등록된 callback 객수 리턴&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;getBroadcastItem() 로 등록된 callback 접근&lt;/li&gt;
&lt;li&gt;finishBroadcast() 로 callback 통신 작업 종료&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;register/unregister&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
2. Client 수정&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
com.sample.myapp.MainActivity.java 수정&lt;/h4&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package com.sample.myapp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.content.ComponentName;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.content.Intent;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.content.ServiceConnection;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.Bundle;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.IBinder;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.os.RemoteException;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.support.v7.app.AppCompatActivity;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import android.util.Log;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import com.sample.myservice.IMyCallbackInterface;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import com.sample.myservice.IMyServiceInterface;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class MainActivity extends AppCompatActivity {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private final static String TAG = &quot;MainActivity&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private IMyCallbackInterface.Stub callback = new IMyCallbackInterface.Stub() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onUpdate(int value) throws RemoteException {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.d(TAG, &quot;value: &quot; + value);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private IMyServiceInterface myservice;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private ServiceConnection serviceConnection = new ServiceConnection() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onServiceConnected(ComponentName componentName, IBinder iBinder) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; myservice = IMyServiceInterface.Stub.asInterface(iBinder);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.d(TAG, myservice.greet());&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; myservice.registerCallback(callback);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (RemoteException e) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.e(TAG, &quot;exception&quot;, e);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onServiceDisconnected(ComponentName componentName) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; myservice = null;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; protected void onCreate(Bundle savedInstanceState) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.onCreate(savedInstanceState);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.d(TAG, &quot;onCreate()&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.activity_main);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Intent intent = new Intent();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; intent.setClassName(&quot;com.sample.myservice&quot;, &quot;com.sample.myservice.MyService&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bindService(intent, serviceConnection, BIND_AUTO_CREATE);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; protected void onDestroy() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.onDestroy();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.d(TAG, &quot;onDestroy()&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; myservice.unregisterCallback(callback);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (RemoteException e) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.e(TAG, &quot;exception&quot;, e);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unbindService(serviceConnection);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;IMyCallbackInterface.Stub 구현&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;onUpdate() 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;onServiceConnected() 에서 callback 등록&lt;/li&gt;
&lt;li&gt;unbindService() 하기 전에 callback 등록 해제&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/4663996213701508572/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2017/07/service-aidl.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/4663996213701508572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/4663996213701508572'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2017/07/service-aidl.html' title='Service AIDL'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-7463703220074708790</id><published>2017-05-26T08:38:00.001+09:00</published><updated>2017-07-13T10:33:45.923+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="adb shell"/><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>adb 및 adb shell 명령어 정리</title><content type='html'>&lt;b&gt;PC 에 연결된 Device 목록 확인&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ adb devices&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;logcat 캐시 지우기&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ adb logcat -c&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;logcat 시간 정보 포함하여 출력 &lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ adb logcat -v threadtime&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;APK 설치&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ adb install &amp;lt;file_path&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;pm 명령 (adb shell)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ pm install &amp;lt;apk path&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;full path 로 입력해야 됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;-r 옵션: 기존에 설치된 경우 재설치&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;앱 제거&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ adb unintsall &amp;lt;package_name&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;pm 명령 (adb shell)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ pm uninstall &amp;lt;package name&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;앱 종료 (adb shell)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ kill &amp;lt;pid&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;activity 시작 (adb shell)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ am start &amp;lt;package&amp;gt;/&amp;lt;activity&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;e.g.)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ am start com.sample/.MainActivity&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;service 시작&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ am startservice &amp;lt;package&amp;gt;/&amp;lt;service&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;e.g.)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ am startservice com.sample/.MyService&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package 정보 확인&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ dumpsys package &amp;lt;package name&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;permission 정보, data path 등 여러 정보 확인 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;e.g.)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ dumpsys package com.android.systemui&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;permission 목록&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ pm list packages -g&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;broacast&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ adb shell am broadcast -a ${action_name} -e ${extra_key} ${extra_string_value}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;가능한 옵션들&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;pre&gt;    [-a &amp;lt;ACTION&amp;gt;] [-d &amp;lt;DATA_URI&amp;gt;] [-t &amp;lt;MIME_TYPE&amp;gt;]
    [-c &amp;lt;CATEGORY&amp;gt; [-c &amp;lt;CATEGORY&amp;gt;] ...]
    [-e|--es &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_STRING_VALUE&amp;gt; ...]
    [--esn &amp;lt;EXTRA_KEY&amp;gt; ...]
    [--ez &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_BOOLEAN_VALUE&amp;gt; ...]
    [--ei &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_INT_VALUE&amp;gt; ...]
    [--el &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_LONG_VALUE&amp;gt; ...]
    [--ef &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_FLOAT_VALUE&amp;gt; ...]
    [--eu &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_URI_VALUE&amp;gt; ...]
    [--ecn &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_COMPONENT_NAME_VALUE&amp;gt;]
    [--eia &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_INT_VALUE&amp;gt;[,&amp;lt;EXTRA_INT_VALUE...]]
        (mutiple extras passed as Integer[])
    [--eial &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_INT_VALUE&amp;gt;[,&amp;lt;EXTRA_INT_VALUE...]]
        (mutiple extras passed as List&amp;lt;Integer&amp;gt;)
    [--ela &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_LONG_VALUE&amp;gt;[,&amp;lt;EXTRA_LONG_VALUE...]]
        (mutiple extras passed as Long[])
    [--elal &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_LONG_VALUE&amp;gt;[,&amp;lt;EXTRA_LONG_VALUE...]]
        (mutiple extras passed as List&amp;lt;Long&amp;gt;)
    [--efa &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_FLOAT_VALUE&amp;gt;[,&amp;lt;EXTRA_FLOAT_VALUE...]]
        (mutiple extras passed as Float[])
    [--efal &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_FLOAT_VALUE&amp;gt;[,&amp;lt;EXTRA_FLOAT_VALUE...]]
        (mutiple extras passed as List&amp;lt;Float&amp;gt;)
    [--esa &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_STRING_VALUE&amp;gt;[,&amp;lt;EXTRA_STRING_VALUE...]]
        (mutiple extras passed as String[]; to embed a comma into a string,
         escape it using &quot;\,&quot;)
    [--esal &amp;lt;EXTRA_KEY&amp;gt; &amp;lt;EXTRA_STRING_VALUE&amp;gt;[,&amp;lt;EXTRA_STRING_VALUE...]]
        (mutiple extras passed as List&amp;lt;String&amp;gt;; to embed a comma into a string,
         escape it using &quot;\,&quot;)
    [--grant-read-uri-permission] [--grant-write-uri-permission]
    [--grant-persistable-uri-permission] [--grant-prefix-uri-permission]
    [--debug-log-resolution] [--exclude-stopped-packages]
    [--include-stopped-packages]
    [--activity-brought-to-front] [--activity-clear-top]
    [--activity-clear-when-task-reset] [--activity-exclude-from-recents]
    [--activity-launched-from-history] [--activity-multiple-task]
    [--activity-no-animation] [--activity-no-history]
    [--activity-no-user-action] [--activity-previous-is-top]
    [--activity-reorder-to-front] [--activity-reset-task-if-needed]
    [--activity-single-top] [--activity-clear-task]
    [--activity-task-on-home]
    [--receiver-registered-only] [--receiver-replace-pending]
    [--selector]
    [&amp;lt;URI&amp;gt; | &amp;lt;PACKAGE&amp;gt; | &amp;lt;COMPONENT&amp;gt;]
&lt;/pre&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/7463703220074708790/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2017/05/adb.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/7463703220074708790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/7463703220074708790'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2017/05/adb.html' title='adb 및 adb shell 명령어 정리'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-387919900486112776</id><published>2015-07-10T16:18:00.001+09:00</published><updated>2015-07-10T16:18:34.577+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="NDK"/><title type='text'>[NDK] ndk-build 빌드 명령 출력</title><content type='html'>ndk-build 시 기본으로 화면에 출력하는 정보가 적습니다.&lt;br /&gt;
&lt;br /&gt;
빌드 에러가 발생하는 경우 어떤 명령으로 빌드를 수행하였는지 중요합니다.&lt;br /&gt;
&lt;br /&gt;
참고: &lt;a href=&quot;https://groups.google.com/forum/#!topic/android-ndk/5OHkW6Hf2JA&quot;&gt;https://groups.google.com/forum/#!topic/android-ndk/5OHkW6Hf2JA&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;$ ndk-build V=1&lt;/span&gt; 옵션으로 빌드 명령을 화면에 출력할 수 있습니다.</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/387919900486112776/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2015/07/ndk-ndk-build.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/387919900486112776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/387919900486112776'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2015/07/ndk-ndk-build.html' title='[NDK] ndk-build 빌드 명령 출력'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-6518926537119032145</id><published>2015-01-29T22:14:00.000+09:00</published><updated>2015-01-29T22:14:07.852+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="개발 환경"/><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>Eclipse -&gt; Android Studio</title><content type='html'>&lt;b&gt;참고&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.android.com/sdk/installing/migrate.html&quot;&gt;https://developer.android.com/sdk/installing/migrate.html&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.airpair.com/android/android-studio-vs-eclipse&quot;&gt;https://www.airpair.com/android/android-studio-vs-eclipse&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2&gt;
Android Studio 로 변환 과정&lt;/h2&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Android Studio 가 Android 공식 개발 도구로 지정되었습니다.&lt;br /&gt;
Android Studio 사용법을 익혀야 겠습니다.&lt;/blockquote&gt;
&lt;h3&gt;
소개&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;간단하게 이야기 하자면 Android Studio 에서 eclipse project 를 불러오면 자동으로 변환이 됨&lt;/li&gt;
&lt;li&gt;예제 프로젝트를 생성하여 설명 &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h4&gt;
1. sample 용 Eclipse 안드로이드 project 생성&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;hello : Android application project&lt;/li&gt;
&lt;li&gt;appcompat_v7 : hello 생성하면서 자동으로 import 된 appcomat v7 library project&lt;/li&gt;
&lt;li&gt;libproject :임의로 생성한 library project (hello 가 의존)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGSxiTapj1d14re8wgntovtRl89_ZbqjzXMPUrS8andJ_Y70o07fKnFraSacTLScQKDTfya7nSxLOk3D-o5qW7SQPJ3ELTgT0BP1oeFZ4Pnp0-abk-1TvklfKZ79F6rtzmUkL5ZIn5DQ/s1600/eclipseprojctsample.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGSxiTapj1d14re8wgntovtRl89_ZbqjzXMPUrS8andJ_Y70o07fKnFraSacTLScQKDTfya7nSxLOk3D-o5qW7SQPJ3ELTgT0BP1oeFZ4Pnp0-abk-1TvklfKZ79F6rtzmUkL5ZIn5DQ/s1600/eclipseprojctsample.png&quot; height=&quot;640&quot; width=&quot;532&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
2. Android Studio 실행&lt;/h4&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic6Tr9gnl87TTd8-c_FculYk8VJGfFKw6ki5uW5M_G_dNexPkSeqHo7qgViw_OmXkhnRQOJKnHs7eR6qEs_fJYH1_rndpVkUkOBrFGXunGhXG5yuemz3rMnxVZZHSk1r07c-W0eVy7kw/s1600/androidstudioloading.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic6Tr9gnl87TTd8-c_FculYk8VJGfFKw6ki5uW5M_G_dNexPkSeqHo7qgViw_OmXkhnRQOJKnHs7eR6qEs_fJYH1_rndpVkUkOBrFGXunGhXG5yuemz3rMnxVZZHSk1r07c-W0eVy7kw/s1600/androidstudioloading.png&quot; height=&quot;240&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h4&gt;
&lt;/h4&gt;
&lt;h4&gt;
3. Import Non-Android Studio project 를 선택하여 eclipse 프로젝트를 변환&lt;/h4&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh63sBsKXrplXncniJvgYpQhbIutnLIpqFMzCwGtrG6Ko57t0lWitNkuLEQEuiEd3bWhyeP6z-z3qETA6AjlbvLOwa_K1E3h4LgiU60ggsJhrDBLD-BEWEJhcpt1mjSjc6NSTRKrPg2aA/s1600/nonandroidstudioproject.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh63sBsKXrplXncniJvgYpQhbIutnLIpqFMzCwGtrG6Ko57t0lWitNkuLEQEuiEd3bWhyeP6z-z3qETA6AjlbvLOwa_K1E3h4LgiU60ggsJhrDBLD-BEWEJhcpt1mjSjc6NSTRKrPg2aA/s1600/nonandroidstudioproject.png&quot; height=&quot;484&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Import Non-Android Studio projct 선택&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLy8BL71jlSjXg1QHyLI2a7_POqf0pOS9R1mIRV35s3gQZmzChBmQTCAp-_tnlgMVvuokdwl87CirTfMKUhRFJOgxeNxaXKAHHP3xd3pBj5v6rALJy8_9YQpFdyRErCcUDD0eaEfKCRw/s1600/selecteclipseproject.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLy8BL71jlSjXg1QHyLI2a7_POqf0pOS9R1mIRV35s3gQZmzChBmQTCAp-_tnlgMVvuokdwl87CirTfMKUhRFJOgxeNxaXKAHHP3xd3pBj5v6rALJy8_9YQpFdyRErCcUDD0eaEfKCRw/s1600/selecteclipseproject.png&quot; height=&quot;234&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;eclipse 에서 생성한 hello 프로젝트를 선택&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHBR3gntm5uMD69DEURgrXBLPheY16DGk3mvIoH0m0AGe8iGr155-4kpXFlTIGsQfG2bx3ypBcuiL7o7nji_akX9S1YSw5gSTyOJeraQjXpmxV5C92KrNHAO4_vlYIxaWkZhD5Q8pjyA/s1600/destinationpath.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHBR3gntm5uMD69DEURgrXBLPheY16DGk3mvIoH0m0AGe8iGr155-4kpXFlTIGsQfG2bx3ypBcuiL7o7nji_akX9S1YSw5gSTyOJeraQjXpmxV5C92KrNHAO4_vlYIxaWkZhD5Q8pjyA/s1600/destinationpath.png&quot; height=&quot;238&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;변경될 프로젝트가 저장될 위치 선택&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw2dpCsoGWTJY2XIjF4gXima1wzw38L71hQDGT3t-39TXnhpqigU1TxFESfElQOGykhvOw20X8SxsSzDmR_f0rx1Ge13ok03-kqsBId_bmJwJ0YaJjXCnVFQb5nEuTcRBpNtjd5iOtUg/s1600/importoptions.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw2dpCsoGWTJY2XIjF4gXima1wzw38L71hQDGT3t-39TXnhpqigU1TxFESfElQOGykhvOw20X8SxsSzDmR_f0rx1Ge13ok03-kqsBId_bmJwJ0YaJjXCnVFQb5nEuTcRBpNtjd5iOtUg/s1600/importoptions.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw2dpCsoGWTJY2XIjF4gXima1wzw38L71hQDGT3t-39TXnhpqigU1TxFESfElQOGykhvOw20X8SxsSzDmR_f0rx1Ge13ok03-kqsBId_bmJwJ0YaJjXCnVFQb5nEuTcRBpNtjd5iOtUg/s1600/importoptions.png&quot; height=&quot;238&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;변환 옵션 (기본으로 두고 finish 했음)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw2dpCsoGWTJY2XIjF4gXima1wzw38L71hQDGT3t-39TXnhpqigU1TxFESfElQOGykhvOw20X8SxsSzDmR_f0rx1Ge13ok03-kqsBId_bmJwJ0YaJjXCnVFQb5nEuTcRBpNtjd5iOtUg/s1600/importoptions.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIOaczv8ohPyfoGDG1dwiHkiRB99u2UFnaqjYDNGoASNwa10onYxVVwWUDXkIrweGONeA1qpkJmIlivtck4TsQqt0_0ndosOQy3C887UxVnj1brBmrciDYp6VD4xbOVrcCOAKimIE1Hg/s1600/progress.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIOaczv8ohPyfoGDG1dwiHkiRB99u2UFnaqjYDNGoASNwa10onYxVVwWUDXkIrweGONeA1qpkJmIlivtck4TsQqt0_0ndosOQy3C887UxVnj1brBmrciDYp6VD4xbOVrcCOAKimIE1Hg/s1600/progress.png&quot; height=&quot;71&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;변환&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQNDHrQMxLdH5wAkgQhXpuwxx3PwF0FTq298BtE76OCLfuP73EzfdsMbIX0fQboGRsP3rI-aVsTE67Fmt2JCfdKKcZjmpnuJfC8arVBUOXmO8xo-8JJDinryvtGCiTD1-vVAl_f91MAg/s1600/languagelevelchanged.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQNDHrQMxLdH5wAkgQhXpuwxx3PwF0FTq298BtE76OCLfuP73EzfdsMbIX0fQboGRsP3rI-aVsTE67Fmt2JCfdKKcZjmpnuJfC8arVBUOXmO8xo-8JJDinryvtGCiTD1-vVAl_f91MAg/s1600/languagelevelchanged.png&quot; height=&quot;640&quot; width=&quot;593&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;변환 완료시 Language Level Changed 다이얼로그가 뜨기도 함 (Yes 선택)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
4. 변환 완료&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;import-summary.txt : 변환과정 중 일어난 일들을 표시함&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Ignored Files 항목을 보면 옮겨지지 않은 파일들이 표시됨 (필요시 직접 이동)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;프로젝트 구조&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;hello(hello-hello 로 표시) : eclipse 의 hello project 에 해당하는 모듈&lt;/li&gt;
&lt;li&gt;libproject : eclipse 의 libprojct project 에 해당하는 모듈&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5-vZ5LlKeosQxwzobisCmiD2qg7uIraod2Ms_Qq0Qs4nbSwDU4QC964I4JJsof2nGrkLFFDBbmpnMZMNB1ffP2yPtvgij73AM7Vqm9fr6EER9lz_UW3ONvpZaOrsX_LcWAsML9zUngA/s1600/firstglanceofimport.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5-vZ5LlKeosQxwzobisCmiD2qg7uIraod2Ms_Qq0Qs4nbSwDU4QC964I4JJsof2nGrkLFFDBbmpnMZMNB1ffP2yPtvgij73AM7Vqm9fr6EER9lz_UW3ONvpZaOrsX_LcWAsML9zUngA/s1600/firstglanceofimport.png&quot; height=&quot;640&quot; width=&quot;594&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;appcompat_v7 은 어디에?&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;hello 모듈의 build.gradle 파일을 열어 보면 dependencies 에 compile 명령으로 appcompat 이 포함되어 있음&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;자세한 내용은 개발자 사이트 참고&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.android.com/tools/support-library/features.html#v7&quot;&gt;https://developer.android.com/tools/support-library/features.html#v7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKCtQacMNZk1CzZ2Ba_Z0RDbzKdE4fdxu5_bMQZ4lcpak18bxQLI5lGvugA26bcdQZrsg8yr8Y0sfBFFlQrssRDJlswkom2C5WtCeShkbDRhTlmHMH7b1WRotdgA-R-9u9vzPU4tN7Aw/s1600/dependencies.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKCtQacMNZk1CzZ2Ba_Z0RDbzKdE4fdxu5_bMQZ4lcpak18bxQLI5lGvugA26bcdQZrsg8yr8Y0sfBFFlQrssRDJlswkom2C5WtCeShkbDRhTlmHMH7b1WRotdgA-R-9u9vzPU4tN7Aw/s1600/dependencies.png&quot; height=&quot;368&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
5.Android Studio프로젝트 구조 (맛보기)&lt;/h4&gt;
&lt;br /&gt;
&lt;b&gt;구조&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Eclipse 에는 workspace 라는 개념이 있고 그 아래 여러 프로젝트들이 존재&lt;/li&gt;
&lt;li&gt;Android Studio 에는 프로젝트 아래 여러 모듈들이 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;gradle 파일&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;settings.gradle&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;관련 모듈 목록을 설정&lt;/li&gt;
&lt;li&gt;프로젝트에 하나 존재 &lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;build.gradle 파일&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;build 관련 설정 (의존성등을 설정)&lt;/li&gt;
&lt;li&gt;프로젝트에 하나, 모듈마다 하나씩 갖고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZnQwmzK4Z0DErD5tT2eXIc2duElWqVlNL738UNHCGJ2rbaCsHoISzxi9-MLlyuhbgvtoIHenOrbNBHF1KJBewb_TyV1r3iwRY4n1M9NQUwggAg73cHelDpleJbKAZRA2pgz4MhRn8lQ/s1600/selectprojectview.png&quot; height=&quot;640&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; width=&quot;594&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;왼쪽 상단에 Project 보기를 선택&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsDAkZMrn8U-8kTgvk91DTLVTiaS9m6BJhUnS7wDRyxtWbR3svopa55FE2uuuMkBlVt-1ghI0fHuPd3c19mF1nojaqB37N93TNokhnHp28flZyvKq8wf39PulrLi2EzPD8UzpNLj5XEQ/s1600/projectview.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsDAkZMrn8U-8kTgvk91DTLVTiaS9m6BJhUnS7wDRyxtWbR3svopa55FE2uuuMkBlVt-1ghI0fHuPd3c19mF1nojaqB37N93TNokhnHp28flZyvKq8wf39PulrLi2EzPD8UzpNLj5XEQ/s1600/projectview.png&quot; height=&quot;640&quot; width=&quot;594&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;변환된 폴더 구조를 확인 가능&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;h4&gt;
&lt;/h4&gt;
&lt;h4&gt;
6. 앱 실행 해보기&lt;/h4&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn1NUssPuDjxhL4TcHD8E-LT5_FeGTy7Y9w4E9e2VX3yFP6rcsrCVgowL7nPnv44d74vdl7MsYMg80L4srv2CEwyxlXYeV3Ge_4WelOc0Jqc_ybhBkc455AGCcrrnivxrjjqdZ3oxjLA/s1600/runapp.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn1NUssPuDjxhL4TcHD8E-LT5_FeGTy7Y9w4E9e2VX3yFP6rcsrCVgowL7nPnv44d74vdl7MsYMg80L4srv2CEwyxlXYeV3Ge_4WelOc0Jqc_ybhBkc455AGCcrrnivxrjjqdZ3oxjLA/s1600/runapp.png&quot; height=&quot;170&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;실행 버튼&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj11LZhrgCsyq1C-4VlmaXxBZdlXVty6-kZT-CA0Qh9PIxNJWQY-nLwWE4yJ4MdENlnRhRdzq7_eJYoBTdQy5ytg-UpCPue1eRG3yYlGgxmqfuvF_sE66wdmxMdtez0yQtlhXDsRSeSqg/s1600/selectemulator.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj11LZhrgCsyq1C-4VlmaXxBZdlXVty6-kZT-CA0Qh9PIxNJWQY-nLwWE4yJ4MdENlnRhRdzq7_eJYoBTdQy5ytg-UpCPue1eRG3yYlGgxmqfuvF_sE66wdmxMdtez0yQtlhXDsRSeSqg/s1600/selectemulator.png&quot; height=&quot;368&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;기기가 없다면.. 에뮬레이터 선택&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRaWN7zLypO8sWw2g83FFBnxL446V_aNpTegQWDa0G-VkzTS4B4jxvh3vriweATlTbzMaUdNbPWEgU7MZMn23IzpXP_3XyY0eZlJXobQl7XdXnYCKbyHLNKEHwCNd-W68BnWWUr5NgPQ/s1600/helloinemulator.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRaWN7zLypO8sWw2g83FFBnxL446V_aNpTegQWDa0G-VkzTS4B4jxvh3vriweATlTbzMaUdNbPWEgU7MZMn23IzpXP_3XyY0eZlJXobQl7XdXnYCKbyHLNKEHwCNd-W68BnWWUr5NgPQ/s1600/helloinemulator.png&quot; height=&quot;451&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;앱이 실행됨&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYxq6NKQX6pQURPuXVgFB_IFehSrI31uCknxVhzCAYv9vPCTJ7mY14EQK5aF_HnlxkL8ov7kzs5SUh09jjbDTRCoq4yARTYP2u1mPgEDL2bJrfMjRIU1xITIuTEpDPTS-8ga581OpClg/s1600/logcatview.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYxq6NKQX6pQURPuXVgFB_IFehSrI31uCknxVhzCAYv9vPCTJ7mY14EQK5aF_HnlxkL8ov7kzs5SUh09jjbDTRCoq4yARTYP2u1mPgEDL2bJrfMjRIU1xITIuTEpDPTS-8ga581OpClg/s1600/logcatview.png&quot; height=&quot;640&quot; width=&quot;594&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;하단에 logcat 창 표시됨&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKCtQacMNZk1CzZ2Ba_Z0RDbzKdE4fdxu5_bMQZ4lcpak18bxQLI5lGvugA26bcdQZrsg8yr8Y0sfBFFlQrssRDJlswkom2C5WtCeShkbDRhTlmHMH7b1WRotdgA-R-9u9vzPU4tN7Aw/s1600/dependencies.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;
결론&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
이 외 아직 제대로 사용해 보진 않았지만 메뉴들을 잠깐씩 훑어보니 어렵지는 않겠습니다.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
물론 겪어봐야 알 일이겠지요&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/6518926537119032145/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2015/01/eclipse-android-studio.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/6518926537119032145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/6518926537119032145'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2015/01/eclipse-android-studio.html' title='Eclipse -&gt; Android Studio'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGSxiTapj1d14re8wgntovtRl89_ZbqjzXMPUrS8andJ_Y70o07fKnFraSacTLScQKDTfya7nSxLOk3D-o5qW7SQPJ3ELTgT0BP1oeFZ4Pnp0-abk-1TvklfKZ79F6rtzmUkL5ZIn5DQ/s72-c/eclipseprojctsample.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-1794540009479990832</id><published>2014-09-12T17:18:00.000+09:00</published><updated>2014-09-12T18:18:00.106+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Tool"/><title type='text'>14-day Notification: Violation of the Android branding guidelines</title><content type='html'>&lt;br /&gt;
앱 이름에 Android 라는 단어를 잘못 사용하여서 경고 메일이 날라왔습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #444444;&quot;&gt;&lt;u&gt;&lt;i&gt;메일 내용 전문:&lt;/i&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
We are writing to inform you that the title name of your application,
 Android Tool, with package ID com.tj.androidtool, is not in accordance 
with our &lt;a href=&quot;http://developer.android.com/distribute/tools/promote/brand.html&quot; target=&quot;_blank&quot;&gt;Android branding guidelines&lt;/a&gt; and may additionally be in violation of our &lt;a href=&quot;https://play.google.com/about/developer-content-policy.html#impersonation&quot; target=&quot;_blank&quot;&gt;Google Play impersonation policies&lt;/a&gt;.&lt;br /&gt;
&lt;b&gt;REASON FOR WARNING&lt;/b&gt;: Violation of the &lt;a href=&quot;http://developer.android.com/distribute/tools/promote/brand.html&quot; target=&quot;_blank&quot;&gt;Android branding guidelines&lt;/a&gt;.&lt;br /&gt;
To demonstrate and achieve compliance, please perform one of the following actions within &lt;b&gt;14 days of this notice&lt;/b&gt;, or your app will be suspended on Google Play:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Edit the title of your app by removing &quot;Android&quot; as the prominent 
brand name. Instead, use &quot;(title of app) for Android&quot; as an alternative.
 Here&#39;s an example:
    &lt;ul&gt;
&lt;li&gt;Incorrect: &quot;Android MediaPlayer&quot;&lt;/li&gt;
&lt;li&gt;Correct: &quot;MediaPlayer for Android&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Or, unpublish the listing from further availability on Google Play.&lt;/li&gt;
&lt;/ul&gt;
Before publishing applications, please ensure your apps&#39; compliance with the &lt;a href=&quot;https://play.google.com/about/developer-distribution-agreement.html&quot; target=&quot;_blank&quot;&gt;Developer Distribution Agreement&lt;/a&gt; and &lt;a href=&quot;https://play.google.com/about/developer-content-policy.html&quot; target=&quot;_blank&quot;&gt;Content Policy&lt;/a&gt;.&lt;br /&gt;
Thank for your understanding,&lt;br /&gt;
Google Play Developer Support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이에 앱 이름을 Tools for Android 로 변경하였습니다.&lt;br /&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.tj.androidtool&quot;&gt;https://play.google.com/store/apps/details?id=com.tj.androidtool&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/1794540009479990832/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2014/09/14-day-notification-violation-of.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1794540009479990832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1794540009479990832'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2014/09/14-day-notification-violation-of.html' title='14-day Notification: Violation of the Android branding guidelines'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-8083012427348802440</id><published>2014-05-20T21:53:00.000+09:00</published><updated>2014-05-20T21:53:18.954+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="UPnP Tool"/><category scheme="http://www.blogger.com/atom/ns#" term="앱 소개"/><title type='text'>App 소개 : UPnP Tool</title><content type='html'>UPnP 관련 업무를 시작하면서 UPnP 안드로이드 툴을 제작하게 되었습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.tjjang.upnptool&quot;&gt;https://play.google.com/store/apps/details?id=com.tjjang.upnptool&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiibTnehVRvbKED7lumnO3_zF30JeHp02pytwguiJ5Zus8wmtV-F3MmRH9aqk_I88Bqa12AcgTNC4FQJ3BCYL3U0Dxw5Z43X2kqJYOuWtIirToEoRYGzgvrDkFT1XJMnA8fzvlnK3zBg/s1600/upnp_tool_icon.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiibTnehVRvbKED7lumnO3_zF30JeHp02pytwguiJ5Zus8wmtV-F3MmRH9aqk_I88Bqa12AcgTNC4FQJ3BCYL3U0Dxw5Z43X2kqJYOuWtIirToEoRYGzgvrDkFT1XJMnA8fzvlnK3zBg/s1600/upnp_tool_icon.png&quot; height=&quot;320&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4AwqYJl_xJNzRpsSxR1SWyosC02S8fKLOLANYKZBRv4SETdNIfAe9g3K_xFn848E96uhgIeBNijmYTii2FrdeBGsrpTI5n-YS7FZBU5DvkZw-ynaZxP-OKu7-Jkb4d96UXI9g5d4IiA/s1600/device-2014-05-11-145611.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4AwqYJl_xJNzRpsSxR1SWyosC02S8fKLOLANYKZBRv4SETdNIfAe9g3K_xFn848E96uhgIeBNijmYTii2FrdeBGsrpTI5n-YS7FZBU5DvkZw-ynaZxP-OKu7-Jkb4d96UXI9g5d4IiA/s1600/device-2014-05-11-145611.png&quot; height=&quot;640&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
UPnP 디바이스를 검색하고 디바이스 목록과 서비스들을 나열해 주고 action invoke 기능을 제공합니다.&lt;br /&gt;
&lt;br /&gt;
감사합니다.</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/8083012427348802440/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2014/05/app-upnp-tool.html#comment-form' title='4개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/8083012427348802440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/8083012427348802440'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2014/05/app-upnp-tool.html' title='App 소개 : UPnP Tool'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiibTnehVRvbKED7lumnO3_zF30JeHp02pytwguiJ5Zus8wmtV-F3MmRH9aqk_I88Bqa12AcgTNC4FQJ3BCYL3U0Dxw5Z43X2kqJYOuWtIirToEoRYGzgvrDkFT1XJMnA8fzvlnK3zBg/s72-c/upnp_tool_icon.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-3173032430643172170</id><published>2014-04-13T09:29:00.001+09:00</published><updated>2014-07-12T12:59:14.454+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="문제해결"/><title type='text'>ADT 업데이트 시 문제</title><content type='html'>어느날 ADT 업데이트 하라는 다이얼로그가 떴지만 update check 시 업데이트할 내용이 없다고 나왔다.&lt;br /&gt;
&lt;br /&gt;
참고: &lt;a href=&quot;http://stackoverflow.com/a/15003786&quot;&gt;http://stackoverflow.com/a/15003786&lt;/a&gt;&lt;a href=&quot;http://stackoverflow.com/questions/15003695/adt-needs-to-update-but-find-no-update&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Help -&amp;gt; Install New Software... 에서 Available Software Sites 를 누르고 ADT 업데이트 주소를 https 로 변경하고 해결 되었다.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;HTTPS version: &lt;a href=&quot;https://dl-ssl.google.com/android/eclipse/&quot;&gt;https://dl-ssl.google.com/android/eclipse/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;2014-07-07 업데이트 &lt;/b&gt;&lt;br /&gt;
&lt;strike&gt;그마저 안되는 겨우 ADT 를 새로 다운로드 받음&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;br /&gt;&lt;/strike&gt;
&lt;strike&gt;adt-bundle-windows-x86_64-20140624 버전 사용 &lt;/strike&gt;&lt;br /&gt;
&lt;ul&gt;&lt;strike&gt;
&lt;/strike&gt;
&lt;li&gt;&lt;strike&gt;압축 해제 실패 문제&lt;/strike&gt;&lt;/li&gt;
&lt;strike&gt;
&lt;/strike&gt;&lt;ul&gt;
&lt;li&gt;&lt;strike&gt;참고: &lt;a href=&quot;https://code.google.com/p/android/issues/detail?id=72539&quot;&gt;https://code.google.com/p/android/issues/detail?id=72539&lt;/a&gt;&lt;/strike&gt;&lt;/li&gt;
&lt;li&gt;&lt;strike&gt;경로가 너무 길어서 압축 해제 실패하는 경우 있으니 최대한 경로명은 짧게 진행 &lt;/strike&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;strike&gt;
&lt;/strike&gt;
&lt;li&gt;&lt;strike&gt;adt-bundle-windows-x86_64-20140624 버전을 다운로드 받고 eclipse 를 실행했는데 Window 메뉴에 Android SDK Manager 등이 보이지 않음&lt;/strike&gt;&lt;/li&gt;
&lt;strike&gt;
&lt;/strike&gt;&lt;ul&gt;&lt;strike&gt;
&lt;/strike&gt;
&lt;li&gt;&lt;strike&gt;Window -&amp;gt; Open perspective -&amp;gt; Java 를 선택하고 해결됨&lt;/strike&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
안드로이드 ADT r23 에 총체적으로 문제가 많음&lt;br /&gt;
&lt;strike&gt;&lt;/strike&gt; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://developer.android.com/tools/sdk/eclipse-adt.html&quot;&gt;http://developer.android.com/tools/sdk/eclipse-adt.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;결론적으로 제대로 동작하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
ADT 를 사용하지 않고 eclipse 를 다운로드 받고 ADT 와 Android SDK 를 설치 (고전 방법)&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;eclipse standard indigo 버전 다운로드&lt;/li&gt;
&lt;li&gt;Help -&amp;gt; Install New Software... -&amp;gt; Add... -&amp;gt; &lt;a href=&quot;http://developer.android.com/sdk/installing/installing-adt.html&quot;&gt;http://developer.android.com/sdk/installing/installing-adt.html&lt;/a&gt; 에서 확인한 ADT plugin URL 을 입력&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developer.android.com/sdk/index.html&quot;&gt;http://developer.android.com/sdk/index.html&lt;/a&gt; 로 접속해서 VIEW ALL DOWNLOADS AND SIZES 를 눌러 zip 파일 형태의 sdk 를 다운로드 가능&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;예) &lt;a href=&quot;http://dl.google.com/android/android-sdk_r23-windows.zip&quot;&gt;http://dl.google.com/android/android-sdk_r23-windows.zip&lt;/a&gt; 를 다운로드 받음&lt;/li&gt;
&lt;li&gt;또는 기존에 사용하던 Eclipse ADT 에 eclipse 만 교체 &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/3173032430643172170/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2014/04/adt.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/3173032430643172170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/3173032430643172170'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2014/04/adt.html' title='ADT 업데이트 시 문제'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-8235200322898529159</id><published>2013-10-12T17:25:00.000+09:00</published><updated>2013-10-12T17:25:31.156+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Nexus 7"/><category scheme="http://www.blogger.com/atom/ns#" term="문제해결"/><title type='text'>Nexus 7 + Windows XP + MTP 연결</title><content type='html'>&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;1. 미디어 플레이어 10 이상 버전 설치&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;미디어 플레이어 10 이상 버전 설치 만으로 해결된다는 글도 보였지만 내 경우 해결되지 않았다.&lt;/li&gt;
&lt;li&gt;하지만&amp;nbsp; 다음 작업 수행을 위해 반드시 설치한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;2. C:\WINDOWS\inf\wpdmtp.inf 파일 수정&lt;/b&gt;&lt;br /&gt;
참고: &lt;a href=&quot;http://forum.xda-developers.com/showthread.php?t=2012786&quot;&gt;http://forum.xda-developers.com/showthread.php?t=2012786&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
아래 내용을&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;[Generic.NTx86]&lt;br /&gt;%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
아래와 같이 수정한다.&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;[Generic.NTx86]&lt;br /&gt;%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP&lt;br /&gt;&lt;b&gt;%GenericMTP.DeviceDesc%=MTP, USB\VID_18D1&amp;amp;PID_4E42&amp;amp;MI_00&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
위 처럼 수정을 했지만 아직 인식하지 못했다.&lt;br /&gt;
아무래도 새 Nexus 7 은 장치 아이디가 이전 버전과 다른 듯 했다.&lt;br /&gt;
&lt;br /&gt;
아래와 같이 하드웨어 ID 를 확인하고&amp;nbsp; &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8_4R6PMrPuVHi1WvkyvFy40i8VGD2yqil0LklSEjFDVVJyNGskhKuHGmLlS7TdqqD86fpCGLb0wJOFXUXHBePe-pkcKYzWiY9OOvIjhrJe8Xft3fgb7fBiirzcY0tAZOPTePtkmBNzw/s1600/nexus7_hw_id.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8_4R6PMrPuVHi1WvkyvFy40i8VGD2yqil0LklSEjFDVVJyNGskhKuHGmLlS7TdqqD86fpCGLb0wJOFXUXHBePe-pkcKYzWiY9OOvIjhrJe8Xft3fgb7fBiirzcY0tAZOPTePtkmBNzw/s1600/nexus7_hw_id.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
아래와 같이 수정한 후로 인식할 수 있었다. &lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;%GenericMTP.DeviceDesc%=MTP, &lt;b&gt;USB\VID_18D1&amp;amp;PID_4EE2&amp;amp;MI_00&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/8235200322898529159/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2013/10/nexus-7-windows-xp-mtp.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/8235200322898529159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/8235200322898529159'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2013/10/nexus-7-windows-xp-mtp.html' title='Nexus 7 + Windows XP + MTP 연결'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8_4R6PMrPuVHi1WvkyvFy40i8VGD2yqil0LklSEjFDVVJyNGskhKuHGmLlS7TdqqD86fpCGLb0wJOFXUXHBePe-pkcKYzWiY9OOvIjhrJe8Xft3fgb7fBiirzcY0tAZOPTePtkmBNzw/s72-c/nexus7_hw_id.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-5933579874083818658</id><published>2013-10-11T13:32:00.000+09:00</published><updated>2013-10-11T13:32:19.641+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>앱 완전 종료 (kill process)</title><content type='html'>안드로이드에서는 앱 종료시 process 를 종료하는 방법을 권하지 않는 듯 보이지만 때론 고민을 덜어줄 수도 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;android.os.Process.killProcess(android.os.Process.myPid());&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
조용하고 즉각적으로 앱을 완전히 종료 시킨다.</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/5933579874083818658/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2013/10/kill-process.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/5933579874083818658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/5933579874083818658'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2013/10/kill-process.html' title='앱 완전 종료 (kill process)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-1873543884219299998</id><published>2013-09-04T17:01:00.001+09:00</published><updated>2013-09-04T17:01:59.418+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>EditText show password toggle</title><content type='html'>먼저 layout xml 에 해당 EditText 의 password 속성을 true 로 설정한다.&lt;br /&gt;
&lt;br /&gt;
자바 코드에서 해당 EditText 객체의 &lt;a href=&quot;http://developer.android.com/reference/android/widget/TextView.html#setInputType%28int%29&quot; target=&quot;_blank&quot;&gt;setInputType()&lt;/a&gt; 함수를 이용해서 toggle 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Password 보이기&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Password 숨기기&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
!) input type 을 변경하게 되면 커서 위치가 맨 앞으로 이동한다.&lt;br /&gt;
아래와 같이 마지막 커서 위치를 복원한다. &lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;int pos = password.getSelectionEnd();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;// input type 변경&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;if (pos &amp;gt;= 0) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; password.setSelection(pos);&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;안드로이드 소스 참고:&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.3_r2.1/com/android/settings/wifi/WifiConfigController.java#WifiConfigController.updatePasswordVisibility%28boolean%29&quot;&gt;http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.3_r2.1/com/android/settings/wifi/WifiConfigController.java#WifiConfigController.updatePasswordVisibility%28boolean%29&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/1873543884219299998/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2013/09/edittext-show-password-toggle.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1873543884219299998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1873543884219299998'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2013/09/edittext-show-password-toggle.html' title='EditText show password toggle'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-7182573026044608352</id><published>2013-07-31T11:33:00.000+09:00</published><updated>2013-07-31T11:33:52.533+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="문제해결"/><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>파일 변경 사항을 PC explorer 에서 볼 수 없는 문제</title><content type='html'>몇몇 안드로이드 기기들 (ASUS tablet 등) 에서 코드로 파일을 생성 또는 삭제한 사항이 PC explorer 에 반영되지 않는 문제가 있다.&lt;br /&gt;
&lt;br /&gt;
아래 링크에서 해결 방법을 찾았다.&lt;br /&gt;
&lt;a href=&quot;http://stackoverflow.com/a/9462347&quot;&gt;http://stackoverflow.com/a/9462347&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse(&quot;file://&quot; + Environment.getExternalStorageDirectory())));&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
다른 방법으로는 &lt;a href=&quot;http://developer.android.com/reference/android/media/MediaScannerConnection.html#scanFile%28android.content.Context,%20java.lang.String[],%20java.lang.String[],%20android.media.MediaScannerConnection.OnScanCompletedListener%29&quot; target=&quot;_blank&quot;&gt;MediaScannerConnection.scanFile()&lt;/a&gt; 함수를 이용하는 방법이 있었는데 해당 함수에는 반드시 파일 경로를 넣어 줘야 해서 파일이 삭제된 경우에는 갱신할 방법이 없어 보였다.</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/7182573026044608352/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2013/07/pc-explorer.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/7182573026044608352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/7182573026044608352'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2013/07/pc-explorer.html' title='파일 변경 사항을 PC explorer 에서 볼 수 없는 문제'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-2989994799006721396</id><published>2013-07-16T10:34:00.002+09:00</published><updated>2024-04-29T18:25:17.113+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>layout 조정 완료 event</title><content type='html'>&lt;b&gt;도움&lt;/b&gt;: &lt;a href=&quot;http://stackoverflow.com/questions/8418868/how-to-know-when-an-activity-finishes-a-layout-pass&quot;&gt;http://stackoverflow.com/questions/8418868/how-to-know-when-an-activity-finishes-a-layout-pass&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
layout 조정이 완료된 시점을 알아야 하는 경우가 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
가변적인 부모 view 의 크기를 이용해서 자식 view 의 크기를 결정해야 하는 경우가 있었다.&lt;/blockquote&gt;
&lt;br /&gt;
ViewTreeObserver 에 OnGlobalLayoutListener 를 추가해 줌으로써 해결 할 수 있었다.&lt;br /&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;View view = findViewById(R.id.view);
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
 @Override
 public void onGlobalLayout() {
  
  // layout 이 완료되고 모든 view 들의 크기가 정해진 상태
 }
});
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
한가지 주의할 점은 이벤트가 불렸을 때 어떠한 view 의 layout 을 변경한다면 무한대로 해당 이벤트가 불리기 때문에 layout 을 변경해야 하는 시점에만 layout 을 변경하도록 처리해야 한다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 해당 이벤트 발생시 어떠한 view 의 크기를 변경해야 한다면 이미 크기 변경이 이루어진 경우에는 처리하지 않도록 하는 방법이 있겠다.</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/2989994799006721396/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2013/07/layout-event.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/2989994799006721396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/2989994799006721396'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2013/07/layout-event.html' title='layout 조정 완료 event'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-7793872591041924064</id><published>2013-06-06T01:28:00.001+09:00</published><updated>2013-10-11T13:40:53.306+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>DIP (Density Independent Pixels)</title><content type='html'>PX(Pixel)은 화면에 표시할 수 있는 최소한의 단위이다.&lt;br /&gt;
&lt;br /&gt;
PX 의 크기는 물리적으로 아주 작지만 해상도마다 크기가 다르다.&lt;br /&gt;
&lt;br /&gt;
DPI (Dot per inch) 는 1인치 안에 들어있는데 픽셀의 개수를 나타낸다.&lt;br /&gt;
&lt;br /&gt;
160 dpi 는 1인치에 160 개의 픽셀이 존재한다고 보면 된다.&lt;br /&gt;
&lt;br /&gt;
해상도가 높을 수록 픽셀의 물리적 크기는 더욱 작아진다.&lt;br /&gt;
&amp;nbsp;- 결국 더 세밀하게 표현할 수 있다.&lt;br /&gt;
&lt;br /&gt;
DIP (Density independent pixels) 는 해상도에 상관없이 물리적으로 같은 크기의 출력을 원할 때 사용한다.&lt;br /&gt;
&lt;br /&gt;
안드로이드 앱에 여러 해상도 별로 보여줄 이미지를 제공할 수 있다.&lt;br /&gt;
ldpi (low dpi), mdpi (medium dpi), hdpi (high dpi), xhdpi (xhigh dpi) &amp;nbsp;...&lt;br /&gt;
&amp;nbsp;- 이런 기능을 제공하는 이유는 물론 여러 해상도에서 물리적으로 항상 같은 크기의 영역에 이미지 등을 화면에 출력하기 위해서 이다.&lt;br /&gt;
&lt;br /&gt;
코드상으로 화면에 view 를 출력하거나 직접 그리기 위해서는 PX 단위를 이용해야 한다.&lt;br /&gt;
&lt;br /&gt;
dip 값을 px 으로 변환하기 위해서는 일반 dpi 와 현재 화면의 dpi 의 비율을 나타내는 density 값을 이용해야 한다.&lt;br /&gt;
&lt;br /&gt;
안드로이드의 기본 dpi 는 mdpi (medium dpi, 160 dpi) 이다.&lt;br /&gt;
&amp;nbsp;- mdpi 에서는 100dp = 100px 이다.&lt;br /&gt;
&amp;nbsp;- 즉 mdpi 에서 density 는 1 이다.&lt;br /&gt;
&lt;br /&gt;
ldpi (low dpi, 120dpi) 에서는 100dp = 75px 이다.&lt;br /&gt;
&amp;nbsp;- density 는 120 / 160 = 0.75 이다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Density 얻기&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Context 의 getResources().getDisplayMetrics().density 값&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Dip 단위를 px 로 변환&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100f, getResources().getDisplayMetrics());&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
사실 mdpi 라고 해서 무조건 160dpi 인거는 아니다.&lt;br /&gt;
그리고 x 축과 y 축의 dpi 가 다를 수 있다.&lt;br /&gt;
&lt;br /&gt;
더 정확하게 계산하기 위해서 x 축 dpi 와 y 축 dpi 를 이용해야 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;float xdensity = getResrouces().getDisplayMetrics().xdpi / 160f;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;float ydensity = getResrouces().getDisplayMetrics().ydpi / 160f;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/7793872591041924064/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2013/06/dip-density-independent-pixels.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/7793872591041924064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/7793872591041924064'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2013/06/dip-density-independent-pixels.html' title='DIP (Density Independent Pixels)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-717627317697195020</id><published>2013-05-30T13:35:00.000+09:00</published><updated>2013-05-30T13:35:11.040+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="문제해결"/><title type='text'>ADT 22 버전 문제</title><content type='html'>도움 : &lt;a href=&quot;http://lsit81.tistory.com/entry/Android-ADT-22-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C%ED%9B%84-ClassNotFound-Exception-%EB%AC%B8%EC%A0%9C&quot;&gt;http://lsit81.tistory.com/entry/Android-ADT-22-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C%ED%9B%84-ClassNotFound-Exception-%EB%AC%B8%EC%A0%9C&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADT 22 버전 업데이트 후 빌드가 되지 않아 gen 폴더에 R.java 도 생성 되지 않는 문제가 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Android Build-tools 문제&lt;/b&gt;&lt;br /&gt;
22 버전에서의 문제는 SDK Manager 에 Android Build-tools 항목이 숨겨져 있어서 사람들이 다운로드 받지 못해 문제가 발생했다.&lt;br /&gt;
&amp;nbsp;- 이 문제는 22.0.1 이 바로 나옴으로써 SDK Manager 에 기본으로 Android Build-tools 항목이 선택되어 있게 수정되었다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;기존 프로젝트가 빌드 되지 않는 문제&lt;/b&gt;&lt;br /&gt;
1. Android Build-tools 설치가 끝나면 eclipse 를 재시작 한다.&lt;br /&gt;
&lt;br /&gt;
2. 해당 프로젝트 및 library 프로젝트의 Properties -&amp;gt; Java Build Path -&amp;gt; Order and Export 에 Android Private Libraries 항목이 체크 되어 있지 않다면 체크하고 clean project 해 본다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/717627317697195020/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2013/05/adt-22.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/717627317697195020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/717627317697195020'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2013/05/adt-22.html' title='ADT 22 버전 문제'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-5884406655942310244</id><published>2013-05-02T17:27:00.004+09:00</published><updated>2013-05-02T17:27:47.615+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>Google play 개발자 콘솔 접속 오류 발생하는 경우</title><content type='html'>Google play 개발자 콘솔 접속 시 무한 redirection 시도로 인한 오류가 발생하는 경우&lt;br /&gt;
&lt;br /&gt;
웹 브라우저의 쿠키를 삭제하고 다시 접속해 보시기 바랍니다.&lt;br /&gt;
&lt;br /&gt;
구글 검색해도 나오지 않아 적습니다.</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/5884406655942310244/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2013/05/google-play.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/5884406655942310244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/5884406655942310244'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2013/05/google-play.html' title='Google play 개발자 콘솔 접속 오류 발생하는 경우'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1945506117809528017.post-1917407113817983623</id><published>2013-05-02T00:13:00.002+09:00</published><updated>2024-04-29T18:24:46.689+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="팁"/><title type='text'>EditText in ListView</title><content type='html'>EditText 를 ListView 에서 사용하는 데에 많은 고난과 시련이 따랐다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Focus 문제&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
EditText 를 선택하면 focus 가 제대로 가지 않는 문제가 있었다.&lt;br /&gt;
AndroidManifest.xml 수정:&amp;nbsp;해당 activity 에 아래 속성을 추가&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;android:windowSoftInputMode=&quot;adjustPan&quot;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
&lt;b&gt;EditText 에 입력하는 내용을 ListView 에 적용&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;시도 1) EditText &amp;nbsp;에 onFocusChangedListener 를 입력하고 focus 를 잃을 때 ListView adapter 를 업데이트 하게 했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;키보드 눌릴 때 마다 focus 를 잠깐 잃었다가 다시 들어와서 실패&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;시도 2) EditText 에 onEditorActionListener 를 입력하고 사용자 입력이 끝나면 ListView adpater 를 업데이트하게 했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;이벤트가 제대로 오지 않았다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;결론&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;EditText 변경이 끝나는 시점을 찾아서 ListView adpater 를 업데이트 하는 거는 실패했다.&lt;/li&gt;
&lt;li&gt;단지 해당 아이템에 값만 변경해 주면 되었다. (아래와 같은 이유)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;EditText 가 보이는 동안에는 입력한 내용이 보일 것이다.&lt;/li&gt;
&lt;li&gt;EditText 가 보이지 않았다가 보이게 되는 경우 adapter 의 getView() 함수가 불리면서 알아서 갱신된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;*) EditText 에 addTextChangedListener() 함수를 이용해서 text 변경시 마다 listview item 에 반영했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
예&lt;br /&gt;
&lt;b&gt;&lt;i&gt;activity_main.xml:&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot; android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot; android:paddingLeft=&quot;@dimen/activity_horizontal_margin&quot;
    android:paddingRight=&quot;@dimen/activity_horizontal_margin&quot;
    android:paddingTop=&quot;@dimen/activity_vertical_margin&quot;
    android:paddingBottom=&quot;@dimen/activity_vertical_margin&quot; tools:context=&quot;.MainActivity&quot;&amp;gt;

    &amp;lt;TextView android:text=&quot;@string/hello_world&quot; android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:id=&quot;@+id/textView&quot; /&amp;gt;

    &amp;lt;ListView
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;
        android:id=&quot;@+id/listView&quot;
        android:layout_below=&quot;@+id/textView&quot;
        android:layout_alignParentLeft=&quot;true&quot;
        android:layout_alignParentStart=&quot;true&quot; /&amp;gt;

&amp;lt;/RelativeLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;i&gt;&lt;b&gt;layout_list_item.xml:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;horizontal&quot; android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:gravity=&quot;center_vertical&quot;
    &amp;gt;

    &amp;lt;TextView
        android:id=&quot;@+id/text&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;Sample&quot;
        android:layout_weight=&quot;0.3&quot; /&amp;gt;

    &amp;lt;EditText
        android:id=&quot;@+id/edit&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_weight=&quot;0.7&quot;/&amp;gt;

&amp;lt;/LinearLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;i&gt;&lt;b&gt;MainActivity.java:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import android.content.Context;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends ActionBarActivity {

    private ListView listView;
    private List&amp;lt;Item&amp;gt; list = new ArrayList&amp;lt;Item&amp;gt;();

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

        for (int i = 0; i &amp;lt; 30; i++) {
            list.add(new Item(&quot;Item&quot; + (i+1), &quot;&quot; + i));
        }

        listView = (ListView)findViewById(R.id.listView);
        listView.setAdapter(new MyAdapter(this, list));

    }

    private class Item {
        public String text;
        public String edit;
        public Item(String text, String edit) {
            this.text = text;
            this.edit = edit;
        }
    }

    private class MyWatcher implements TextWatcher {

        private EditText edit;
        private Item item;
        public MyWatcher(EditText edit) {
            this.edit = edit;
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            Log.d(&quot;TAG&quot;, &quot;onTextChanged: &quot; + s);
            this.item = (Item)edit.getTag();
            if (item != null) {
                item.edit = s.toString();
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    }

    private class MyAdapter extends ArrayAdapter&amp;lt;Item&amp;gt; {

        private final static int resId = R.layout.layout_list_item;
        private Context context;
        List&amp;lt;Item&amp;gt; list;

        public MyAdapter(Context context, List&amp;lt;Item&amp;gt; list) {
            super(context, resId, list);
            this.context = context;
            this.list = list;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View v = convertView;

            Item item = getItem(position);

            if (v == null) {

                v = getLayoutInflater().inflate(resId, null);
                EditText et = (EditText)v.findViewById(R.id.edit);
                et.addTextChangedListener(new MyWatcher(et));
            }

            TextView tv = (TextView)v.findViewById(R.id.text);
            EditText et = (EditText)v.findViewById(R.id.edit);
            et.setTag(item);

            tv.setText(item.text);
            et.setText(item.edit);

            return v;
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;EditText 외의 영역을 건드리면 EditText 의 focus 없애기&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;참고:&amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/a/11656129&quot;&gt;http://stackoverflow.com/a/11656129&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
EditText 이외의 모든 view 에 OnTouchListener 를 등록하고 touch 하면 키보드를 숨기고 해당 view 로 focus 를 이동하게 한다.&lt;br /&gt;
&lt;br /&gt;
{키보드 숨기기}&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
{Root view 얻기}&lt;/div&gt;
&lt;div&gt;
참고:&amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/a/5488609&quot;&gt;http://stackoverflow.com/a/5488609&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
아무 view 나 getRootView() 함수를 이용해서 얻는다.&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;view.getRootView()&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
예)&lt;/div&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public void hideSoftKeyboard() {
 InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}

public void inspireViewsHideKeyboardOnTouch(View v, boolean recursive) {
 if (!(v instanceof EditText)) {
  v.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    hideSoftKeyboard();
    v.requestFocus();
    return false;
   }
  });
 }
 
 if (recursive &amp;amp;&amp;amp; v instanceof ViewGroup) {
  ViewGroup g = (ViewGroup)v;
  for (int i = 0; i &amp;lt; g.getChildCount(); i++) {
   inspireViewsHideKeyboardOnTouch(g.getChildAt(i), recursive);
  }
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tjandroid.blogspot.com/feeds/1917407113817983623/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tjandroid.blogspot.com/2013/05/edittext-in-listview.html#comment-form' title='5개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1917407113817983623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1945506117809528017/posts/default/1917407113817983623'/><link rel='alternate' type='text/html' href='http://tjandroid.blogspot.com/2013/05/edittext-in-listview.html' title='EditText in ListView'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry></feed>