アプリ開発と実行(Android)

アプリ開発環境設定

Androidアプリは、Eclipse、Android SDKを利用して開発し、基本的なステップは、一般的なAndroidアプリを作成する方法と同じです。

EclipseとAndroidのSDKインストールファイルの関連資料は、GoogleのAndroid Webページを参照してください。

http://developer.android.com/sdk/installing.html

EclipseのとAndroidのSDKは最新バージョンの更新サイクルが早いので、上記のWebページのリンクを利用して最新の開発環境にインストールする必要があります。インストールの詳細は、Eclipse、ADT、Android SDKのバージョンが更新されるたびに少しずつ変更されることがあります。

アンドロイド基本開発環境は、基本的に次のような手順で進行します。

  1. JDK(Java SE Development Kit) インストール

  2. Eclipse インストール

  3. Android SDK インストール

  4. ADT プラグインインストール

2014年12月、Googleから新しい開発ツールであるAndroid Studio(アンドロイドスタジオ)が公開されました。

https://en.wikipedia.org/wiki/Android_Studio

Android Studioを使用する方法と、既存の EclipseのプロジェクトをAndroid Studioにインポートする方法を、この章に追加しました。

2015年6月から、Googleは Eclipse ADTプラグインのサポートを中止しました。

http://developer.android.com/tools/help/adt.html

開発環境に応じて、Android Studioのみをサポートすることもあります。

既にアプリの開発環境が設定されている場合はアプリ開発環境の設定は省略可能です。

JDK(Java SE Development Kit) インストール

Android Studioと Eclipseは Javaベースで作られているので、実行するには JDK(Java SE Development Kit)環境が設定されている必要があります。JDKは、無料で提供されており、簡単にインストールできます。

ダウンロード

下記のサイトで、システム環境に合ったJDKをダウンロードすることができます。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

この章では、jdk-7u17-windows-i586.exe (version 1.7.0_17)ファイルをダウンロードして使用しました。サイトの更新により、一部内容が変更されることがあります。

インストール確認

ダウンロードしたインストールファイルを実行すると、自動的に必要な環境設定とインストールを行います。インストールが完了したら、コマンドウィンドウで、正常にインストールされていることを確認します。

java -version

JDK1.5以降のバージョンをインストールする場合には、実行に必要な環境変数(JAVA_HOME)を別々に設定しなくても、システムパスに自動的に実行ファイルをコピーしてアクセスすることができます。

開発ツールインストール

Android Studio

Android Studioのインストールファイルは、基本的に SDKツールが含まれています。下記のサイトから環境に合ったインストールファイルをダウンロードすることができます。

http://developer.android.com/sdk/index.html

Android Studioをデフォルトのオプションでインストールした場合には、すぐに開発段階に進みます。

この章では、Android Studio 1.5.1バージョンのインストールを基準に作成しました。

Eclipse

nexacro platform 14.0.1.3000以降のバージョンからFCMサービス機能が追加され、Eclipseをサポートしなくなりました。Android Studioでのみアプリプロジェクトをビルドすることができます。

EclipseのADTプラグインは2015年にサポートが終了し、その後追加されたサービス機能を使用する際に制約がありました。

https://developer.android.com/studio/tools/sdk/eclipse-adt

Eclipseは、個別のインストール過程なしにファイルをダウンロードして解凍すればすぐに使用できます。

下記のサイトでは、環境に合ったファイルをダウンロードすることができます。 Eclipse Standard版のダウンロードまたは開発環境に合ったファイルを選択してダウンロードします。

http://www.eclipse.org/downloads/

Android SDK インストール

Androidのプロジェクトを進行するためには関連したAPIを提供するAndroid SDKをインストールする必要があります。該当ファイルは、Androidの開発者サイトで提供しています。

ADTプラグインがインストールされたEclipseを含むADT Bundleパッケージをダウンロードしたり、SDKインストールファイルを個別にダウンロードできます。SDKインストールファイルのみダウンロードするには、以下のサイトの下のメニューから「USE AN EXISTING IDE」リンクを選択し、「SDK Tools for Windows」インストールファイルをダウンロードします。

