Android 7.1.1 対応した Genymotion 2.9.0

前回までのまとめ

動作時のメモリ設定

image Gapp無し Gapps導入後
2.3.7 256M 512M
5.0 512M 768M
6.0 512M 768M
7.0 768M 1024M
7.1.1 768M 1024M

必要メモリが増えたのは、

  • 2.3.7
    • GAppsが Gogole Playでアップデート後、必要メモリが増えたっぽい
    • ただその分安定動作するようになった *1
  • その他
    • imageの最適化?起動の高速化対応をしているらしい=>なんか必要メモリが増えた

な感じみたい。

2.3.7 に関してはgenymotion 2.9 からは 完全にdepricated扱いのようで、新規DLは不可。

Settings > clear cache で消さないようにバックアップは取っておいたほうがイイと思います

f:id:kimukou_26:20170419074131p:plain

genymotion_vbox86p_2.3.7_160825_095124.ova

image導入後の基本設定

備忘のためにメモ

  • 言語設定を日本語に*2

f:id:kimukou_26:20170419074524p:plain

  • timezoneを日本に*3

f:id:kimukou_26:20170419074544p:plain

  • Arm Transtration/Gapps導入
  • image再起動
  • Googleアカウント登録
  • GooglePlayアプリ経由で必要なソフトを導入

公式エミュでできてgenymotionでできないこと

通信速度エミュレーション

iOS では Network Link Conditioner という機能が端末側で標準で用意されている

stackoverflow.com

対策

Charies経由で行う

www.yoheim.net


公式サイト

現在、また有料オプションの30日体験キャンペーンやっているみたい

ドキュメントは更新されていないようなので 2.8.0ベースのよう

でも CI向けの機能が多いから、個人ベースではあまり使わないんだよな・・(汗

ちなみに

genymotion も Charies もメジャーバージョンに伴って

規約が変更されているようで、再度同意文に同意させられたな・・

こう祈って同意しないとアプリ使えないからOK押しちゃうけど、ジックリ読んだほうがイイ気もする*4


7.x 系の体験メモ

今更ながら体験したのですが 

Network Security Configuration により、

デフォルトのままだとユーザ証明書が無効の状態。

アプリからこのSSL証明書を使うと明示して使う形になったよう

したがって、アプリに手を加えないとchariesのSSL証明書は利用できない。

ただこの機能入ってる状態で、proxy設定すると

激遅状態なんだけど、G様のNW監視の作りが悪いんじゃ無いだろうか?

chariesでテストするには

従来通りの端末image側対応

初期状態 proxyの設定
f:id:kimukou_26:20170419082604p:plain f:id:kimukou_26:20170419082621p:plain]

WiredSSIDを長押しでproxy設定のポップアップメニューを表示

端末側 Charies側
f:id:kimukou_26:20170419082729p:plain f:id:kimukou_26:20170419082739p:plain
設定直後 状態の改善
f:id:kimukou_26:20170419082830p:plain f:id:kimukou_26:20170419082837p:plain
  • OS7からは
    • 設定直後 or 動かしていると左側の状態によくなる。
    • この状態だと通信はできるけど、なんか安定しない*5

これ実機でもおきるので、正直どうなんだろう??とか思ったりもしてしまう・・

  • Charies を使わない時
    • proxyを解除する

f:id:kimukou_26:20170419082850p:plain

  • OS6からは
    • セキュリテイ上Proxyの設定をプログラムで変更できない*6
    • 複数SSIDを立ち上げている場合は、片方のみをProxy設定するみたいな試験用運用
  • でもGenymotionは・・・
    • 複数SSIDを登録できない><*7

SSL証明書関係

charles ssl export charies.crt

or 

./Charles.app/Contents/MacOS/charles ssl export charies.crt
Usage: ssl export <file.pem | file.crt>
       ssl export <file.p12> <password>
       ssl export - [pem | crt]
       ssl export - p12 <password>
  • charies.crt => charies.ca にリネム*9

7.1.1ではcrtのままでないと認識しない。

最初試したのは7.0。instantRunが悪さしてるのかな?

プログラム対応

  • debug/res/raw/charies.crt に配置

  • debug/res/xml/network_security_config.xml を作成

<network-security-config xmlns:tools="http://schemas.android.com/tools">
<!--
    <domain-config>
        <domain tools:ignore="NetworkSecurityConfig">localhost</domain>
        <trust-anchors>
            <certificates src="@raw/valid_ca" />
        </trust-anchors>
    </domain-config>
-->
    <!-- charies用の接続許可設定 -->
    <debug-overrides>
        <trust-anchors>
            <certificates src="@raw/charies" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

localhostの証明書の例

