<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Android &#8211; フリーランスさばいばる</title>
	<atom:link href="https://dev-memo.net/category/programming/android/feed/" rel="self" type="application/rss+xml" />
	<link>https://dev-memo.net</link>
	<description>生涯フリーランスで生き延びるためのブログ</description>
	<lastBuildDate>Fri, 04 Nov 2022 08:03:39 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2</generator>

<image>
	<url>https://dev-memo.net/wp-content/uploads/2022/06/cropped-favicon-32x32.png</url>
	<title>Android &#8211; フリーランスさばいばる</title>
	<link>https://dev-memo.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>MOVERIO(bt-300)にスマホアプリを移植（GoogleMapsは使用不可）</title>
		<link>https://dev-memo.net/moverio-googlemaps/</link>
					<comments>https://dev-memo.net/moverio-googlemaps/#respond</comments>
		
		<dc:creator><![CDATA[キミヒラ]]></dc:creator>
		<pubDate>Wed, 23 Aug 2017 06:07:37 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<guid isPermaLink="false">http://dev-memo.net/?p=443</guid>

					<description><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2017/08/google-glass-98440_1280-1024x512.png" class="webfeedsFeaturedVisual" /></p>MOVERIO bt-300にAndroidスマホ向けに開発したアプリを移植する際に発生したエラーと解決方法のメモです。 開発環境はEclipse(Kepler)です。 ビルドターゲットをMOVERIOに合わせる まず何 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2017/08/google-glass-98440_1280-1024x512.png" class="webfeedsFeaturedVisual" /></p>
<p><strong>MOVERIO bt-300</strong>にAndroidスマホ向けに開発したアプリを移植する際に発生したエラーと解決方法のメモです。</p>



<p>開発環境は<strong>Eclipse(Kepler)</strong>です。</p>



<h2 class="wp-block-heading">ビルドターゲットをMOVERIOに合わせる</h2>



<p>まず何もせずそのままインストールして見ると下記のエラーが発生。</p>



<p class="is-style-dent_box">Android 起動!<br>adb is running normally.<br>Performing <strong><em>.</em></strong>activity launch<br>警告: Unknown device API version!<br>Uploading ***.apk onto device &#8216;EMBT3C&#8217;<br>Failed to install ***.apk on device &#8216;EMBT3C&#8217;: タイムアウト<br>起動はキャンセルされました!</p>



<p><span class="ymarker">これは、ビルドターゲットを合わせれば解決出来ました。</span></p>



<p>まず<strong>MOVERIO</strong>のバージョンを<strong>デバイス情報</strong>で確認しましょう。<br>当環境は5.1.1でした。</p>



<figure class="wp-block-image is-style-shadow"><img decoding="async" width="1280" height="720" src="http://dev-memo.net/wp-content/uploads/2017/08/Screenshot_2017-08-18-17-52-30-1.png" alt="" class="wp-image-448" srcset="https://dev-memo.net/wp-content/uploads/2017/08/Screenshot_2017-08-18-17-52-30-1.png 1280w, https://dev-memo.net/wp-content/uploads/2017/08/Screenshot_2017-08-18-17-52-30-1-300x169.png 300w, https://dev-memo.net/wp-content/uploads/2017/08/Screenshot_2017-08-18-17-52-30-1-768x432.png 768w, https://dev-memo.net/wp-content/uploads/2017/08/Screenshot_2017-08-18-17-52-30-1-1024x576.png 1024w" sizes="(max-width: 1280px) 100vw, 1280px" /></figure>



<p><span class="photoline"></span></p>



<p>EclipseのビルドターゲットをMOVERIOの環境にあわせて変更すればOKです。</p>



<figure class="wp-block-image is-style-shadow"><img decoding="async" width="805" height="352" src="http://dev-memo.net/wp-content/uploads/2017/08/2017-08-23_14h24_47.png" alt="" class="wp-image-460" srcset="https://dev-memo.net/wp-content/uploads/2017/08/2017-08-23_14h24_47.png 805w, https://dev-memo.net/wp-content/uploads/2017/08/2017-08-23_14h24_47-300x131.png 300w, https://dev-memo.net/wp-content/uploads/2017/08/2017-08-23_14h24_47-768x336.png 768w" sizes="(max-width: 805px) 100vw, 805px" /></figure>