http://developer.android.com/sdk/index.html

インストールファイルを実行してインストールが完了すると、SDK Managerが実行されます。SDK Managerは、開発に必要なAndroidのAPIと関連ツールをダウンロードできる機能を提供します。項目の中で「Tools」、「Extras」の項目を選択し、必要なAndroid APIを選択してインストールします。

SDK Managerは、必要によって再実行して、追加的にAPIをインストールすることができます。

Android APIのインストールは、ネットワーク環境によって時間がかかることがあります。

ADTプラグインのインストール

Eclipseを実行すると、インストールされたJDKのバージョンに該当するJRE(Java Runtime Environment)が設定されていることを確認します。JREの設定は、以下のメニューで確認できます。

Window > Preference > Java > Installed JREs

Androidのプロジェクトを実行するためにADTプラグインをインストールします。下のメニューに移動してDeveloper Toolsを追加します。

Help > Install New Software

使用しているEclipseのバージョンによって、追加機能をインストールするためのメニューが異なります。Eclipse 3.4以前のバージョンである場合には、[Help > Software Updates] メニューから確認できます。

この章では、Eclipse4.3(Kepler)バージョンを使用しています。

Work withの項目の横にある「Add」ボタンをクリックして、次のようにRepositoryの情報を入力します。

ADT Plugin
https://dl-ssl.google.com/android/eclipse/

選択できる項目から「Developer Tools」を選択してインストールを進行します。インストールが完了すると、Eclipseが再起動されます。

Eclipseプロジェクトのマイグレーション

マイグレーションに関するより詳細については、Googleから提供されるガイドドキュメントを参照してください。

https://developer.android.com/sdk/installing/migrate.html

マイグレーション手順

EclipseのADTプラグインで開発していたプロジェクトを、Android Studioにマイグレーションすることができます。マイグレーションは、下記の順に進みます。

  1. [Import project] 機能を実行します。

    既存に開いたプロジェクトがない場合、クイックスタート(Quick Start)ウィンドウで新しいプロジェクトを作成します。下の図で「Import Project (Eclipse ADT, Gradle, etc.)」を選択します。他のプロジェクトの作業中に、新しいプロジェクトを作成しようとすると「File > New > Import Project」項目を選択して、機能を実行することができます。

  1. インポートするプロジェクトを選択します。

    Eclipseの workspaceフォルダの下で、既存に作成したプロジェクトフォルダを選択します。

  1. パスとオプションを選択して、「Finish」ボタンをクリックします。

    同じアプリケーション名でパスを指定します。同じ名前を持つプロジェクトがある場合には、別の名前で変更することができます。

build.gradle

マイグレーション作業後のビルドが正常に処理されない場合があります。このような場合には、build.gradleの設定をいくつか変更する必要があります。よくエラーが発生る部分は、SDKのバージョンが不適切に設定される場合もあり、dependencies項目のバージョンが不適切な場合があります。

次のコードは例示として提供するものであり、実際のオプションは開発環境によって異なる場合があります。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.tobesoft.sampleproject"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:22.2.1'
	compile 'com.android.support:support-v4.20.0.0'
	compile 'com.google.android.gms:play-services:+'
    compile files('libs/nexacro14.jar')
}

全オプションに関する説明は、Googleが提供する文書を参照してください。

http://developer.android.com/tools/building/configuring-gradle.html

AndroidManifest.xml

Googleプレイのサービス関連ライブラリの設定が既存の Eclipse ADTプラグインの開発環境と変わった部分があります。AndroidManifest.xmlファイルはそのまま使用できますが、エラーがある場合は、そのファイル内の下のオプションを変更します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tobesoft.sampleproject"
    android:versionCode="1"
    android:versionName="1.0" android:installLocation="auto">
...
	<meta-data android:name="com.google.android.gms.version" 
		android:value="@integer/google_play_services_version" />
    </application>
