CINXE.COM

SINETStream | SINETStream

<!doctype html> <html lang="en-US"> <head> <base href="https://www.sinetstream.net/docs/userguide/android.html"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-169261303-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-169261303-1'); </script> <meta charset="UTF-8"><!-- Begin Jekyll SEO tag v2.8.0 --> <title>SINETStream | SINETStream</title> <meta name="generator" content="Jekyll v3.10.0"> <meta property="og:title" content="SINETStream"> <meta property="og:locale" content="en_US"> <meta name="description" content="SINETStream"> <meta property="og:description" content="SINETStream"> <link rel="canonical" href="https://www.sinetstream.net/docs/userguide/android.html"> <meta property="og:url" content="https://www.sinetstream.net/docs/userguide/android.html"> <meta property="og:site_name" content="SINETStream"> <meta property="og:type" content="website"> <meta name="twitter:card" content="summary"> <meta property="twitter:title" content="SINETStream"> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","description":"SINETStream","headline":"SINETStream","url":"https://www.sinetstream.net/docs/userguide/android.html"}</script><!-- End Jekyll SEO tag --> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="theme-color" content="#157878"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <link rel="stylesheet" href="/assets/css/style.css?v=d6f0b877a2074d7508e6b1d390a965b3d937c724"> <meta http-equiv="X-Translated-By" content="Google"> <meta http-equiv="X-Translated-To" content="en"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.omlEigW4xY8.O/am=DgY/d=1/rs=AN8SPfpjsL9kUWY0h-sp7Ilu7hZWGwEmeg/m=corsproxy" data-sourceurl="https://www.sinetstream.net/docs/userguide/android.html"></script> <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" rel="stylesheet"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.omlEigW4xY8.O/am=DgY/d=1/exm=corsproxy/ed=1/rs=AN8SPfpjsL9kUWY0h-sp7Ilu7hZWGwEmeg/m=phishing_protection" data-phishing-protection-enabled="false" data-forms-warning-enabled="true" data-source-url="https://www.sinetstream.net/docs/userguide/android.html"></script> <meta name="robots" content="none"> </head> <body> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.omlEigW4xY8.O/am=DgY/d=1/exm=corsproxy,phishing_protection/ed=1/rs=AN8SPfpjsL9kUWY0h-sp7Ilu7hZWGwEmeg/m=navigationui" data-environment="prod" data-proxy-url="https://www-sinetstream-net.translate.goog" data-proxy-full-url="https://www-sinetstream-net.translate.goog/docs/userguide/android.html?_x_tr_sl=ja&amp;_x_tr_tl=en&amp;_x_tr_hl=en" data-source-url="https://www.sinetstream.net/docs/userguide/android.html" data-source-language="ja" data-target-language="en" data-display-language="en" data-detected-source-language="" data-is-source-untranslated="false" data-source-untranslated-url="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://www.sinetstream.net/docs/userguide/android.html&amp;anno=2" data-client="tr"></script> <header class="page-header" role="banner"> <h1 class="project-name"><a href="https://www-sinetstream-net.translate.goog/?_x_tr_sl=ja&amp;_x_tr_tl=en&amp;_x_tr_hl=en">SINETStream</a></h1> <h2 class="project-tagline">SINETStream</h2> </header> <main id="content" class="main-content" role="main"><!-- Copyright (C) 2020-2021 National Institute of Informatics Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <p><a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://translate.google.com/translate?hl%3Den%26sl%3Dja%26tl%3Den%26u%3Dhttps://nii-gakunin-cloud.github.io/sinetstream/docs/userguide/android.html" title="google translate">English</a></p> <h1 id="sinetstream-for-android-ユーザガイド">SINETStream for Android ユーザガイド</h1> <p><strong>目次</strong></p> <pre>1. 概要 2. モジュール構成 3. 作業準備 3.1 開発環境の導入 3.2 実行環境の用意 4. 作業手順 4.1 ビルド環境設定 4.1.1 ライブラリファイルの取得 4.1.2 開発ソースへの組み込み 4.1.3 リポジトリ追加 4.1.4 依存関係追加 4.1.4.1 SINETStreamライブラリ 4.1.4.2 Paho MQTT Androidライブラリ 4.2 マニフェストファイルの記述 4.2.1 利用者権限追加 4.2.2 サービスコンポーネント追加 4.3 SINETStreamライブラリの動作設定 4.3.1 SINETStream設定ファイルの配置 4.3.2 基本設定 4.3.3 接続先URIの決定方法 4.3.4 接続先ホスト・ポートが複数ある場合の振る舞い 4.4 SSL/TLSの利用設定 4.4.1 設定ファイルを用いる運用の場合 4.4.2 コンフィグサーバを利用する運用の場合 4.5 開発成果物のAndroid端末への導入 4.5.1 Androidエミュレータに導入する場合 4.5.2 Android実機に導入する場合 5. まとめ </pre> <h2 id="1-概要">1. 概要</h2> <p>国立情報学研究所(NII)開発によるAndroid版の<code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>を提供するにあたり、 これを利用するユーザアプリケーションの開発者が考慮すべきことを概説する。</p> <h2 id="2-モジュール構成">2. モジュール構成</h2> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>、およびそれを利用するユーザアプリケーションの依存関係を簡略的に図示すると以下のように表現される。</p> <div class="language-plaintext highlighter-rouge"> <div class="highlight"> <pre class="highlight"><code> #---------------------------------------------+ | User Application using MQTT (1)| +---------------------------------------------+ =================================================== SINETStream API +---------------------------------------------+ | SINETStream Android Library (2)| | | +---------------------------------------------+ +------------------+ +-----------------------+ | Paho MQTT (3a)| | Paho MQTT (3b)| | client library | | client library | | (Paho ORIGINAL) | | (BUGFIX: Android 12+) | +------------------+ +-----------------------+ =================================================== System API +---------------------------------------------+ | Android System (4)| | ........... ............ ............ | | : Network : : File I/O : : KeyChain : | | :.........: :..........: :..........: | +------------A--------------------------------+ | | IP network V [ MQTT Broker ] </code></pre> </div> </div> <p><凡例></p> <p>(1) ユーザが開発するアプリケーション</p> <p>(2) <code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>本体</p> <p>(3) <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://www.eclipse.org/paho">Eclipse Pahoプロジェクト</a>が提供するAndroid版の<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://github.com/eclipse/paho.mqtt.android">MQTTクライアントライブラリ</a></p> <blockquote> <p><em>注意: Pahoプロジェクト活動停止(?)による不具合放置への暫定対応</em></p> <p>(3a) Android 12未満はオリジナル版をそのまま使用可能</p> <p>(3b) Android 12以降は動作不具合があるため、NIIによる暫定改修版を使用する</p> </blockquote> <p>(4) Androidシステム</p> <blockquote> <p>MQTTを扱うネットワーク処理、設定情報を扱うファイルI/O、秘匿情報を扱うKeyChainなどの機能モジュールを利用する。</p> </blockquote> <h2 id="3-作業準備">3. 作業準備</h2> <h3 id="31-開発環境の導入">3.1 開発環境の導入</h3> <p>Google社が提供する統合開発環境 <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio">Android Studio</a> を入手して、手元の作業機材に導入する。</p> <p><code class="language-plaintext highlighter-rouge">Android Studio</code>自体は、<code class="language-plaintext highlighter-rouge">Windows</code>, <code class="language-plaintext highlighter-rouge">MacOS</code>, <code class="language-plaintext highlighter-rouge">Linux</code>, <code class="language-plaintext highlighter-rouge">ChromeOS</code> の各プラットフォームに対応しているが、その動作環境として高性能な開発機材が必要となる。 特に実装メモリ量やCPU/GPUの性能が効いてくる。 少なくとも上記プラットフォーム毎の <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/install?hl%3Dja">システム要件</a> を満足するものを選定すること。</p> <p>また、開発機材上で <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/run/emulator?hl%3Dja">エミュレータ</a> を動作させる場合は、その <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/run/emulator?hl%3Dja%23requirements">システム要件</a> にも留意すること。</p> <blockquote> <p><em>注意: <code class="language-plaintext highlighter-rouge">Android Studio</code>の版数</em></p> <p>Android開発環境は継続的に更新されており、時としてビルド環境と設定ファイルの不整合によりビルドに失敗することがある。 その場合、 <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/archive?hl%3Dja">Android Studio のダウンロード アーカイブ</a>より、 <code class="language-plaintext highlighter-rouge">Android Studio Dolphin | 2021.3.1 ベータ版 3</code>を取得されたい。</p> </blockquote> <h3 id="32-実行環境の用意">3.2 実行環境の用意</h3> <p>Android端末の実機、または<code class="language-plaintext highlighter-rouge">AndroidStudio</code>と連携する <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/run/emulator?hl%3Dja">エミュレータ</a> 環境にて所用の <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/run/managing-avds?hl%3Dja">Android仮想デバイス(AVD)</a> を用意する。</p> <blockquote> <p><em>注意: Android動作環境の制約</em></p> <p>ユーザアプリケーションのビルド設定、および対象Android端末のいずれも、Android 8.0(APIレベル26)以上であること。 Android版の<code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>は、メッセージのシリアライザ/デシリアライザ機能で<code class="language-plaintext highlighter-rouge">Apache Avro</code>ライブラリを利用しており、後者の実装内容が動作上の制約条件となっている。</p> </blockquote> <h2 id="4-作業手順">4. 作業手順</h2> <h3 id="41-ビルド環境設定">4.1 ビルド環境設定</h3> <p>ユーザアプリケーションにとって、<code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>も<code class="language-plaintext highlighter-rouge">Paho MQTT Android</code>も外部ライブラリとして参照するものである。 すなわち「どこに何があるか」というリポジトリ参照先と、「どの版のものを参照するか」という二種類の情報を開発環境に設定する必要がある。</p> <p><code class="language-plaintext highlighter-rouge">Android Studio</code>では、<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://gradle.org/">Gradle Build Tool</a>によるビルド管理を行なっている。 よって、ユーザアプリケーションが参照する外部ライブラリなどの設定情報は<code class="language-plaintext highlighter-rouge">Gradle</code>制御ファイルの一つである <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/build%23module-level?hl%3Dja">モジュールレベルの<code class="language-plaintext highlighter-rouge">build.gradle</code></a>にて設定する。 <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/build/dependencies?hl%3Dja">ビルド依存関係の追加</a>の記述を参照されたい。</p> <p>以降では、ユーザのAndroid開発ソースから<code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>を利用するための具体的な手順について記述する。</p> <blockquote> <p><em>注意: ライブラリ参照方法の違い</em></p> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>自身、およびその依存ライブラリである <code class="language-plaintext highlighter-rouge">Paho MQTT Android</code>とでは参照方法が異なる。 前者は <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/projects/android-library?hl%3Dja">Android ARchive (AAR)</a>ファイルを手元にダウンロードして、それを直接参照する。 後者はネット上のmavenリポジトリに配置されるのでそれを参照する。</p> </blockquote> <h4 id="411-ライブラリファイルの取得">4.1.1 ライブラリファイルの取得</h4> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>は、ソースおよびバイナリの形式で<code class="language-plaintext highlighter-rouge">GitHub</code>上で公開される。</p> <p>国立情報学研究所(NII)が管理するリポジトリ <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://github.com/nii-gakunin-cloud/sinetstream-android/releases">sinetstream-android</a> より、最新版の<code class="language-plaintext highlighter-rouge">sinetstream-android-x.y.z.aar</code>を手元にダウンロードする。</p> <blockquote> <p>便宜的に、ダウンロード先を<code class="language-plaintext highlighter-rouge">$HOME/Downloads</code>として話を進める。</p> </blockquote> <h4 id="412-開発ソースへの組み込み">4.1.2 開発ソースへの組み込み</h4> <p>Android開発環境で作業する対象プログラムを仮に<code class="language-plaintext highlighter-rouge">testapp</code>とすると、 概略以下のようなディレクトリ内容になっているはずである。</p> <div class="language-console highlighter-rouge"> <div class="highlight"> <pre class="highlight"><code><span class="gp">% cd $</span><span class="o">(</span>WORKDIR<span class="o">)</span>/testapp <span class="go">% ls -FC app/ gradle/ gradlew local.properties build.gradle gradle.properties gradlew.bat settings.gradle </span></code></pre> </div> </div> <p>アプリケーションソース格納用の<code class="language-plaintext highlighter-rouge">app</code>サブディレクトリ直下に、 ローカルライブラリ格納用のディレクトリ<code class="language-plaintext highlighter-rouge">libs</code>を用意する。 既にあればそれを使い、なければ作成する。 前項で取得した<code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>をそこに格納する。</p> <div class="language-console highlighter-rouge"> <div class="highlight"> <pre class="highlight"><code><span class="go">% cd app % mkdir libs % cd libs </span><span class="gp">% cp $</span>HOME/Downloads/sinetstream-android-x.y.z.aar <span class="nb">.</span> </code></pre> </div> </div> <h4 id="413-リポジトリ追加">4.1.3 リポジトリ追加</h4> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>、およびその依存ライブラリ<code class="language-plaintext highlighter-rouge">Paho MQTT Android</code>ではそれぞれ参照方法が異なるため、個別に記述する。</p> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>は、目的のものを手動で手元にダウンロードして、 ローカルライブラリ格納用の<code class="language-plaintext highlighter-rouge">libs</code>ディレクトリに配置する。 それを参照するよう、 モジュールレベルの<code class="language-plaintext highlighter-rouge">build.gradle</code>に記述する。</p> <pre><code class="language-gradle:app/build.gradle">repositories { flatDir { // For SINETStream library dirs "libs" } } </code></pre> <p><code class="language-plaintext highlighter-rouge">Paho MQTT Android</code>ライブラリは、ネット上の公開先(mavenブロック)を モジュールレベルの<code class="language-plaintext highlighter-rouge">build.gradle</code>に <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://github.com/eclipse/paho.mqtt.android%23gradle">記述</a> する。</p> <pre><code class="language-gradle:app/build.gradle">repositories { maven { // The Paho MQTT Android url "https://repo.eclipse.org/content/repositories/paho-snapshots/" } mavenCentral() } </code></pre> <h4 id="414-依存関係追加">4.1.4 依存関係追加</h4> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>、およびその依存ライブラリ<code class="language-plaintext highlighter-rouge">Paho MQTT Android</code>ではそれぞれ参照方法が異なるため、個別に記述する。</p> <h5 id="4141-sinetstreamライブラリ">4.1.4.1 SINETStreamライブラリ</h5> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>は、 前述のようにローカルライブラリ格納用の<code class="language-plaintext highlighter-rouge">libs</code>ディレクトリに配置する。 当該ファイル名の本体部分と拡張子部分に分けて、 モジュールレベルの<code class="language-plaintext highlighter-rouge">build.gradle</code>に<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/build/dependencies?hl%3Dja">ビルド依存関係を追加</a>する。</p> <pre><code class="language-gradle:app/build.gradle">dependencies { // SINETStream for Android implementation(name: 'sinetstream-android-x.y.z', ext: 'aar') } </code></pre> <h5 id="4142-paho-mqtt-androidライブラリ">4.1.4.2 Paho MQTT Androidライブラリ</h5> <p><code class="language-plaintext highlighter-rouge">Paho MQTT Android</code>ライブラリは、ネット上の公開先(<code class="language-plaintext highlighter-rouge">maven</code>リポジトリ)を以下の形式で指定する。</p> <div class="language-gradle highlighter-rouge"> <div class="highlight"> <pre class="highlight"><code> <span class="n">implementation</span> <span class="s1">'&lt;group-id&gt;:&lt;artifact-id&gt;:&lt;version&gt;'</span> </code></pre> </div> </div> <p>さて、第2章「モジュール構成」で述べたとおり、<code class="language-plaintext highlighter-rouge">Paho MQTT Android</code>ライブラリはAndroid 12以降に対応しておらず、そのままではビルドできない。 NII開発の暫定ライブラリで代替するか否か、ユーザアプリケーションの動作環境に応じてモジュールレベルの<code class="language-plaintext highlighter-rouge">build.gradle</code>に<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/build/dependencies?hl%3Dja">ビルド依存関係を追加</a>する。</p> <ul> <li>Android 12 (APIレベル31)未満の場合: <pre><code class="language-gradle:app/build.gradle">dependencies { // The Paho MQTT Android implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5' implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1' } </code></pre></li> <li>Android 12 (APIレベル31)以降の場合: <pre><code class="language-gradle:app/build.gradle">dependencies { /* NOP: Use the client module as is */ implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5' /* DEL: Comment out the service module until fixed */ //implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1' /* ADD: A temporary fix for the Paho Android Service */ implementation 'net.sinetstream:pahomqttandroid-bugfix:1.0.0' } </code></pre></li> </ul> <blockquote> <p>将来<code class="language-plaintext highlighter-rouge">Paho MQTT</code>プロジェクトの活動が再開され、<code class="language-plaintext highlighter-rouge">Paho MQTT Android</code>ライブラリの不具合が修正されることを期待したい。</p> </blockquote> <h3 id="42-マニフェストファイルの記述">4.2 マニフェストファイルの記述</h3> <h4 id="421-利用者権限追加">4.2.1 利用者権限追加</h4> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>を利用するユーザアプリケーションは、 所用の<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/guide/topics/manifest/manifest-intro?hl%3Dja%23perms">権限</a>(<code class="language-plaintext highlighter-rouge">uses-permission</code>句)をビルド情報として宣言する必要がある。 さもないと当該アプリケーション実行時に<code class="language-plaintext highlighter-rouge">権限エラー</code>が発生する。</p> <p>以下の内容をマニフェストファイル(AndroidManifest.xml)に設定すること。</p> <pre><code class="language-xml:app/src/main/AndroidManifest.xml">&lt;!-- Permissions for the external network (such like INTERNET) access --&gt; &lt;uses-permission android:name="android.permission.INTERNET" /&gt; &lt;uses-permission android:name="android.permission.WAKE_LOCK" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt; &lt;!-- Required for the Paho Android Service (Android 12+) --&gt; &lt;uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /&gt; </code></pre> <h4 id="422-サービスコンポーネント追加">4.2.2 サービスコンポーネント追加</h4> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>の下位層に位置する<code class="language-plaintext highlighter-rouge">Paho MQTT Android</code>ライブラリは、以下の2つの機能要素</p> <ul> <li>ユーザインタフェースを提供するクライアントAPI部分</li> <li>実際にMQTTメッセージ処理を担当する常駐型サービス</li> </ul> <p>から構成される。</p> <p>すなわち、<code class="language-plaintext highlighter-rouge">Paho MQTT Android</code>ライブラリは<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/guide/topics/manifest/manifest-intro?hl%3Dja%23components">アプリコンポーネント</a>として<code class="language-plaintext highlighter-rouge">サービス</code>機能を提供している。 ユーザアプリケーションが同サービスと連携するため、その名称(<code class="language-plaintext highlighter-rouge">service</code>句)をマニフェストに定義する必要がある。</p> <blockquote> <p><em>注意<em></em></em></p> <p>この設定を忘れても「Paho MQTT Android」を利用するユーザプログラム自体は 起動するが、Androidシステムが当該サービスを起動しない。 このため、publishやsubscribeなどのAPI関数の処理が空回りする。 アプリケーションからの要求は受け付けられるものの、ネットワークとやりとり されない状態なのでエラーに気づきにくい。</p> </blockquote> <p>以下の内容をマニフェストファイル(AndroidManifest.xml)に設定すること。</p> <pre><code class="language-xml:app/src/main/AndroidManifest.xml">&lt;application ... &gt; &lt;!-- MQTT service provided by Paho MQTT Android --&gt; &lt;service android:name="org.eclipse.paho.android.service.MqttService" /&gt; &lt;/application&gt; </code></pre> <h3 id="43-sinetstreamライブラリの動作設定">4.3 SINETStreamライブラリの動作設定</h3> <p>本ライブラリの設定方法として、以下の2通りを用意する。</p> <ul> <li>規定場所に事前に配置された設定ファイルを読み込む</li> <li>設定サーバ(コンフィグサーバ)から設定内容を動的にダウンロードする</li> </ul> <p>次節以降では、前者の設定ファイル方式について記述する。 後者の設定サーバ方式については別途記述する。</p> <h4 id="431-sinetstream設定ファイルの配置">4.3.1 SINETStream設定ファイルの配置</h4> <p>本方式による設定の場合、アプリケーション固有のデータ領域に<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://yaml.org/">YAML</a>形式の設定ファイル</p> <ul> <li>/data/data/<strong>PACKAGE</strong>/files/sinetstream_config.yml</li> </ul> <p>を事前に用意しておく。ファイル名は固定である。 書式など詳細は、別紙<a href="https://www-sinetstream-net.translate.goog/docs/userguide/config-android.html?_x_tr_sl=ja&amp;_x_tr_tl=en&amp;_x_tr_hl=en">Android版のSINETStream設定ファイル</a>を参照のこと。</p> <blockquote> <p><a href="https://www-sinetstream-net.translate.goog/docs/tutorial-android/?_x_tr_sl=ja&amp;_x_tr_tl=en&amp;_x_tr_hl=en">Android版クイックスタートガイド</a>で示したサンプルアプリケーション2種では、 GUIによる設定画面を用意して「利用者の操作内容を元にSINETStream設定 ファイルを動的に自動生成する」手法を採用している。 こちらの実装内容を参照されたい。</p> </blockquote> <h4 id="432-基本設定">4.3.2 基本設定</h4> <p>設定ファイルの記述内容は必須項目とオプション項目がある。 以下に示す項目は必ず記述する必要がある。</p> <ul> <li>サービス名(任意文字列、検索鍵を兼ねる)</li> <li>メッセージシステム種別(type)</li> <li>接続先ホスト・ポート(brokers)</li> <li>トピック名(topic)</li> </ul> <p>オプション項目が省略された場合、<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://www.eclipse.org/paho/files/javadoc/org/eclipse/paho/client/mqttv3/MqttConnectOptions.html%23MqttConnectOptions--">MqttConnectOptionsのコンストラクタ既定値</a>が使われる。</p> <h4 id="433-接続先uriの決定方法">4.3.3 接続先URIの決定方法</h4> <p>接続先サーバ(ブローカ)URIは一般的に以下のように表現される。</p> <div class="language-plaintext highlighter-rouge"> <div class="highlight"> <pre class="highlight"><code>schema://host[:port] ^^^^^ 1) ^^^^^^^^^^^ 2) </code></pre> </div> </div> <p>SINETStream設定ファイルにおける項目「brokers」で指定するのは、 後述のように上記2)の「ホスト(+ポート)部分の羅列」である。 なお、上記1)のスキーマ部分はいくつかの条件の組み合わせで決まる。</p> <table> <thead> <tr> <th>transport</th> <th>tls</th> <th>schema</th> </tr> </thead> <tbody> <tr> <td>省略</td> <td>省略</td> <td>tcp</td> </tr> <tr> <td>tcp</td> <td>なし</td> <td>tcp</td> </tr> <tr> <td>tcp</td> <td>あり</td> <td>ssl</td> </tr> <tr> <td>websockets</td> <td>なし</td> <td>ws</td> </tr> <tr> <td>websockets</td> <td>あり</td> <td>wss</td> </tr> </tbody> </table> <p>さらに、SSL/TLS通信を行うか否かの判定は、 後述するように設定項目「tls」の記述方法で変わる。 上記の「transport」および「tls」ともオプション項目であるため、 記述のバリエーションを頭に入れて設定しないと所望のスキーマが得られず、 サーバとの接続失敗で苦労することになる。</p> <h4 id="434-接続先ホストポートが複数ある場合の振る舞い">4.3.4 接続先ホスト・ポートが複数ある場合の振る舞い</h4> <p>SINETStream設定ファイルにおける項目「brokers」で指定する場合、 次の3通りの書式を受け付ける。</p> <p><strong>1) 単一の接続先</strong></p> <pre><code class="language-YAML">brokers: host1 </code></pre> <p><strong>2) 複数の接続先をコンマ接続でリスト指定</strong></p> <pre><code class="language-YAML">brokers: host1,host2:port2,host3 </code></pre> <p><strong>3) 複数の接続先をYAMLリスト形式で指定</strong></p> <pre><code class="language-YAML">brokers: - host1 - host2:port2 - host3 </code></pre> <pre><code class="language-YAML">brokers: [host1, host2:port2, host3] </code></pre> <p>複数の接続先を指定した場合の振る舞いは以下のようになる。</p> <ul> <li>サーバURIの配列として受け取った候補を上から順に試し、 接続に失敗した場合は次の接続先を試すことを繰り返す。 全滅の場合にエラーで返る。</li> </ul> <blockquote> <p><em>出典</em>:<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://www.eclipse.org/paho/files/javadoc/org/eclipse/paho/client/mqttv3/MqttConnectOptions.html%23setServerURIs-java.lang.String:A-">MqttConnectOptions: setServerURIs</a></p> </blockquote> <h3 id="44-ssltlsの利用設定">4.4 SSL/TLSの利用設定</h3> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>を利用するユーザアプリケーションは、 対向の相手群(ブローカ)との通信路にSSL/TLSを利用することができる。</p> <h4 id="441-設定ファイルを用いる運用の場合">4.4.1 設定ファイルを用いる運用の場合</h4> <p>以下の各項目を実施する。</p> <ul> <li>接続先ブローカの管理者から発行された<code class="language-plaintext highlighter-rouge">SSL/TLS証明書ファイル</code>を動作対象Android機材に手動で導入する。</li> <li>別紙<a href="https://www-sinetstream-net.translate.goog/docs/userguide/config-android.html?_x_tr_sl=ja&amp;_x_tr_tl=en&amp;_x_tr_hl=en">Android版のSINETStream設定ファイル</a>の「SSL/TLSに関するパラメータ」の項を参照し、所用の設定内容を記述する。</li> </ul> <blockquote> <p><em>注意</em></p> <p>事前導入したSSL/TLS証明書ファイル形式、および接続先ブローカの設定内容に相互矛盾がないよう留意する。 さもないとブローカ接続時のSSL/TLSハンドシェーク処理で失敗する。</p> </blockquote> <h4 id="442-コンフィグサーバを利用する運用の場合">4.4.2 コンフィグサーバを利用する運用の場合</h4> <p>SSL/TLSの設定はサーバ側で準備され、またSSL/TLS証明書データ自体も自動的にダウンロードされる。 すなわちAndroid端末側で特に対処すべきことはない。</p> <h3 id="45-開発成果物のandroid端末への導入">4.5 開発成果物のAndroid端末への導入</h3> <p>開発環境<code class="language-plaintext highlighter-rouge">AndroidStudio</code>を準備し、ユーザアプリケーションを実装[1][2]すると、 <code class="language-plaintext highlighter-rouge">APK</code>(Android package)と呼ばれるアーカイブファイルが生成される。</p> <p>APKとは、アプリケーションを構成する「コード、データ、およびリソースファイル」をパッケージとして一つにまとめたものである。 この生成物<code class="language-plaintext highlighter-rouge">APK</code>ファイルを実行環境(エミュレータや実機)に導入する方法について述べる。</p> <p>[1]: <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/guide/components/fundamentals">アプリの基礎</a> <br> [2]: <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/run">アプリをビルドして実行する</a></p> <h4 id="451-androidエミュレータに導入する場合">4.5.1 Androidエミュレータに導入する場合</h4> <p>以下の要領で<code class="language-plaintext highlighter-rouge">APK</code>ファイルをエミュレータに導入し、<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/run/emulator?hl%3Dja">同エミュレータ上でアプリケーションを実行</a>する。</p> <ol> <li>Android仮想デバイス(AVD: Android Virtual Device)の用意</li> </ol> <blockquote> <p>開発環境<code class="language-plaintext highlighter-rouge">AndroidStudio</code>付属の<code class="language-plaintext highlighter-rouge">Android仮想デバイス</code>(AVD)ツールを用いて、 所用の諸元(画面解像度、APIレベル、CPU種別など)に 沿った<code class="language-plaintext highlighter-rouge">AVD</code>を事前作成しておく。</p> </blockquote> <ol> <li>AVDの起動</li> </ol> <blockquote> <p>目的の諸元を満たす<code class="language-plaintext highlighter-rouge">AVD</code>を起動するとAndroid端末イメージが表示される。 GUI経由で実機同様に操作したり、 遠隔操作(<code class="language-plaintext highlighter-rouge">APK</code>導入やデバッグなど)ができるようになる。</p> </blockquote> <ol> <li>アプリケーションの導入と起動</li> </ol> <blockquote> <p>エミュレータが実行中に<code class="language-plaintext highlighter-rouge">AndroidStudio</code>上の「Run」コマンドを実行する。 必要に応じてソースが再構築され、生成<code class="language-plaintext highlighter-rouge">APK</code>ファイルがエミュレータに導入される。 続けて、当該プログラムが自動的に動作を開始する。</p> </blockquote> <h4 id="452-android実機に導入する場合">4.5.2 Android実機に導入する場合</h4> <p>以下の要領で<code class="language-plaintext highlighter-rouge">APK</code>ファイルを実機に導入し、<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/run/device">同機上でアプリケーションを実行する</a>。</p> <ol> <li>Android実機の設定画面を操作し、開発者モードを有効化する。</li> <li>設定コマンドの開発者メニュー経由で「USBデバッグ」を有効化する。</li> <li>実機と開発機材をUSBケーブルで接続する。</li> <li>実機に「デバッグモードで接続して良いか」を確認するダイアログが表示される。 デバッグ接続を承認すると、<code class="language-plaintext highlighter-rouge">AndroidStudio</code>で認識される。</li> <li>この状態で<code class="language-plaintext highlighter-rouge">AndroidStudio</code>上の「Run」コマンドを実行する。</li> </ol> <p>あるいは、開発機材上で<a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://developer.android.com/studio/command-line/adb">Android Debug Bridge (adb)</a>コマンドを直接操作することで、 対象<code class="language-plaintext highlighter-rouge">APK</code>ファイルを実機に導入できる。</p> <div class="language-console highlighter-rouge"> <div class="highlight"> <pre class="highlight"><code><span class="go">PC% adb install -r XXX.apk Success </span></code></pre> </div> </div> <h2 id="5-まとめ">5. まとめ</h2> <p><code class="language-plaintext highlighter-rouge">SINETStreamライブラリ</code>を用いるアプリケーション開発者が留意すべき項目について、 一通り概説した。</p> <footer class="site-footer"><span class="site-footer-credits">This page was generated by <a href="https://translate.google.com/website?sl=ja&amp;tl=en&amp;hl=en&amp;u=https://pages.github.com">GitHub Pages</a>.</span> </footer> </main> <script>function gtElInit() {var lib = new google.translate.TranslateService();lib.translatePage('ja', 'en', function () {});}</script> <script src="https://translate.google.com/translate_a/element.js?cb=gtElInit&amp;hl=en&amp;client=wt" type="text/javascript"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10