<p><span class="photoline"></span></p>



<h2 class="wp-block-heading">MOVERIO(bt-300)はGooglePlay開発者サービス(GooglePlayService)を利用できない</h2>



<p>その次に出たエラーがこちら。</p>



<p class="is-style-dent_box">Android 起動!<br>adb is running normally.<br>Performing <strong><em>.</em></strong> activity launch<br>Uploading ***.apk onto device &#8216;EMBT3C&#8217;<br>Installing ***.apk…<br>Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY<br>Please check logcat output for more details.<br>起動はキャンセルされました!</p>



<p>調べてみるとインストールする端末やエミュレーターに<span class="rmarker"><strong>「GooglePlay開発者サービス(GooglePlayService)」</strong>がないと出るエラーのようです。</span></p>



<p>今回の移植しようとしているアプリは<strong>「GoogleMapsAndroidAPI」</strong>を使っているので、GooglePlay開発者サービスが入っていない<strong>MOVERIO</strong>にはインストール出来ないようです。</p>



<p><span class="ymarker">では、<strong>MOVERIO</strong>に<strong>GooglePlay開発者サービス</strong>をインストールすれば解決すると思いきや…</span></p>



<blockquote class="wp-block-quote"><p>U-09 Google Play 開発者サービスを使用することはできますか？<br>MOVERIOはGoogle認証を取得していないため、利用できません。</p><cite>公式引用：<a rel="noreferrer noopener" href="https://tech.moverio.epson.com/ja/bt-300/faq.html#u1-09" target="_blank">https://tech.moverio.epson.com/ja/bt-300/faq.html#u1-09</a></cite></blockquote>



<p>MOVERIO(bt-300)にGoogle Play 開発者サービスはインストールできないようです。</p>



<p><span class="rmarker">GoogleMapsを組み込んだアプリは使えな</span>いんですね…</p>



<h2 class="wp-block-heading">MOVERIO用にGooglePlay開発者サービスを使わないプロジェクトに修正する方法</h2>



<p>今回はGoogleMapsの機能を除外してでも移植する必要があったので、その際の作業をメモ します。</p>



<h3 class="wp-block-heading">google-play-services_libを参照ライブラリーから除外する</h3>



<p>参照ライブラリーは<em><strong>「プロジェクト右クリック＞プロパティ＞Android＞ライブラリー」</strong></em>で確認出来ます。<br><strong>google-play-services_lib</strong>の参照を外しましょう。</p>



<h3 class="wp-block-heading">AndroidManifest.xmlの修正</h3>



<p><strong>GoogleMaps</strong>を使っている場合、下記の記述を<strong>AndroidManifest.xml</strong>から削除します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>        &lt;meta-data
            android:name=&quot;com.google.android.gms.version&quot;
            android:value=&quot;@integer/google_play_services_version&quot; /&gt;
        &lt;meta-data
            android:name=&quot;com.google.android.maps.v2.API_KEY&quot;
            android:value=&quot;*********************&quot;/&gt;
        &lt;uses-library android:name=&quot;com.google.android.maps&quot; /&gt;</code></pre></div>



<h3 class="wp-block-heading">ビルドターゲットの変更</h3>



<p><strong>GoogleMaps</strong>を使っていると、ビルドターゲットを<strong>「Google APIs」</strong>にしていると思います。<br><strong>「Android {バージョン}」</strong>のものに変更しましょう。<br><strong>「プロジェクト右クリック＞プロパティ＞Android」</strong>で変更します。</p>



<p>これで、無事に<strong>MOVERIO</strong>にインストール出来ました。</p>



<h2 class="wp-block-heading">「off line」になってMOVERIOにアプリがインストールできない時は</h2>



<p>僕の環境だけなのかもしれませんが、何度かadbの接続が<strong>「off line」</strong>になって、インストール出来なくなります。</p>



<p><span class="ymarker">この場合、PCを再起動するとインストール出来るようになりました。</span></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>MOVERIOにAndroidスマホアプリを移植する方法でした。</p>



<p>この記事が少しでも参考になれば幸いです。</p>