</manifest>

Googleプレイのサービス関連ライブラリは、バージョン5から使用することができますが、Android Studioは、7.5.0から gradleで dependencies処理されます。そこでAndroidManifest.xmlの設定では、SDKの play_serviceバージョンを持ってくるように設定します。

注意

nexacro platformで提供する APIの Mapオブジェクトがマイグレーション後に正常に動作しない可能性があります。その問題は検討中です。Mapオブジェクトを使用しているサービスがある場合は、マイグレーションを保留することをお勧めします。

アプリプロジェクト開発

アプリ開発環境が設定された場合は、Android Studioまたは Eclipseを実行して、Android OSで動作するアプリケーションを作成することができます。アプリのプロジェクトを進行する前に、nexacro studioで開発されたアプリケーションで作成されたアーカイブファイルは、指定されたパスに移動されなる必要があります。

プロジェクト生成

Android Studio

既存に開いたプロジェクトがない場合は、クイックスタート(Quick Start)ウィンドウで、新しいプロジェクトを作成します。下の画面から「Start a new Android Studio project」を選択します。

他のプロジェクトの作業中に新しいプロジェクトを作成する場合は、以下のメニューから作成することができます。

File > New > New Project

項目

説明

1

Application Name

生成するアプリ名を入力します。

2

Company Domain

会社のドメイン名を入力すると、パッケージ名を自動的に生成します。

3

Package Name

入力された会社のドメイン名に基づいてパッケージ名を生成します。

4

Project location

プロジェクトを保存する場所を指定します。

Minimum SDKを設定します。 SDKを変更するたびにアイテムの下にどのように多くのデバイスとの互換性を提供するかについての情報を提供します。

Blank Activityを選択してから追加情報を入力して「Finish」ボタンをクリックすると、新しいプロジェクトが作成されます。

Eclipse

nexacro platformで開発されたアプリケーションを保存するAndroidプロジェクトを作成し、デフォルト環境を設定する必要があります。新しいプロジェクトは、以下のメニューから作成することができます。

File > New > Android Application Project

「Android Application Project」項目が表示されない場合は、ADTプラグインが正常にインストールされていないことです。該当項目をもう一度確認してください。

プロジェクトの設定は、EclipseやAndroid SDK バージョンによって多少異なる場合があります。

項目

説明

1

Application Name

作成するアプリ名を入力します。

2

Project Name

作成するプロジェクト名を入力します。プロジェクト名は、使用しているワークスペース内で固有の名前である必要があります。

3

Package Name

ドメインの形でパッケージ名を入力します。

4

Minimum Required SDK

nexacro platformは、Android2.3(Gingerbread)からサポートします。

アンドロイド4.4(Kitkat)以上のSDKを使用時にMinumum Required SDKを3.2(Honeycomb)以下に設定すると、下位互換性を維持するためにappcompat_v7プロジェクトを自動生成します。

http://developer.android.com/tools/support-library/features.html

ただし、nexacrp platformアプリケーションの作成時には影響を受けないため、プロジェクトを作成しないことをお勧めします。このような現象を回避するにはMinumum Required SDKを4.0(IceCreamSandwich)に設定し、プロジェクトを作成した後、AndroidManifest.xmlの設定時に使用するサブバージョンを再指定することができます。

nexacro platformライブラリ設定

Androidのプロジェクトからnexacro platformに最適化された環境を作成するために追加で提供されるnexacro platformライブラリファイルを設定する必要があります。

libnexacro14.soファイルは、C/ C++言語で開発されたライブラリーを意味します。

Android Studio

まず、プロジェクトウインドウの上部でビューオプションを「Project」に変更します。デフォルト値は「Android」です。

予め提供されたライブラリファイルをプロジェクトフォルダに含まれている libsフォルダにコピーします。nexacro14.jarファイルは、「プロジェクト > app > libs」フォルダの直下にコピーして、libnexacro14.soファイルは、下記を参照して「プロジェクト > app > src > main」フォルダの下にコピーします。生成されたフォルダ構造は以下の図のとおりです。

