基本的にAndroid

Android初心者の備忘録のようなもの. 公開しているソースコードは主にgccでコンパイルされると想定されています.

アプリの途中経過 0x04

前回から3ヶ月ほど立ってしまいました.
大学が冬季休暇になったのでアプリをアップデートしました. 敵艦の項目をなくして(面倒くさいとか言えないな...)リストによって艦娘を選択できるようにしました.
ダウンロード先はこちらです.
KanCollectActive-debug-0.1.1.apk - Google ドライブ

スペックの低いPCでやっているのでAndroid NDKのビルドが時間がかかるため, Android のCPUがARMでなければ動作しないという欠陥を持っています. そのうち, 改善いたします.

f:id:calloc:20141224154146p:plain
f:id:calloc:20141224153807p:plainf:id:calloc:20141224153810p:plain

アプリの途中経過 0x03

今回は, 単純にアイコンを変更をしただけです.
もし, 要望等がありましたらコメント頂ければと思っています.
自分の技術次第では改善をするつもりです.

アイコンはこちらからお借りいたしました.

艦これアイコンまとめ【フリーアイコン】 - Togetterまとめ


これからもよろしくお願いします.
f:id:calloc:20140907224616p:plain

以降も更新を続けることと, 艦娘のボイス(時報等)のアプリも作成していく予定です.
Version 0.0.1(C)
KanCollectActive-debug-version(c).apk - Google ドライブ

注意事項に関してはここと同じです.

アプリの途中経過 0x02 - 基本的にはAndroid

アプリの途中経過 0x02

一応, 完成しました.
はい. メインアクティビティに手こずらされました.

こんな感じとなっております.
f:id:calloc:20140906001142p:plainf:id:calloc:20140906001147p:plainf:id:calloc:20140906001150p:plain

ビューはこんな感じで, 画像リストでは長押しで削除する機能もついております.

ちなみに, Google Playとは違うため, 設定から[提供元不明のアプリ]を承認させてからインストールをしてください.

Android 2.3(IS11PT), Android 4.0.4(IS11S), Android Emulator x86は動作確認済み.
注意事項としては, ファイル操作をしているためストレージを埋め尽くす可能性があります.
エラー処理等はしてありますが, もしもの場合がありますのでご注意ください.
何かがおかしいと思いましたら, アプリを強制終了または端末の電源を強制的に落としてください.
致命的なエラー等は確認できておりませんが, もしエラー等が見つかった場合はお知らせください.
インストールは個人の責任でおねがいします.

それでもよろしい場合は, 下記のリンクからダウンロードできます.
KanCollectActive-debug.apk - Google ドライブ

アプリの途中経過 0x01

アプリの途中経過です.
未だにメインアクティビティのデザインは完成しておりません...
Android端末の画面などの関係で少々手間取っています.

今回は深海棲艦をデバッグモードとして追加しました.
デバッグと言ってもリストに追加されていないコードを入力して実行するものですが.

f:id:calloc:20140830162557p:plain
コード一覧からアイテムをロングクリックして
f:id:calloc:20140830162607p:plain
設定のDebug URLに入れて実行すると
f:id:calloc:20140830162514p:plain
f:id:calloc:20140830162602p:plain
深海棲艦のキャラクターが追加されるというものです.

あとはリスト上に艦娘の名前が表示されるようになったのと, swfファイルのダウンロード等のエラー処理を追加してダウンロードを正確にするようにしました.

メインアクティビティが製作できたらベータ版としてアプリをアップロードしたいと思っています.

zlib for Android

zlib の使い方
ZLIBの使い方は上記のリンクを読めばだいたいわかるであると思う.
サンプルコードも公開されている.

ZLIBはAndroid NDKでコンパイルしなくても使いえるライブラリであり, Javaのファイル操作でも使用が可能.
NDKをビルドするときは下記のものをAndroid.mkに追加する.

LOCAL_LDLIBS:= -llog -lz

今回作成しているアプリでは, 下のコードを使用している.
swfの解凍と, alpha値の解凍.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <zlib.h>
#include <assert.h>

#include <android/log.h>
#include <jni.h>

#define BUFFER_SIZE (4096)

int zlib_inflate(FILE *in, const char *output) {
  z_stream z;
  unsigned char in_buf[BUFFER_SIZE];
  unsigned char out_buf[BUFFER_SIZE];
  int err = 0;
  int flush = Z_NO_FLUSH, ret = 0;
  unsigned long int f_len = 0;
  FILE *out;

  if((out = fopen(output, "w")) == NULL) {
    return EOF;
  }
  
  z.zalloc = Z_NULL;
  z.zfree  = Z_NULL;
  z.opaque = Z_NULL;

  err = inflateInit(&z);
  if(err != Z_OK) {
    perror("inflateInit()");
    return EOF;
  }

  for(;;) {
    z.avail_in = fread(in_buf, sizeof(unsigned char),
        BUFFER_SIZE, in);

    if(z.avail_in == 0) break;
    if(feof(in) != 0)
      flush = Z_STREAM_END;
    z.next_in = in_buf;

    for(;;) {
      z.next_out = out_buf;
      z.avail_out = BUFFER_SIZE;

      ret = inflate(&z, Z_NO_FLUSH);
      assert(ret != Z_STREAM_ERROR);
      switch(ret) {
        case Z_STREAM_ERROR:
        case Z_NEED_DICT:
        case Z_MEM_ERROR:
        case Z_DATA_ERROR:
          break;
      }

      f_len = sizeof(out_buf) - z.avail_out;
      fwrite(out_buf, sizeof(unsigned char), f_len, out);
      if(z.avail_out != 0)
        break;
      if(ret == Z_STREAM_END) break;
    }

    if(ret == Z_STREAM_END) break;
  }
  fclose(out);
  inflateEnd(&z);

  return 1;
}

アプリの途中経過 0x00

アプリとしては, 現在ではNDKによるダウンロード, SWF解析, 画像の抽出および変換が完了しています.
こんな感じで
f:id:calloc:20140826001208p:plainf:id:calloc:20140826001214p:plainf:id:calloc:20140826001217p:plainf:id:calloc:20140826001219p:plainf:id:calloc:20140826001223p:plain

あとはレイアウトとか完成をさせるつもりです.
もちろん, 一括ダウンロードとかの処理はつけませんよ.
NDKのエラー処理とかもしなければ...