× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
参考ページ build.gradleへの記述でビルドを分けられる。 Build Types debug,releaseなどを指定できる 書き方例。上記ページから引用
Product Flavors ビルドレベルではなく、機能の違いなどを指定できる 書き方例。上記ページから引用
C++のようにマクロはないので、ソースの切り替えは2種類用意する。 app/src/flavor1/ app/src/flavor2/ のように、build.gradle に書いたflavor名のディレクトリ以下に配置したら、それが使用されるということらしい。(まだ試していない) Build TypesとProduct Flavorを合わせて Build Variants という。 どのBuild Variantsでビルドするかは、以下の場所で指定する。 結構気づきにくい PR |
Android公式ドキュメント
Proguard公式ドキュメント2 ProGuardがやること ・不要なコードの削除 ・変数名、クラス名を変更して、難読化する ・リリースモードでのみ動作 ・特に何もせずとも処理されるようになっている ・build.gradleに設定記述あり
minifyEnabled を true にすると、ProGuardが実行される proguardFiles getDefaultProguardFile('proguard-android.txt'), 行は、proguardの詳細設定が描いてあるファイル名を指定。 ANDROID_SDK_ROOT/tools/proguard/ 以下のファイル名を指定する。 proguard-android.txt の他に、最適化を含んだ設定ファイルとして proguard-android-optimize.txt というものも設定できるようだ。 ちなみに2つのファイルの差分は以下だけ proguard-android.txt(最適化なし)
proguard-android-optimize.txt(最適化あり)
多く書いてあるのは、メソッドを削除させないようにする設定。例えば
のようなもの。Javaコード上では使われていないが、xmlから呼び出すために必要なメソッド、のようなことらしい さて、build.gradleの記述に戻る 'proguard-rules.pro' と書いてある行があるが、これはプロジェクトディレクトリ内にあり、 プロジェクト固有の設定を書くファイル。(proはprojectのことのようだ) また、ProGuard処理をすると、 build/outs/mapping.txt というファイルが生成される。 これを使うと、難読化したスタックトレースを元に戻すことができる。 $ cd $ANDROID_SDK_ROOT/tools/proguard $ retrace.bat -verbose mapping.txt obfuscated_trace.txt さて、実際にやってみたところ、エラーが出た 調べると、結局proguard-rules.proに
と書けということになりそう。 詳しいページ これ見ると、JNIだといろいろ設定がいるとのこと。 おそらく、javaコード内から呼び出されることのない、Native_***()系メソッドを全部keep指定する必要があるということだろう。
という感じか?(試していないので合っているかはわからない) 処理にもものすごい時間が掛かる。 しばらくやらなくていいかなという気がしてくる |
|
公式ページ
Qiitaの記事 設定ファイルを作るページ このjsonをapp/以下に配置する xmlは app/src/main/res/xml/app_tracker.xml にある。ここにトラッカーIDなど記述する app/res/xml/ ではないことに注意。 |
|
アプリの外部ストレージにファイルを保存した時とか、
ちゃんとファイルがあるか調べたい時など。 $ adb shell $ run-as パッケージ名 でok. 一応、AndroidStudioで Tools -> Android -> Android Device Monitor というものもあるが、権限がなかったりであまり中が見えないので使いにくい |
実機に転送して、実行しようとした時、以下のエラーが出る
java.lang.UnsatisfiedLinkError: dlopen failed: unknown reloc type 160 調べたところ、スタティックライブラリをc++_staticにしていることが原因らしい。 cocos2d_libとc++_staticの相性の問題のようだ。困ったものだ 参考 デフォでは、gnustl_static を指定しているのだが(cocosプロジェクトが作られた時もそうなっている)、 gnustl_staticは以下のようなメソッドが使えない(コンパイルエラーになる) std::to_string std::stol std::stoul std::stoll std::stoull std::stof std::stod これはndkの怠慢じゃないかと思うのだが、ともかく こちらを立てればあちらが立たずの状態になっている。 仕方ないので、 gnustl_staticを使用し、 std::文字列系の処理を自前で実装することにする。 実装は以下のとおり AndroidHelper.h
AndroidHelper.cpp
|
gitignore参考
|
前の記事のように記述してビルドしたところ、実機で実行時にエラーが発生
Cannot load library: reloc_library[1285]: cannot locate 'rand' 参考 原因は、API-21(Android5.0)でコンパイルしたアプリを、API-20以下の端末で実行したことらしい 謎だ |