ファイル

パス

Javaアーカイブ(nexacro14.jar)

[プロジェクトパス]\app\libs\

32ビット共有ライブラリ(libnexacro14.so)

[プロジェクトパス]\app\src\main\jniLibs\armeabi-v7a\

64ビット共有ライブラリ(libnexacro14.so)

[プロジェクトパス]\app\src\main\jniLibs\arm64-v8a\

リソースファイル(icudtl.dat)

[プロジェクトパス]\app\src\main\assets\

assetsフォルダはappを選択し、コンテキストメニューから[New > Folder > Assets Folder]項目を選択して追加します。

Googleのポリシーにより、2019年8月1日以降Google Playで公開するアプリは64ビットアーキテクチャをサポートする必要があります。

https://developer.android.com/distribute/best-practices/develop/64-bit


32ビットアーキテクチャのCPUを使用しているモバイルデバイスでは、64ビット用の共有ライブラリが動作しません。32ビット用と64ビット用の共有ライブラリが両方とも存在する場合には、64ビット用のライブラリを優先します。


64ビットのアプリはAndroid 5.0以上の環境で実行することができます。

ファイルを追加するときに、次の図のようにファイル名とパスを変更できるウィンドウが表示されます。基本設定された値で「OK」ボタンをクリックします。

追加された nexacro platformライブラリをプロジェクトから参照するようにライブラリに追加します。nexacro14.jarファイルを選択し、コンテキストメニューから「Add As Library」項目を選択します。

ライブラリが正常に追加されたことを確認するには、「プロジェクト > app」項目を選択し、コンテキストメニューから「Open Module Settings」項目を選択します。

「Modules > app」項目で上部のタブを「Dependencies」に変更すると、ライブラリが追加されたことを確認することができます。

Eclipse

nexacro platform 14.0.1.3000以降のバージョンからFCMサービス機能が追加され、Eclipseをサポートしなくなりました。Android Studioでのみアプリプロジェクトをビルドすることができます。

Eclipseでは64ビット用のライブラリもサポートしません。

ただし、既存のユーザーのために本章の説明は維持します。

予め提供されたライブラリファイルをプロジェクトフォルダに含まれているlibsフォルダにコピーします。nexacro14.jarファイルは、libsフォルダの直下にコピーし、libnexacro14.soファイルは armeabi-v7aフォルダを新規作成してそこにコピーします。生成されたフォルダ構造は以下の図のとおりです。

追加されたnexacro platformライブラリをプロジェクトから参照するようにJava Build Pathを設定します。下のメニューに移動して、「Add Jars」ボタンを選択し、libsフォルダ内のnexacro14.jarファイルを選択します。

File > Properties > Java Build Path > Libraries > Add JARs

リソース設定

アプリで使用するローディングイメージ、アイコン、メッセージ、レイアウトなどを設定するための手順です。進行するプロジェクトによって変更して適用することができます。

各リソースを設定すると、以下のようなフォルダ構造を持ちます。

イメージ設定

ローディングイメージ、アプリアイコンをresフォルダの下(drawable-mdpiフォルダ)に指定します。適用するイメージファイルは、アプリがサポートする解像度によって設定することができます。詳細は、Androidのマニュアルをご参照ください。

http://developer.android.com/guide/practices/screens_support.html

項目

説明

icon.png

アプリケーションのデスクトップにインストールされるアイコンイメージです。

AndroidManifest.xmlファイルで指定されたファイル名を変更できます。

splashimage_phone_landscape.png

Androidフォンの横方向のスプラッシュイメージです。(すべて小文字)

splashimage_phone_portrait.png

Androidフォンの縦方向のスプラッシュイメージです。(すべて小文字)

splashimage_pad_landscape.png

Androidタブレットの横方向のスプラッシュイメージです。(すべて小文字)

splashimage_pad_portrait.png

Androidタブレットの縦方向のスプラッシュイメージです。(すべて小文字)