<p>最後までお読みいただきありがとうございました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dev-memo.net/moverio-googlemaps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AndroidのローカルファイルをPCから確認する方法</title>
		<link>https://dev-memo.net/android_read_local_file/</link>
					<comments>https://dev-memo.net/android_read_local_file/#respond</comments>
		
		<dc:creator><![CDATA[キミヒラ]]></dc:creator>
		<pubDate>Sat, 02 Jul 2016 16:57:41 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<guid isPermaLink="false">http://dev-memo.net/?p=19</guid>

					<description><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2016/07/android-3384009_1280-1024x1024.png" class="webfeedsFeaturedVisual" /></p>androidのアプリには、アプリ毎のデータの保存領域があります。 この領域に保存したファイルをローカルファイルと言います。 ローカルファイルは、下記のようなディレクトリに保存されます。 /data/data/&#60;パ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2016/07/android-3384009_1280-1024x1024.png" class="webfeedsFeaturedVisual" /></p>
<p>androidのアプリには、アプリ毎のデータの保存領域があります。</p>



<p>この領域に保存したファイルを<strong>ローカルファイル</strong>と言います。</p>



<p>ローカルファイルは、下記のようなディレクトリに保存されます。</p>



<p class="is-style-dent_box">/data/data/<strong><em>&lt;パッケージ名></em></strong>/files/</p>



<p><span class="rmarker">ですが、権限がない為、普通には</span>このディレクトリの中を確認できません。</p>



<p>この記事は、ローカルファイルをPCから確認する方法を解説します。</p>



<h2 class="wp-block-heading">run-asコマンドでローカルファイルの中身を確認</h2>



<p><strong>run-as</strong>を実行することで、ローカルファイルを確認する事ができます。</p>



<p>まず、<strong>adb.exe</strong>があるディレクトリへ移動します。<br><strong>adb.exe</strong>はSDKをインストールしたディレクトリの直下の「<strong>platform-tools</strong>」の配下にあります。</p>



<p>移動したら、コマンドプロンプトで下記のコマンドを実行するとファイルの中身を確認できます。</p>



<p class="is-style-dent_box">adb shell<br>run-as パッケージ名<br>cd file<br>cat ファイル名</p>



<p>以上になります。</p>



<p>この記事が少しでも参考になれば幸いです。</p>



<p>最後までお読みいただきありがとうございました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dev-memo.net/android_read_local_file/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AndroidアプリのLogCatを端末に保存するサンプルコード</title>
		<link>https://dev-memo.net/save_locat/</link>
					<comments>https://dev-memo.net/save_locat/#comments</comments>
		
		<dc:creator><![CDATA[キミヒラ]]></dc:creator>
		<pubDate>Tue, 28 Jun 2016 17:53:48 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<guid isPermaLink="false">http://dev-memo.net/?p=4</guid>

					<description><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2016/06/hashrateIMGL6542_TP_V-1024x682.jpg" class="webfeedsFeaturedVisual" /></p>AndroidアプリのLogcatを端末に保存する方法を解説します。 保存したログファイルは、アプリ自身で表示したり、PCからUSB接続経由で確認したりできますので、不具合調査などに役立つかと思います。 コピペ利用できる [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2016/06/hashrateIMGL6542_TP_V-1024x682.jpg" class="webfeedsFeaturedVisual" /></p>
<p><span class="swl-marker mark_yellow">AndroidアプリのLogcatを端末に保存する方法を解説します。</span></p>



<p><span class="ymarker">保存したログファイルは、アプリ自身で表示したり、PCからUSB接続経由で確認したりできますので、不具合調査などに役立つかと思います。</span></p>



<p><span class="swl-marker mark_yellow"><span class="ymarker">コピペ利用できるサプルソースを掲載し</span>ているので、良ければご利用ください。</span></p>



<h2 class="wp-block-heading">AndroidManifest.xmlを修正する</h2>



<p>まずは、<strong>Logcat</strong>をを読み込む権限を追加します。<br>デフォルトの権限だと読み込めないんです。</p>



<p>下記の一行を<strong>AndroidManifest.xml</strong>に追記します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-xml" data-lang="XML"><code>&lt;uses-permission android:name=&quot;android.permission.READ_LOGS&quot;/&gt;</code></pre></div>