-----BEGIN CERTIFICATE-----
MIIC3jCCAcagAwIBAgIDDGqSMA0GCSqGSIb3DQEBCwUAMCExHzAdBgNVBAMTFkFu
ZHJvaWQgQ1RTIHRydXN0ZWQgQ0EwKhgTMjAxNTAxMDEwMDAwMDArMDAwMBgTMjAy
NTAxMDEwMDAwMDArMDAwMDAhMR8wHQYDVQQDExZBbmRyb2lkIENUUyB0cnVzdGVk
IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyu1Eg5wKieyro7qL
XIx+qaqbE8mPqRL81i0mtQBjnq3gsXV3f7okUssg/8QRzYiYGP/shly70MOqKURP
/gl7OtUj8SXLwQFzZ6B9hnWTXGRnBY4JFcgSy6LJMwo+ZPgwVtbjf1DAWNOLRhqY
J9Uxr0PX5KZ5AafFVh0Y+JVmaFfGPxJ/UBi83GQ7ToKBvHTFN5SQjg5QtlW5DaEN
cbO7lzB/OuKnIlLP6WlEVwCS+cToZAzaTafOVZaUarWHit0kq+8xyxl+koxgLcCK
lkDYpZCezY3UAxGheRnmSuah6LK9BRx2cSMOKkeN3sAoVB6ARi7F30MYj7RH2XRz
LumXLQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IB
AQBJi4SF/k1KVUZrweqUZ/QJ5HBDxWo4kE4iNw415qw2fAfNsKJknH1bcqgHa7Ea
nokT8a1KOQlicInptNRbkwBd3Xakt9k9aCWRqyqBzZZersakZ1cB3SNxameelGzl
a3dvGqVreE3LWhiQR7A3g84hS1kH5oNiY6GVZRk8BsmUUsvKaS6FJSMb9bAGSijQ
EZwsBk+HoSuLSVxUDtLZgbs1NYVK8jCG6GPv8cWis03pK3VKqjTi3DDs7mHioViG
G/TUZPq5ok8BemctNPLZAMLVlWPVB389iTOmgJWdR2Lu7LKh4B952+SeHMo3huUR
Hn/e+Sq5FmJfDVvFG6U3PEDd
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDK7USDnAqJ7Kuj
uotcjH6pqpsTyY+pEvzWLSa1AGOereCxdXd/uiRSyyD/xBHNiJgY/+yGXLvQw6op
RE/+CXs61SPxJcvBAXNnoH2GdZNcZGcFjgkVyBLLoskzCj5k+DBW1uN/UMBY04tG
Gpgn1TGvQ9fkpnkBp8VWHRj4lWZoV8Y/En9QGLzcZDtOgoG8dMU3lJCODlC2VbkN
oQ1xs7uXMH864qciUs/paURXAJL5xOhkDNpNp85VlpRqtYeK3SSr7zHLGX6SjGAt
wIqWQNilkJ7NjdQDEaF5GeZK5qHosr0FHHZxIw4qR43ewChUHoBGLsXfQxiPtEfZ
dHMu6ZctAgMBAAECggEAezX1E7P68iOxU4hAdcEYZwwffLQ1dgMBYUmo5t2FnyMT
+qvIEtWCmIKdVq5F4PW+4+8APdSwdOFYwBWqPCSlneMsH49DV7z5xUG89ZcOElsj
8kt7WK5SOzJr14GwwL2xHAj9uJ/fKg/H0Jj1KbpYoIIg48PwVQD44IBqWQTdWRxd
QVbxczDIHAjXSD14P4uUAXQrFyYEQXgksu4FNNGFr6JnuNe6eSreKxrw8/7J9OXZ
7VUfN0Iuw/M4HF1dKQKVK2R0W34wuS2KyI3fKUS7RoSrfXfBuZ1hQ1gWoATiXkbR
AAMUSWuaj5RQ4lj0wxdRAO+e4QB2yUXHgzCr8pH6QQKBgQDuiXtcdZ2FVN9ezxJt
XDd6225Rvh8XtWEUwTaJmOtZz2AKlKTQr06u/BqqpKWc5SWQSf88K7WPxF6EMizB
4D3wVGzCFkeRMMriZmrRe+8IVCq+mAZnRahV4SSH35ZQoNd8/3Mv6o59/UR0x7Nl
5yTqruROK0Ycz8S0GlvfKiDyywKBgQDZyGaIYqZ63piagmRx3EB1Z+8yfXnn8g2d
iVYU3UTDWxAFtzq6cfPRUdDxGHgAjmVmLvSGEaxqYNOftxwC3zk1E03w4/KvXg+y
Vt+1qPZ7Hj1OcGMYA+1/Qy6+GMneYnUkmO9zHoNzSDG5hfNkQ+3SyMx53FfTO8oA
Lrpl4gFG5wKBgQCtCGXIKDlf4rU13RgM5HwKTuqzuSps1FHb8FxTa+4tc9TDWBhG
mSSGorHlXxITwdWB2WughkRqSZQWaR82dCf6EgPitq6rj61cldaepzw52nQ3Vagv
ecQmp+8L8RDk5Afs0JEKDSfYFMR3wfVM0mNhKgTK/3EYrU6PJx/FvpWwCQKBgDrk
ICXdV1t+ehG+FN9dSej1tA8ZMy/vmpLxIl/9/aw+IbUJ+U2VpvMBhtjLXxf3aaAa
LnFash8KE+/qmh6EsnmRwM/VNDkL3H7DUzdSe2SLptRhO8qwtTZmumsZVO1X/olo
+cdNhwpTiW67tDd2zwbi2bhSR0WNs3AdMrZ+SQ4dAoGBANkjgWwzVN8KGOe9GdEo
opcwVzC1l9xkUcB6ykIG+DKw5p1ChGLA+2uufdpNWfPqXixCt5X3qIOy1q/VIdlj
EHNurGEld93H86V0ieLMRPg5llXWfKND2W8vezZSCGqFcSo+bAVi0YzA6XbLu+TV
GyyCD8Jk/efmdN0DKjERIKDH
-----END PRIVATE KEY-----