ファイル名が「text_select_handle~」で始まるファイルは、テキストの選択時に選択範囲を処理するために使用するイメージです。現在のバージョンでは、該当イメージを直接指定する必要があります。

アイコンファイルは、プロジェクトの作成後に変更できます。

イメージ設定 | Android Studio

「プロジェクト > app」項目を選択した後、コンテキストメニューから「New > Image Asset」項目を選択した後に表示された「Asset Studio」でアイコンファイル関連の設定を変更することができます。

http://developer.android.com/intl/ko/tools/help/image-asset-studio.html

イメージ設定 | Eclipse

プロジェクトを選択した後、コンテキストメニューから「New > Other」項目を選択した後に表示されたウィザードウィンドウで「android icon set」で検索して、「Android Icon Set」項目を選択します。

「Configure Icon Set」項目で、アイコンファイル関連の設定を変更することができます。

メッセージ設定

アプリの実行時に使用するメッセージを設定します。プロジェクトの作成時に作成されたresフォルダの下にvaluesフォルダのstrings.xmlファイルを以下のように変更します。

$r_title(strings.xml)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Nexacro 14</string>
	<string name="action_settings">Settings</string>
    
    <!-- Clipboard -->
    <string name="copy">Copy</string>
    <string name="paste">Paste</string>
    <string name="cut">Cut</string>
    <string name="close">Close</string>
    <string name="selectall">Select All</string>
    <string name="selectword">Select Word</string>
 
    <string name="needupdate">It is need to update. \r\nAfter completing, Please restart.</string>
    <string name="loadingFail">First loading is fail. \r\nPlease restart.</string>
    <string name="updateFail">Update is fail. \r\nPlease restart.</string>
    <string name="notexist">Start file is NOT exist. \r\nPlease restart.</string>
    <string name="BeingUpdated">Being updated.</string>
    <string name="wantreplace">There is a file of the save name. Do you want to replace? </string>
    <string name="ok">OK</string>
    <string name="cancel">Cancel</string>
    <string name="move">Move</string>
    <string name="upper">Upper</string>
    <string name="filter">Filter</string>
    <string name="home">Home</string>
    <string name="nofilename">No File Name.</string>     
	<string name="checkforupdates">Check for updates.</string>   
	<string name="installforupdates">Install for updates.</string>  
	<string name="downloadingforupdates">Downloading for updates.</string>    
	<string name="force_close">Update is Completed.</string> 
	<string name="LoadingPleaseWait">Loading&#8230; \r\nPlease Wait&#8230;</string> 
	
    <!-- Accessibility widget role -->
    <string name="alert">alert</string>
    <string name="pushbutton">pushbutton</string>
    <string name="combobox">combobox</string>
    <string name="checkbutton">checkbutton</string>
    <string name="radiobutton">radiobutton</string>
    <string name="text">text</string>
    <string name="list">list</string>
    <string name="listitem">listitem</string>
    <string name="statictext"></string>
    <string name="graphic">image</string>
    <string name="spacebar">space bar</string>
    <string name="textdeleted">deleted</string>
    
    <!-- Accessibility widget statue -->
    <string name="checked">checked</string>
    <string name="unchecked">unchecked</string>
    
    <!-- Accessibility reaction -->
    <string name="click">click</string>
    
    <!-- Splash message  -->
    <string name="start_initialize">Start Initialize</string> 
    <string name="check_license">Check License</string>
    <string name="load_frameworkmodule">Load Framework Module</string>
    <string name="load_extendmodule">Load Extend Module</string>
    <string name="execute_frameworkscript">Execute Framework Script</string>
    <string name="load_application">Load Application</string>
    <string name="load_failapplication">Load Fail Application Initialize. Click And Close</string>
    
</resources>

英語メッセージのほか、日本語メッセージを追加するには、resフォルダの下にvalues-jaのようなフォルダを追加し、その中にstrings.xmlファイルを追加します。

