<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Android on James's Devlog</title><link>https://coolishbee.github.io/devlog/posts/android/</link><description>Recent content in Android on James's Devlog</description><generator>Hugo -- gohugo.io</generator><language>ko-KR</language><lastBuildDate>Mon, 16 Jan 2023 01:56:38 +0900</lastBuildDate><atom:link href="https://coolishbee.github.io/devlog/posts/android/index.xml" rel="self" type="application/rss+xml"/><item><title>acra 사용법</title><link>https://coolishbee.github.io/devlog/posts/android/acra-usage/</link><pubDate>Mon, 16 Jan 2023 01:56:38 +0900</pubDate><guid>https://coolishbee.github.io/devlog/posts/android/acra-usage/</guid><description>&lt;p&gt;런타임 방식으로써 크래시발생시 acra http API 를 사용하는 방법 가이드.&lt;/p&gt;
&lt;h2 id="테스트-환경"&gt;테스트 환경&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;com.android.tools.build:gradle:4.0.1&lt;/li&gt;
&lt;li&gt;ACRA Version 5.7.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="제공되는-기능"&gt;제공되는 기능&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Http: 크래시리포트를 rest api 로 송신.&lt;/li&gt;
&lt;li&gt;Email: 이메일주소로 크래시리포트 발송.&lt;/li&gt;
&lt;li&gt;Dialog: 크래시 발생시 다이얼로그 이벤트.&lt;/li&gt;
&lt;li&gt;Notification: 크래시 발생시 푸쉬알람.&lt;/li&gt;
&lt;li&gt;Toast: 크래시 발생시 토스트 메시지.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="설정"&gt;설정&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;컴파일 방식: annotation 을 이용하여 미리 설정정보를 셋팅하는 방식이다.(AndroidManifest.xml 필수)&lt;/li&gt;
&lt;li&gt;런타임 방식: 모든 설정정보는 API 소스코드로 작성하는 방식이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="example"&gt;Example&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;MainActivity&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;extends&lt;/span&gt; AppCompatActivity {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Override&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onCreate&lt;/span&gt;(Bundle savedInstanceState) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;super&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;onCreate&lt;/span&gt;(savedInstanceState);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; setContentView(R.&lt;span style="color:#a6e22e"&gt;layout&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;activity_main&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Log.&lt;span style="color:#a6e22e"&gt;d&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;MainActivity&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;onCreate&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CoreConfigurationBuilder builder &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; CoreConfigurationBuilder(&lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; builder.&lt;span style="color:#a6e22e"&gt;setBuildConfigClass&lt;/span&gt;(BuildConfig.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;).&lt;span style="color:#a6e22e"&gt;setReportFormat&lt;/span&gt;(StringFormat.&lt;span style="color:#a6e22e"&gt;JSON&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; builder.&lt;span style="color:#a6e22e"&gt;getPluginConfigurationBuilder&lt;/span&gt;(HttpSenderConfigurationBuilder.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;setUri&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;http://192.168.12.10:55000/send&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;setHttpMethod&lt;/span&gt;(HttpSender.&lt;span style="color:#a6e22e"&gt;Method&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;POST&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;setBasicAuthLogin&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;james&amp;#34;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;//backend htpasswd 설정필요&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;setBasicAuthPassword&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;1234&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;setEnabled&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ACRA.&lt;span style="color:#a6e22e"&gt;DEV_LOGGING&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ACRA.&lt;span style="color:#a6e22e"&gt;init&lt;/span&gt;(getApplication(), builder);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;throw&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; NullPointerException();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="문서"&gt;문서&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ACRA/acra" target="_blank" rel="noopener"&gt;ACRA/acra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ACRA/acra/wiki" target="_blank" rel="noopener"&gt;API Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ACRA/acra/wiki/Examples" target="_blank" rel="noopener"&gt;Examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="acra-go-사용법"&gt;acra-go 사용법&lt;/h1&gt;
&lt;p&gt;안드로이드 ACRA 을 위한 백엔드 서버.&lt;/p&gt;</description></item><item><title>Android SDK Jcenter 배포 기록</title><link>https://coolishbee.github.io/devlog/posts/android/jcenter/</link><pubDate>Mon, 16 Jan 2023 01:56:38 +0900</pubDate><guid>https://coolishbee.github.io/devlog/posts/android/jcenter/</guid><description>제이센터를 사용하던 당시 안드로이드 라이브러리 배포와 저장소 연동 과정을 기록합니다.</description></item><item><title>Android SDK Maven 배포 기록</title><link>https://coolishbee.github.io/devlog/posts/android/maven-deploy/</link><pubDate>Mon, 16 Jan 2023 01:56:38 +0900</pubDate><guid>https://coolishbee.github.io/devlog/posts/android/maven-deploy/</guid><description>제이센터에서 메이븐으로 이전하며 진행한 계정 준비, 서명과 배포 스크립트 구성을 정리합니다.</description></item><item><title>라이브러리 생성</title><link>https://coolishbee.github.io/devlog/posts/android/create-library/</link><pubDate>Mon, 16 Jan 2023 01:56:38 +0900</pubDate><guid>https://coolishbee.github.io/devlog/posts/android/create-library/</guid><description>&lt;h2 id="앱을-포함한-라이브러리-프로젝트-생성"&gt;앱을 포함한 라이브러리 프로젝트 생성&lt;/h2&gt;
&lt;p&gt;프로젝트내에서 새 라이브러리 모듈 생성방식.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;File &amp;gt; New &amp;gt; New Project&lt;/strong&gt;을 클릭합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Empty Activity Next &amp;gt; 설정하고 Finish&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File &amp;gt; New &amp;gt; New Module&lt;/strong&gt;을 클릭합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create New Module&lt;/strong&gt; 창이 표시되면 &lt;strong&gt;Android Library&lt;/strong&gt;, &lt;strong&gt;Next&lt;/strong&gt;를 차례로 클릭합니다.(AAR 라이브러리 기준)&lt;/li&gt;
&lt;li&gt;라이브러리에 이름을 지정하고 라이브러리의 코드를 위한 최소 SDK 버전을 선택한 후 &lt;strong&gt;Finish&lt;/strong&gt;를 클릭합니다.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>앱 모듈을 라이브러리 모듈로 변환</title><link>https://coolishbee.github.io/devlog/posts/android/only-library/</link><pubDate>Mon, 16 Jan 2023 01:56:38 +0900</pubDate><guid>https://coolishbee.github.io/devlog/posts/android/only-library/</guid><description>&lt;p&gt;앱없이 라이브러리 모듈만 포함한 프로젝트 생성방식.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;File &amp;gt; New &amp;gt; New Project&lt;/strong&gt;을 클릭합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No Activity Next &amp;gt; 설정하고 Finish&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(Module: app) 의 &lt;code&gt;build.gradle&lt;/code&gt; 파일을 엽니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;applicationId&lt;/code&gt;를 지정하는 줄을 삭제합니다. Android 앱 모듈에서만 지정할 수 있습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-groovy" data-lang="groovy"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apply plugin: &lt;span style="color:#e6db74"&gt;&amp;#39;com.android.application&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;다음과 같이 변경합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-groovy" data-lang="groovy"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apply plugin: &lt;span style="color:#e6db74"&gt;&amp;#39;com.android.library&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;파일을 저장하고 &lt;strong&gt;File &amp;gt; Sync Project with Gradle Files&lt;/strong&gt;를 클릭합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;app폴더안에 libs, src, build.gradle 파일들을 상위폴더로 이동합니다. 그리고 app폴더는 삭제합니다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://coolishbee.github.io/devlog/posts/android/only-library/images/103523136-c7563300-4ebe-11eb-9ec6-283d02558427.png" alt="app folder"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://coolishbee.github.io/devlog/posts/android/only-library/images/103523294-fcfb1c00-4ebe-11eb-9ede-894bfd55cb9f.png" alt="folder delete"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;settings.gradle 안에 내용을 지워줍니다. 파일을 삭제해도 상관없음&lt;/p&gt;</description></item></channel></rss>