ラベル Andoid Test の投稿を表示しています。 すべての投稿を表示
ラベル Andoid Test の投稿を表示しています。 すべての投稿を表示

2016年10月13日木曜日

【cocos2-dx Android】学習中につまづいた箇所

  • 公開日:2016年10月13日
  • 最終更新日:2016年10月15日

記事概要

cocos2d-xの学習中に発生したエラーと解決方法のまとめです。
忘備録的なメモですが、なにかの役に立てばと思いUPします。

使用している本(以下、教材)は

です。

環境

  • Android Studio 2.2.0
  • OS X El Capitan
  • android sdk 24
  • cocos2d-x 3.13.1

エラー

アプリ作成後、起動するとjava.lang.UnsatisfiedLinkErrorエラーが発生しました。
エラーの発生した手順は以下の通り。

  • cocos new コマンドでcocosプロジェクトを作成
  • Android studioでビルド
  • アプリを起動
  • エラー発生

エラー詳細は以下の通りです。

terminal
/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.sample.SampleGame, PID: 6777
  java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.sample.SampleGame-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libMyGame.so"
  at java.lang.Runtime.loadLibrary(Runtime.java:366)
  at java.lang.System.loadLibrary(System.java:989)
  at org.cocos2dx.lib.Cocos2dxActivity.onLoadNativeLibraries(Cocos2dxActivity.java:248)
  at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:264)
  at android.app.Activity.performCreate(Activity.java:6289)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)
  at android.app.ActivityThread.access$900(ActivityThread.java:177)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:145)
  at android.app.ActivityThread.main(ActivityThread.java:5951)
  at java.lang.reflect.Method.invoke(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

libMyGame.soがないと怒られています。

解決方法

最初のビルドはcocosコマンドで実行します。

terminal

// プロジェクトフォルダに移動
cd {プロジェクトルート}

// ビルド
cocos run -s  {プロジェクトルート} -p android --android-studio

# ビルドオプション内容
# -s : プロジェクトのベースディレクトリ
# -p : ビルドするプラットフォーム、ios, android, mac, web, win32, linux

上記でビルドすると、

terminal

The directory 'android-13' can't be found in ANDROID_SDK_ROOT/platforms, please use --ap to set needed API level

が発生しました。
対策として、SDK ManagerでAndroid3.2をダウンロードし、build.gradleのminSdkVersionを10から16に変更しました。

変更後はビルドに成功してアプリが立ちあがりました。

まとめ

仕事上の理由で利用することになったcocosですが、結構使い易い印象です。
Unitiyに押され気味ですが、頑張って欲しいです。

以上です

注意

学習中なので、非効率な点があるかもしれませんが、ご容赦ください。 後で見直すので、気がついたら随時修正します。

学習本

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年10月4日日曜日

Android開発 update Espresso on Android 6.0 Marshmallow (android sdk 23)

  • 公開日:2015年10月04日

記事概要


AndroidのテストフレームワークEspressoをAndroid 6.0 Marshmallow (android sdk 23)に対応させた記事です。

環境


  • Android Studio 1.3.0
  • OS X Yosemite
  • android sdk 23(Android 6.0 Marshmallow(マシュマロ))
  • Espresso1.1 → Espresso2.2.1

はじめに


Android 6.0 Marshmallow (android sdk 23)がリリースされました。
私の開発しているアプリで古いEspressoを利用しているアプリがあったので、この機会にupdateしました。

Espressoの更新


まずはgradleの設定から変更します。

以前

androidTestCompile files('libs/espresso-1.1-bundled.jar')

改修後

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'

続けてtestInstrumentationRunnerも変更します。

以前

testInstrumentationRunner 'com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner'

改修後

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

android studioの設定も同じように変更しておきましょう。

gradleでテスト実行


では、gradleでテストを実行します
android端末をgradleを実行するPCにUSBで接続します。


cd {プロジェクトフォルダ}
// テスト実行
./gradlew connectedAndroidTest

Test配下に記述したテストコードが実行されます。
エラーが出た場合はコードを書き換えます。私の場合は、以下の様な対応をしました。


import com.google.android.apps.common.testing.ui.espresso.Espresso;

↓

削除

ui系のテストは利用していませんが、どこかに残っていたみたいです。気を取りなおして、テストを再実行。


cd {プロジェクトフォルダ}
// テスト実行
./gradlew connectedAndroidTest

うまく実行できれば、テスト結果は{プロジェクトフォルダ}build/outputs/reports/androidTests/connected/index.htmlに出力されています。

うまくいきました。
様々なアノテーションも利用可能になっているので、今後リファクタリングしていこうと思います。

まとめ


現在androidのテストツールには、

  • Espresso
  • AndroidJUnitRunner
  • JUnit4 Rules
  • EUI Automator

が用意されています。

個人的にはEspressoがオススメだと思いますが、みなさんはどうでしょうか。

技術的な負債はまめに返してきましょう。放置し過ぎると、変更不可能となります。
もちろんそれはアプリのコードだけでなく、テストコードにも当てはまります。

以上

Androidアプリ開発にオススメの本


開発にあると便利なオススメ製品


関連記事 参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年9月20日日曜日

Androidアプリ開発の準備をテンプレート化した - その5 開発ビルドと本番ビルドの設定 環境ごとにパッケージを切り替える -

  • 公開日:2015年09月20日

記事概要


androidのアプリ開発をする前の準備の手順をまとめました。その4の続きです。

環境


  • Android Studio1.3.0
  • OS X Yosemite

はじめに


続いてアプリのパッケージ設定を行います。
作成するアプリによって、【開発】【ステージング】【本番】等の複数の環境を用意する必要があると思います。
その場合、パッケージが同一だと実機にインストールするだけでも一苦労です。
なので、gradleでパッケージをわけておく設定をします。
そうすることで、同一機種に色々な環境のアプリをインストールできてテスト効率をあげることができます。

buildTypes


buildTypesはビルドの種類を設定できます。デフォルトでは、debugとreleaseが自動的に設定されています。
一般的にはdebugは証明書なしでapkを作り、releaseは署名ありでapkを作成します。


    buildTypes {
        debug {
           
        }
        release {
           
        }
    }

パッケージ名を分ける

上記にも記載したように、開発(debug)と本番(release)を同じパッケージにするのはやめましょう。そうしないと、開発と本番の切換えで、デバッグ時に大変な思いをすることになります。


    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
        release {
        }
    }