app_name項目は、実際のデバイスにインストールされるアイコン名を定義しています。該当項目を変更すると、画面に表示されるアイコン名を変更できます。

bool.xmlファイルを追加します。

$r_title(bool.xml)

<?xml version="1.0" encoding="UTF-8"?>
<resources>
	<bool name="is_jellybean_or_higher">false</bool>
</resources>

レイアウト設定

アプリが端末に表示されるレイアウトを指定します。 nexacro platformアプリケーションを包むための用途であるため、デフォルト状態に設定します。

resフォルダの下にあるlayoutフォルダにnexacro_app.xmlファイルを新規作成して追加します。

$r_title(nexacro_app.xml)

<?xml version="1.0" encoding="utf-8"?>
<!-- nexacro_app.xml -->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nexacro_activity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    tools:context=".deviceAPI.FileDialogActivity" >

    <com.nexacro.view.NexacroLayout
        android:id="@+id/nexacro_layout"
        android:background="@android:color/transparent"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.nexacro.view.NexacroLayout>

</FrameLayout>

ビルド環境設定

Androidプロジェクトを作成し、デフォルトで作られたMainActivity.javaファイルとAndroidManifest.xmlファイルをnexacro platform環境に合わせて変更します。

MainActivity.java

プロジェクト作成時にアクティビティ名を指定してくれますが、別に変更しない限りは、MainActivity.javaという名前で生成されます。srcフォルダの下に指定したパッケージ名の下にあるMainActivity.javaファイルを選択し、以下のように変更します。

以下の内容の中で太字で表示されたsetBootstrapURLに含まれたパラメータは、nexacro studioで作成したstart_android.jsonファイルが配置されたサーバーURLを指定し、setProjectURLメソッドに含まれたパラメータは該当パスを「/」まで指定します。

$r_title(MainActivity.java)

package com.tobesoft.sampleproject;

import com.nexacro.NexacroUpdatorActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends NexacroUpdatorActivity {

	public MainActivity() {
		super();
		setBootstrapURL("http://172.10.10.10:8080/nexacro/start_android.json");
		setProjectURL("http://172.10.10.10:8080/nexacro/");		
	}

	@Override 
	protected void onCreate(Bundle savedInstanceState) {
		Intent intent = getIntent();
		if(intent != null) {
			String bootstrapURL = intent.getStringExtra("bootstrapURL");
			String projectUrl = intent.getStringExtra("projectUrl");
			if(bootstrapURL != null) {
				setBootstrapURL(bootstrapURL);
				setProjectURL(projectUrl);
			} 
		}
		
		super.onCreate(savedInstanceState);		
	}
	
	@Override
	public void setContentView(View view) {
		super.setContentView(view);
	}
}

プロジェクトのアーカイブファイルを作成せずに直接Webサーバーにアクセスする場合は、次のようにxadl.jsファイルを指定したsetStartupURLメソッドを追加します。この時、start_android.jsonファイルには、engine項目のみ設定します。

super();
setBootstrapURL("http://172.10.10.10:8080/nexacro/start_android.json");
setStartupURL("http://172.10.10.10:8080/nexacro/HBDeviceTest/HBDeviceTest.xadl.js");

AndroidManifest.xml

AndroidManifest.xmlファイルは、プロジェクトのルートに位置し、アプリケーションの基本的な情報と、実行時に必要な権限についての情報を含んでいます。基本的に必要な情報を以下のコードを参考にして作成します。以下の内容の中で太字で示した package、MainActivityの情報は、プロジェクトの設定によって指定する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="com.tobesoft.sampleproject"
	android:installLocation="auto"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="19" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
   
<!-- asset/archive機能を使用する場合は、削除することができます。そうでない場合は、削除することができません。 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
  
    <application
        android:allowBackup="true"
        android:hasCode="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name="com.tobesoft.sampleproject.MainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@android:style/Theme.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.nexacro.NexacroActivity"
            android:alwaysRetainTaskState="true"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.NoTitleBar"
            android:windowSoftInputMode="adjustResize" >
        </activity>
     
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="google_play_services_version" />
    </application>
