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
Google APIs:24 のリリース
Google APIs:23 もそうなんだけど
まあ、何でこの対応がいまだに残っているかというと
で移植が厳しいアプリが多いからだと思われます。
でもまあ、
<uses-library android:name="com.google.android.maps"> </uses-library>
の宣言ってv1では必須ですが、
- GoogleAnalitics or FirebaseAnalitics
- Admob
あたりを起きなおそうとした時点で「上記の記述は使えません」とエラーになるので*7
茨の道をあゆむことにはなるんだよな・・とか思いつつ
genymotion 2.8.0 Nugatサポート
genymotion 2.8.0
— close_yutori (@kimukou2628) September 15, 2016
に Android 7.0のimageが出ているようなんだけど、
この頃のアプリはGapps連携が前提で、6.0と2.3.7のimageは未だクラッシュしまくりだから
中々触手が動かないんだよな・・orz
まあGappsに関して言えば、zenfone2の端末で
— close_yutori (@kimukou2628) September 15, 2016
FacebookのappのGapp経由の更新で OS再起動がよく起こるので
x86イメージと相性悪いだけかもしれないんだけど・・
なぜ標準のエミュレータ使わないかというと
- 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は一応新規なので対応されている?
因みに公式のEmuだと 2.3系のimageは存在しないので、genymotion様様ではある<感謝
ちなみに、下記のテクは既に対策されていて、実行時にライセンスがない場合は00000000に初期化される*10
Nugat独自の制限?
SDへのセキュリティアクセス仕様がまた変わったらしい
パッケージ名の指定位置のSD権限は一旦開放されたけど、
Nからはそこにアクセスするのさえ、FileProviderによるアクセスが必須になるとのこと。
- file:// scheme is now not allowed to be attached with Intent on targetSdkVersion 24 (Android Nougat). And here is the solution. :: The Cheese Factory
- Setting Up File Sharing | Android Developers
FileProvider自体の話は
*1:なかみざっくり比較した処、24.1.+ とほぼ差分なし
*2:やはりv4のG様のminsdkを上げたかっただけ
*3:引数も少ないし一見こっちのほうが良いと思う
*4:第三引数をnullに指定している記述も多いのですが、本来であれば意味のない使い方
*5:deplicateとかのコード対応とかするのには必要
*6:v2からおき直すのは可能だが、v1からはかなり厳しい
*7:理由は内部でLocationApiの位置情報を取得してを使っているから
*8:開発者サービスがエラーでまくり
*9:GoogleMapとか。表示はできるけど現在地移動出来ないとか
*10:ココらへんは実行ログにもろでてる。まあ当然だと思いますけど。。