AndroidStudio 2.2.0-RC2 以降のsdk周りの更新状況のメモ(and genymotion 2.8.0)

ちょこちょこと気づいて調べた覚書メモ

随時追記予定


support-v4系のライブラリに関して

compile "com.android.support:support-v4:24.2.+"

aarの中身を割って中身を調べてみたら、

  • 実体なし
  • :support-compat:24.2.+ 側に実体が移動*1*2
    • goole-play-services みたいに dependency-library 記述のみあり

という状態でした。

だから AS2.2-RC の勝手に補完機能で support-compat を自動補完しようとするわけですね・・(汗

今のところは、面倒なので 24.1.+ 使っていれば問題無さそうです

ResourcesCompat と ContextCompat

CompileSdkVersionを22とか上げていると、大量のワーニング/エラーが出て起き直すわけですが

QittaとかでもResourcesCompatに置き換えなさいと出ててきます。

Drawable drawable = getResources().getDrawable(R.drawable.hoge);

=>

Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.hoge, getTheme());

ただ、ContextCompatでも同じことが出来るんですよね。。*3

で何でこちらのほうが良いと言われるかというと、下記の対応をしてTheme切り替えができるようにするためらしいです*4

qiita.com

Google APIs:24 のリリース

Google APIs:23 もそうなんだけど

  • runtimePermission対象外(target-22でビルドしたのと同じ扱いでデフォルトONになる)
  • apiのみ新APIになる*5

まあ、何でこの対応がいまだに残っているかというと

  • v1のOverlayは継承できていて、色々と作り込みができていた
    • v2のMarker/MarkerOption はfinalクラス
    • google-map-cluster はまた全く別の作りになる*6

で移植が厳しいアプリが多いからだと思われます。

でもまあ、

<uses-library android:name="com.google.android.maps">
</uses-library>

の宣言ってv1では必須ですが、

  • GoogleAnalitics or FirebaseAnalitics
  • Admob

あたりを起きなおそうとした時点で「上記の記述は使えません」とエラーになるので*7

茨の道をあゆむことにはなるんだよな・・とか思いつつ

genymotion 2.8.0 Nugatサポート

なぜ標準のエミュレータ使わないかというと

  • GoogleMapがGappsサポートのimageでも未だにまともに表示できないから。
    • 一応その時点での最新Gappsは同梱されているので、新しくリリースされたらつく直してねとの方針らしい
    • でも位置情報の設定がなぜかまともに入力できないし、数値のみ
      • 確認できるのはgappsでエラーが出るか否か程度。
    • genymotionのGPSだと地名から検索とか出来るのに。。。

でもarm版使うなら、いつもどおりの激遅エミュに逆戻りなので結局現状は変わらないんだよな。。と

操作感は上記と全く同じわけで、全然作り込まれてないよなーと思いつつ。

たぶんG様は使ってないんでしょう。GoogleCloudLabsとか精々クラウド経由を含めた実機でテストしてそうですし・・

9/16 追記 imageの再評価

  • 2.8.0のimageで作り直してみる。
OS 評価
2.3.7 OSの強制再起動がなくなった
6.0.0 相変わらず駄目*8
7.0.0 6.0用のGappsで一見成功したように見えるが。。

7.0.0 のimageはpreviewなので、Cameraエミュレーションは未対応。

ココらへんの状況を見るに

  • 2.3.7のimageは更新されたと思う
  • 7.0.0は一応新規なので対応されている?
    • GooglePlay開発者サービスがよく固まる*9
    • しばらく放置して自動更新させてみましたが、結局6系と同じく動かないままでした
    • でもこれ、公式のx86でもGoogleApi対応版のEmuって5系までしかでていないので同じ状況かも

因みに公式のEmuだと 2.3系のimageは存在しないので、genymotion様様ではある<感謝

ちなみに、下記のテクは既に対策されていて、実行時にライセンスがない場合は00000000に初期化される*10

qiita.com

Nugat独自の制限?

SDへのセキュリティアクセス仕様がまた変わったらしい

パッケージ名の指定位置のSD権限は一旦開放されたけど、

Nからはそこにアクセスするのさえ、FileProviderによるアクセスが必須になるとのこと。

FileProvider自体の話は

*1:なかみざっくり比較した処、24.1.+ とほぼ差分なし

*2:やはりv4のG様のminsdkを上げたかっただけ

*3:引数も少ないし一見こっちのほうが良いと思う

*4:第三引数をnullに指定している記述も多いのですが、本来であれば意味のない使い方

*5:deplicateとかのコード対応とかするのには必要

*6:v2からおき直すのは可能だが、v1からはかなり厳しい

*7:理由は内部でLocationApiの位置情報を取得してを使っているから

*8:開発者サービスがエラーでまくり

*9:GoogleMapとか。表示はできるけど現在地移動出来ないとか

*10:ココらへんは実行ログにもろでてる。まあ当然だと思いますけど。。