</manifest>

targetsdkバージョンを28以上に指定した場合にHTTP通信を維持するためには、usesCleartextTraffic属性値を「true」に指定する必要があります。

未設定にした場合はデフォルト値が「false」として適用され、HTTP通信が許可されません。

詳細については、下記のページをご参照ください。

https://developer.android.com/guide/topics/manifest/application-element#usesCleartextTraffic


<application

android:allowBackup="true"

android:usesCleartextTraffic="true"

配布するアプリの機能によって、必要な権限とその他の情報を追加で指定します。例えば、カメラ機能を使用する場合は、次のような項目が追加される必要があります。

...
<uses-permission android:name="android.permission.CAMERA" />
<activity android:name="com.nexacro.deviceAPI.CameraListener"
	android:screenOrientation="landscape">
	<intent-filter>
   		<category android:name="android.intent.category.LAUNCHER" />
	</intent-filter>
</activity>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus"
	android:required="false"/>
...

機能による情報の設定時に追加できる項目は以下の通りです。必要な項目のみをコピーして AndroidManifest.xmlファイルに追加します。

DeviceAPI

<!-- AudioPlayer, AudioRecorder -->
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

<!-- Camera -->
<uses-permission android:name="android.permission.CAMERA" /> 
<activity android:name="com.nexacro.deviceAPI.CameraListener" android:screenOrientation="landscape">
	<intent-filter>
    	<category android:name="android.intent.category.LAUNCHER" />
	</intent-filter>
</activity>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>

<!-- Contact -->
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" />    

<!-- ExternalAPI -->
<uses-permission android:name="android.permission.GET_TASKS" />

<!-- Geolocation, Map -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 

<!-- Map -->
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-library android:name="com.google.android.maps" /> 
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="user value" />

<!-- SMS -->
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.WRITE_SMS" />

<receiver android:name="com.nexacro.deviceAPI.SmsRecv">
	<intent-filter>
		<action android:name="android.provider.Telephony.SMS_RECEIVED" />
	</intent-filter>
	<intent-filter>
		<action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
		<data android:mimeType="application/vnd.wap.mms-message" />
	</intent-filter>
</receiver>"

<!-- Vibrator -->
<uses-permission android:name="android.permission.VIBRATE" />

<!-- FileDialog -->
<activity android:name="com.nexacro.deviceAPI.FileDialogActivity" android:screenOrientation="sensor">
	<intent-filter>
		<category android:name="android.intent.category.LAUNCHER" />
	</intent-filter>
</activity>

グーグルマップを使用するためにはAPI KEY値を受け取って入力する必要があります。

詳しくは、以下のリンクを参照してください。

https://developers.google.com/maps/documentation/android/start#obtain_a_google_maps_api_key

GlobalAPI

<!-- アカウント -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />

<!-- 電話番号 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<!-- 電話をかける -->
<uses-permission android:name="android.permission.CALL_PHONE" /> 

<!-- デバイス名 -->
<uses-permission android:name="android.permission.BLUETOOTH"/>

asset/archive機能

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

cache機能

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />

Notification機能(14.0.1.3000以降のバージョン)

14.0.1.3000以降のバージョンでは、Firebase Cloud Messaging(FCM)サービスを使用します。

About FCM messages

https://firebase.google.com/docs/cloud-messaging/concept-options

FCMサービスはAndroid4.0(API14)以降で使用することができます。該当バージョンより古いバージョンのOSではFCMサービスが正常に動作しない場合があります。

<!-- Adding NexacroNotificationService -->
<service android:name="com.nexacro.notification.NexacroNotificationService">
	<intent-filter>
		<action android:name="com.google.firebase.MESSAGING_EVENT" />
	</intent-filter>
</service>