applicationIdSuffix属性を設定することで、パッケージ名に接尾辞を付けることができます。
上記は、デバッグ時のapkのパッケージ名に接尾辞を付けて、デバッグ用apkをインストール時に本番リリース用のパッケージに上書きしないようにしています。

バージョン名を設定する

開発(debug)にはバージョン名も設定しておきましょう。アップデート前とアップデート後ではテストが必要になります。この設定により、以前と以後のapkを同一端末に入れることができるので、テストの実行が楽になります。日付用の関数を用意して利用するのも良い考えだと思います。


    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "1"
        }
        release {
        }
    }

デバッグの有無を設定する


    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "1"
            debuggable true
        }
        release {
            debuggable false
        }
    }

開発(debug)はdebuggable true。つまり、デバッグを許可します。本番(release)は、debuggable false。つまり、デバッグはしません。

zipAlignEnabledを設定する

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "1"
            debuggable true
            zipAlignEnabled true
        }
        release {
            debuggable false
            zipAlignEnabled true
        }
    }

zipAlignEnabled true。つまり、zip化します。この設定をtrueにしないと証明書付きのapkが作成されないので注意してください。

minifyEnabledを設定する

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "1"
            debuggable true
            zipAlignEnabled false
            minifyEnabled false
        }
        release {
            debuggable false
            zipAlignEnabled true
            minifyEnabled false
        }
    }

minifyEnabled false。つまり、minifyしません。これはどちらでも構わないと思います(違いがよくわかりません)

apkファイルを出力


コマンドプロンプトを開いてコマンドを叩きます。


// プロジェクトフォルダに移動
cd {プロジェクトフォルダ}

// gradleを実行
./gradlew clean build

apkファイルが出力されたことを確認します。出力場所は、{プロジェクトフォルダ}/app/build/outputs/apkです。
上記で作成したアプリをインストールしてみましょう。
アプリは、私が開発している【マウンテンチャンネル】を利用します。

上記のアプリはversion1.2.0なのですが、versionNameSuffix 1を設定しているので【1.2.01】となっています。
パッケージ名も.debugが追加されています。

