0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DXライブラリ+Android Studioでストアアプリを作る方法

Last updated at Posted at 2023-10-16
1 / 2

DXライブラリとは

  • 筆者はイラストに動きをつけるアニメーションソフト 9VAeきゅうべえを C言語で開発している。アンドロイドアプリをつくるのに、DXライブラリを使っている。
  • DXライブラリはもともと、Windows用描画ライブラリだったため、最初の開発環境は、Visual Studio だったが、現在は、Android Studio もサポートされている。
  • Androidストアが、2021年8月から、APKファイルでの新規アプリ登録を認めなくなるため、今後は、Android Studio で作成しなければならない。
  • ここは、Visual Studio プロジェクトから、Android Studio に移行したときの記録です。こちらのほうが新しい記事です

DXライブラリのよいところ

  • 膨大な C 言語の資産がそのまま使える。
  • 現在もサポートされており、日本語で質問に答えてくれる。入手先はこちら。
  • 同種のライブラリに、Cocos2dX があるが、ビルドに大幅な時間がかかり、さらに、Android Studio のバージョン違いにより、結局ビルドできなかった。

Visual Studio からの移行

gradle にソースを追加

  • DXライブラリに付属の AndroidStudio サンプルをビルドし、実機デバッグできるように開発環境をととのえる。AndroidStudioを実行してサンプルプロジェクトをインポートすると、自動的にいろいろ設定してくれる。
  • gradle の構造が複雑で最初はわかりにくい。
  • プロジェクトに自分のファイルを追加するには、app/src/main/cpp/CMakeLists.txt にソースの相対パス(CMakeLists.txtからの)を記述する。gradle がこの情報をもとに依存関係を調べて、makefileを自動作成してくれるようだ。
  • ちなみに、サンプルの「プロジェクトに追加すべきファイル_android用」フォルダを「dxlib」という名前に変更したときは、ここを以下のように、include_directories と link_directories を書き換える。
app/src/main/cpp/CMakeLists.txtの一部
include_directories( ../../../dxlib/${ANDROID_ABI} )
link_directories( ../../../dxlib/${ANDROID_ABI} )

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             native-lib.cpp
             ここに自分のソースファイルを相対パスで追加する
)

コンパイルオプションの設定

  • C のコンパイルができなかった。
  • DXライブラリのインクルードファイルはC++の文法で記述されている。デフォルト値の記述、同じ関数名で引数の違うものが存在など。
  • VisualStudioでは、これを、C にインクルードしてもエラーがでなかったが、Android Studio ではエラーがでる。これは、app/build.gradle の中の cppFlags にコンパイルオプション"-std=c++11"を追加すればエラーが出なくなった。また、#ifdef TEST を有効にするには、以下のように、arguments をつけるとよいらしい。
app/build.gradleの一部
    externalNativeBuild {
       cmake {
          cppFlags "-std=c++11"
          arguments "-DTEST"
       }
    }

アイコンの作成

app/src/main/AndroidManifest.xmlの一部
   <application
        ...
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher"
        ...

Android 11 対応

  • ファイルアクセス権限の取得

  • 上の private boolean checkPermission() 関数、private void requestPermission() 関数を、最初に起動する Java(JNI) の中にいれ、権限がなければ取得するようにする。このコードは、SDK が API30(Android 11)でないとビルドできない。

app/build.gradleの一部
android {
    compileSdkVersion 30

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 30
    }

API21 からサポートするには

以下のオプションが必要

app/build.gradleの一部
android {
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }

WebViewAssetLoader を使うには

以下の追加が必要

app/build.gradleの一部
dependencies {
    implementation 'androidx.webkit:webkit:1.2.0'
}

これを追加すれば、以下の importが使える

import androidx.webkit.WebViewAssetLoader;
  • gradle.build の compileSdkVersion 30 で未定義ビルドエラーが出た場合、importに適切なモジュールが記載されていないのが原因。未定義エラーが出た文字列の先頭にカーソルを移動させれば、どのモジュールの定義か候補が出るので、それらしいものを吹き出しから選択。するとimport追加するか吹き出しが出るので、import追加する。ファイルの先頭のimportを開かなくても修正できた。すばらしい!

KeyStore の付け方

これで、app/release フォルダに、app-release.aab というAppBundleができた。

Androidストアへの登録

Gooogle Play Console

「アプリを作成」ボタン

  • 「アプリを作成」ボタンをクリック
  • アプリ名:9VALきゅうべえラーニング
  • デフォルトの言語:日本語
  • アプリ/ゲーム:アプリ
  • 無料/有料:無料
  • 「アプリを作成」ボタンをクリック

今すぐテストを開始

  • テスターを選択する:自分を登録
  • 新しいリリースを作成
  • 内部テスト版リリースの作成
  • Play App Signing
  • Android Studio で release 署名した aab ファイルをアップロード

「「android.permission.MANAGE_EXTERNAL_STORAGE」権限をリクエストしていますが、Google Play ではまだサポートされていません。」というエラーになった。

「android.permission.MANAGE_EXTERNAL_STORAGE」権限

9VAeの場合、動画作成のため数千の連番画像を保管する場所を、自分のフォルダに作成したい。ひとまず API29 に下げてアップロードしてみる。

Chromebook での動作

  • Androidスマホで動作していたアプリが、Chromebook だとファイル読み書きができなくなった。AndroidStudio で開発すると、読み書きできるみたいだ(ラーニング)
  • target は、API21-29 として、API29でビルドすると、Androidでは保存できるが、Chromebookでは保存できなかった。以下のどれが効いているのかわからないが、次の設定にすると保存できている
  • ターゲットは、API21-29、ビルドは API30 にする
  • インターネットアクセス権限を追加
  • ファイルアクセスは、legacy、ターゲットを29にしておく。

jcenter の廃止

  • AndroidStudioから、jcenter が使えなくなるのではずすよういわれた。 jcenter を mavenCentral()に変更するとよいみたい。
buildscript {
    repositories {
        google()
        //jcenter() <--削除
        mavenCentral() //<--こちらに変更
    }
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?