<!-- Adding NexacroActivity intent-filter -->
<activity android:name="com.nexacro.NexacroActivity"
	android:launchMode="singleTask"
	android:noHistory="false"
	android:hardwareAccelerated="true"
	android:windowSoftInputMode="adjustResize"
	android:configChanges="orientation|keyboard|keyboardHidden|screenSize|navigation|uiMode">
	<intent-filter>
		<action android:name="OPEN_NEXACRO_ACTIVITY_EXAMPLE" />
		<category android:name="android.intent.category.DEFAULT" />
	</intent-filter>
</activity>

FCMサービスを利用する場合には、build.gradle設定にて下記の項目を追加する必要があります。Android Studioで自動的に設定されない場合は手動で追加し、Firebaseコンソールで生成したgoogle-services.jsonファイルをモジュールのパスにコピーします。

AndroidプロジェクトにFirebase追加

https://firebase.google.com/docs/android/setup

buildscript {
	// Adding repositories 
	repositories {
		google()  
		jcenter()
	}
	dependencies {
		classpath 'com.android.tools.build:gradle:3.2.1'
		// NOTE: Do not place your application dependencies here; they belong
		// in the individual module build.gradle files
		// Adding google service
		classpath 'com.google.gms:google-services:4.0.1'
	}
}

allprojects {
	// Adding repositories 
	repositories {
		google()
		jcenter()
	}
}

task clean(type: Delete) {
	delete rootProject.buildDir
}

dependencies {
	implementation fileTree(include: ['*.jar'], dir: 'libs')
	implementation 'com.android.support:appcompat-v7:27.1.1'
	implementation 'com.android.support:support-v4:27.1.1'
	implementation 'com.google.android.gms:play-services-maps:16.0.0'
	implementation 'com.google.android.gms:play-services-location:16.0.0'
	implementation 'com.google.firebase:firebase-core:16.0.6'
	implementation 'com.google.firebase:firebase-messaging:17.3.4'
	implementation files('libs/nexacro14.jar')
}
apply plugin: 'com.google.gms.google-services'

Notification機能(14.0.1.2802以前のバージョン)

14.0.1.2802以前のバージョンでは、下記のように使用します。

<!-- Notification -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<receiver
	android:name="com.nexacro.notification.NexacroNotificationReceiver"
	android:permission="com.google.android.c2dm.permission.SEND" >
	<intent-filter>
		<action android:name="com.google.android.c2dm.intent.RECEIVE" />
		<category android:name="com.nexacro" />
	</intent-filter>
	<intent-filter>
		<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
		<category android:name="com.nexacro" />
	</intent-filter> 
</receiver>
<service android:name="com.nexacro.notification.NexacroNotificationService" />

ビルド

アプリテスト

  1. Android端末をPCにUSBで接続してすぐにテストすることができます。端末を直接接続する場合には、端末のアプリケーション開発オプションの[アプリケーション > 開発 > USBデバッグ]項目を設定し、端末に合ったドライバをインストールする必要があります。

  1. Android Studioまたは EclipseでRunメニューを実行します。Runメニューは、APKを作成し、端末にインストールして実行まで行うことができる機能です。実行する前に、どの端末で実行するかを選択します。

Run > Run

ネクサス・ワン(Nexus One)またはオプティマス・ワン(Optimus One)のような場合は、内蔵メモリーにユーザーが書き込み可能な容量がなくて外部メモリカードを追加していない場合、アプリケーションが正常にインストールされません。

Androidの仮想デバイスを用いたテストは、サポートしていません。

Android Studio

Eclipse

インストールファイル作成

完成したアプリを配布するには、アプリを認識することができるkeystoreを作成し、署名されたAPKファイルを作成する必要があります。keystoreファイルは、最初の1回作成し、その後アプリが更新されたときは、最初に作成されたkeystoreファイルを使用します。

keystoreとSigned APKを生成する方法は、GoogleのWebページを参照してください。

http://developer.android.com/guide/publishing/app-signing.html

Android Studio

上部メニューから「Build > Generate Signed APK」項目を選択します。

Eclipse

プロジェクトを選択し、コンテキストメニューから[Android Tools > Export Signed Application Package]を選択します。