<h2 class="wp-block-heading">logcatの内容を保存するスレッドクラスのサンプル</h2>



<p>Logcatの内容をリアルタイムで監視してテキストファイルへ出力するスレッドクラスを実装します。<br>下記のソースコードをコピペして利用できます。</p>



<p>スレッドクラス</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-lang="Java"><code>public class WriteLogThread extends Thread {

    private Context context;

    public WriteLogThread(Context context) {
        this.context = context;
    }

    @Override
    public void run() {
        java.lang.Process proc = null;
        BufferedReader reader = null;
        PrintWriter writer = null;

        final String pId =  Integer.toString(Process.myPid());

        try {
            proc = Runtime.getRuntime().exec(new String[] { &quot;logcat&quot;, &quot;-v&quot;, &quot;time&quot;});
            reader = new BufferedReader(new InputStreamReader(proc.getInputStream()), 1024);
            String line;
            while ( true ) {
               line = reader.readLine();
               if (line.length() == 0) {
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                    }
                    continue;
               }

               if (line.indexOf(pId) != -1) {

                   try {
                       OutputStream out;
                       out = context.openFileOutput(&quot;log.text&quot;, Context.MODE_PRIVATE|Context.MODE_APPEND);
                       writer = new PrintWriter(new OutputStreamWriter(out,&quot;UTF-8&quot;));
                       writer.println(line);
                   } catch (Exception e) {
                       e.printStackTrace();
                   } finally {
                       if (writer != null) {
                           writer.close();
                       }
                   }

               }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}</code></pre></div>



<p>あとは、このスレッドをメインの処理からキックして下さい。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-lang="Java"><code>Thread wreiteLogThread = new WriteLogThread(getApplicationContext());
wreiteLogThread.start();</code></pre></div>



<p><span style="color: #000000;">これで実装完了です。</span></p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2" data-colset="col1"><div class="cap_box_ttl"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" width="1em" height="1em"><path fill="currentColor" d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z"></path></svg><span>処理の内容を簡単に解説</span></div><div class="cap_box_content">
<p>Runtime.getRuntime().exec() を利用して<strong>logcat</strong>の内容を<strong>BufferedReader</strong>へ読み込む事ができます。<br>あとは、通常のファイル入出力と一緒ですね。<br><strong>logcat</strong>のログが出るのを常に監視する必要があるので、別スレッドを立てて無限ループで処理させています。</p>
</div></div>



<h2 class="wp-block-heading">ローカルファイルの中身の確認方法</h2>



<p>出力したログファイルは、アプリ内で表示する事も可能です。</p>



<p>実装方法は下記の記事が参考になります。</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://blog.oukasoft.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/%E3%80%90android%E3%80%91%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BF%9D%E5%AD%98%E3%80%81%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%83%BB%E8%AA%AD/
</div></figure>



<p>外部の記事ですが、<a href="http://blog.oukasoft.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/%E3%80%90android%E3%80%91%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BF%9D%E5%AD%98%E3%80%81%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%83%BB%E8%AA%AD/">【Android】ローカルにファイルを保存、書き出し・読込み・削除をする方法</a>を参考に実装出来ると思います。</p>



<p>PCとUSB接続してログファイルを確認する方法は下記の記事をご覧ください。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://dev-memo.net/wp-content/uploads/2016/07/android-3384009_1280-300x300.png" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://dev-memo.net/android_read_local_file/">AndroidのローカルファイルをPCから確認する方法</a>
						<span class="p-blogCard__excerpt">androidのアプリには、アプリ毎のデータの保存領域があります。 この領域に保存したファイルをローカルファイルと言います。 ローカルファイルは、下記のようなディレク&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">まとめ</h2>



<p>デバッグ中だとlogcatの内容を確認出来るのですが、運用時にエラーが発生した際にログの内容が確認出来ないんですよね。<br>この方法でログをローカルに保存しておくと、後からでもログを確認出来るので、不具合の調査に役立ちます。</p>



<p>この記事が少しでも参考になれば幸いです。</p>



<p>最後までお読み頂きありがとうございました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dev-memo.net/save_locat/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