まとめ


さて、5回に渡って記述してきた【Androidアプリ開発の準備のテンプレート化】ですが、これで終了です。
他にもやっておいたほうがよいことはあるのですが、キリがないのでこれで一旦終了します。

私がandroidの開発を始めたのはandroid1.5で、1.6のxperiaが初めてのandroid端末の購入でした。
わずか4年ほどですが、色々変わりましたし、これからも変わっていくでしょう。
と、同時に多くのことが理解できてきました。
やはり、長く続けることは重要です。

そういったことも、これからブログを通して発信していきたいと思うので、よろしくお願いします。

でわ。

Androidアプリ開発用にもっておきたい端末


関連記事 参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年9月8日火曜日

Android Studio UnitTestの実装と実行

  • 公開日:2015年09月08日

記事概要


Android StudioでのUnitTestの実装方法と実行方法を記載した記事です

環境


  • Android Studio 1.3.0
  • OS X Yosemite
  • android sdk 23(Android 6.0 Marshmallow(マシュマロ))

gradleの設定


まずはUnitTestを利用できるようにgradleの設定を行ないます。
android sdkは23.0(Android 6.0 Marshmallow(マシュマロ))を利用します。


apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'com.android.support:cardview-v7:23.0.0'
    compile 'com.android.support:support-v4:23.0.0'
    compile 'com.android.support:recyclerview-v7:23.0.0'
    compile 'com.android.support:design:23.0.0'
    compile 'com.google.android.gms:play-services:7.8.0'
    androidTestCompile 'com.android.support:support-annotations:23.0.0'
    androidTestCompile 'com.android.support.test:runner:0.3'
    androidTestCompile 'com.android.support.test:rules:0.3'
}

gradleファイルにはtestInstrumentationRunnerとandroidTestCompileの3行を記述します。

テストコードの実装


続いてテストコードを実装します。
テストの粒度は難しい問題ですが、共通メソッドやモデル(ヘルパー)の複雑度の高い部分を実装するのがコスト的によいと思います。


public class SampleHelperTest extends ActivityInstrumentationTestCase2<SampleActivity> {

    private SampleActivity mSampleActivity;

    public SampleHelperTest() {
        super(SampleActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();

        // Starts the activity under test using the default Intent with:
        // action = {@link Intent#ACTION_MAIN}
        // flags = {@link Intent#FLAG_ACTIVITY_NEW_TASK}
        // All other fields are null or empty.
        mSampleActivity = getActivity();

    }

    /**
     * testデータを登録
     */
    @Test
    public void testInsert() {
        ContentValues contentValues = new ContentValues();
        contentValues.put(Test.TestsColumns.TEST_ID, 1);
        contentValues.put(Test.TestsColumns.TEST_DATA, "test");
        contentValues.put(Test.TestsColumns.TEST_CREATED_AT, System.currentTimeMillis());
        contentValues.put(Test.TestsColumns.TEST_UPDATED_AT, System.currentTimeMillis());

        Context context = new RenamingDelegatingContext(mSampleActivity.getApplicationContext(), "test_");

        // データ登録
        long result = SampleHelper.insert(context, contentValues);
        assertEquals(1, result);
        // データ削除
        SampleHelper.deleteaAll(context);

    }

}

上記のサンプルはActivityInstrumentationTestCase2を継承し、モデルのテストメソッドの実装を行っています。
DBは本番と異なるファイルを使うために、RenamingDelegatingContextを利用しています。

これでソースコードの準備は完了です。続いてAndroid Studioの設定を行ないます。

Android Studioの設定


メニューのEdit Configurations ...を選択してConfigurations画面を開きます。

左上のプラスボタンを押下します。

Android Testsを選択します。

Nameを入力しModuleを選択してOKボタンを押します。

メニューの上記に入力したNameを押下してUnitTestを実行します。

緑(赤)のバーが表示されれば成功です。

まとめ


Eclipseに比べ、Android Studioはテストを実行しやすくなっています。
jenkinsを利用している場合は、gradleを使って直接コマンドを叩くと良いでしょう。
コマンドはAndroid Studioのコンソールに出力されるので、そのコマンドをjenkinsのシェルで呼びだしましょう。

以上

Androidアプリ開発にオススメの本


開発にあると便利なオススメ製品


関連記事 参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...