一応下記コマンドで証明書を入れて

adb shell am start http://www.charlesproxy.com/getssl/

その後、下記のようにかいて SSL証明書のuserタブを有効にする書き方も有るが、ロック画面等の設定等も必要になるのであまりスマートな書き方ではないらしい。

<network-security-config xmlns:tools="http://schemas.android.com/tools">
    <debug-overrides>
        <trust-anchors>
         <!-- Trust user added CAs while debuggable only -->
         <certificates src="user" /> 
        </trust-anchors>
    </debug-overrides>
</network-security-config>

  • debug/AndroidManifest.xml を修正
<application
        android:networkSecurityConfig="@xml/network_security_config"
        android:name=".application.DebugHogeApplication"
        tools:replace="android:name">

端末内でサーバーを立てている場合のテスト

のようなことをしたい場合、

localhostChariesを動かしているPC本体 が基本立ち位置 になるため

http://localhost:44917/api/v1/hoge/

の場合、

adb forward tcp:44917 tcp:44917  

のような対処が必要になる

4/21追記 GooglePlay開発者サービスの通信 on OS7

通信の確認をしようとていて、同梱された状態で Charlesで通信の確認

  • アプリから発行されている
    • Febric
    • 独自API

はOK。でもGoogle API系はNG・・。

考えてみたら

アプリ<=>Google Play開発者サービス <=> Googleへ通信

//Google Map等一部のAPIは端末からなので問題ない

なわけで、

  • Google Play開発者サービス 」
    • ユーザSSL証明書システムSSL証明書全許可
    • ただ参照する charies自体の証明書が端末にないと駄目><

ということで、結局はスマートでないという方法を取らざるを得ない!!

で正常成功するようにはなります・・。でもレスポンスは

  • gzip + 暗号済み

データなので結局見れないんだよなー *10

7.x に関する追記(2017/05/08)

  • OS7上のemuratorで chariesで通信を確認していた時、
    • 古いアプリを入れたら何故かSSLの通信が見える
    • network_security_config.xml なんか存在してないよなー

とかStackOverFlowでみてたら

  • targetSDK 24 〜 sdk最新化していると、network_security_config.xml の設定が必要
  • 全然更新されていない targetSDK 23あたりでビルドすると問題ない

な話が。。ようはandroid.jarに、ユーザー証明書を見ないような細工がされているという話

で、この細工されているandroid.jarが同梱されているアプリだと、Qittaにも乗っているように

  • 証明書ファイルをダウンロードしファイルの拡張子を.pemから.cer変更しないと認識しない

なよくわかんない挙動をする事もあるよう。うーん。G様ほんと雑い。。リリース優先なんだろうけどな・・

*1:G様が珍しく2系向け開発者サービス更新してる??

*2:公式エミュでもデフォルトは英語のまま

*3:相変わらず英語固定なんですよね。公式emuは何故かここ日本自動判別してくれますが・・

*4:これHPとかに掲載とかされていないんですかね? 日本だとよくWebViewで表示する系のネタだと思うんだけど・・

*5:Timeout等もかなり出やすくなる

*6:OS5まではできていた

*7:毎回設定し直しは不便だよな・・

*8:ブラウザでダウンロードするものと同じものです

*9:なぜかASでcrtで入れると認識しなかったので。ca証明書だから拡張子caにしろという意味なのかな?

*10:リクエストぐらいは見えるかもしれないけど