Google Play 課金も ロシア~ウクライナ で影響がある件

Due to payment system disruption, we will be pausing Google Play’s billing system for users in Russia in the coming days. This means users will not be able to purchase apps and games, make subscription payments or conduct any in-app purchases of digital goods using Google Play in Russia.

Hello Google Play Developer,

Due to payment system disruption, we will be pausing Google Play’s billing system for users in Russia in the coming days. This means users will not be able to purchase apps and games, make subscription payments or conduct any in-app purchases of digital goods using Google Play in Russia.

Users will still be able to access Google Play and download free apps and games.

Please refer to the Help Center for additional details and ongoing updates.

Thank you,

The Google Play team
Connect with us

Google Play 開発者の皆様、こんにちは。

決済システムの混乱により、今後数日間、ロシアのユーザー向けにGoogle Playの課金システムを一時停止します。これにより、ユーザーはロシアでGoogle Playを使用してアプリやゲームの購入、定期購入の支払い、デジタル商品のアプリ内課金を行うことができなくなります。

なお、Google Playにアクセスし、無料のアプリやゲームをダウンロードすることは可能です。

その他の詳細および最新情報については、ヘルプセンターを参照してください。

ありがとうございました。

Google Playチーム
私たちとつながる

いろいろ影響がありますので、素早い対応が必要となります。

👉 ロシアのユーザーに対するGooglePlayの課金システムの一時停止-PlayConsole 


iPhone連絡先アプリ だけが iCloud連絡先 のデータをエクスポートできない件

iPhone連絡先アプリ だけが  iCloud連絡先 のデータをエクスポートできない件

図からわかるように

iCloud 連絡先は、非Appleデバイスではアクセスできない。

iPhone連絡先アプリ だけが  iCloud連絡先 のデータをエクスポートできない件

Mac などパソコンがない場合は、iCloud 連絡先は iPhone 上では、連絡先アプリしかアクセスできない。

Android OS 上で iCloud 連絡先のデータを利用したい場合は、

iCloud 連絡先のデータをエクスポートして、Google コンタクトへインポートする。

しかないのだが、

iPhone連絡先アプリ だけが  iCloud連絡先 のデータをエクスポートできない件

iOS連絡先 アプリだけ iCloud連絡先 のデータをエクスポートできない。

Mac などパソコンがない状況では、iCloud 連絡先データは、エクスポートして、Googleコンタクトへインポートできないということになる。

まとめ

Apple、Google以外サードパーティツールを使えば状況は変わるが、そもそもは、

「iCloud連絡先 は、Appleデバイス間でのデータ共有クラウドツール。」

「Googleコンタクト は、あらゆるデバイスでのデータ共有クラウドツール。」

というそれぞれインターネットジャイアントのポリシー。

Googleコンタクト のが幅広く自在に使える。

👉 連絡先をクラウド上に保存する - 連絡先 / コンタクトの使い方まとめ その1【Android / iPhone】 
👉 Google コンタクト データをAndroid と iPhone で共有する - 連絡先 / コンタクトの使い方まとめ その2【Android / iPhone】 
👉 連絡先アプリ 必ず把握しておくべき全設定画面別使い方メモ- 連絡先 / コンタクトの使い方まとめ その3【Android → iPhone】 
👉 Googleコンタクト から iCloud連絡先 へ完全移行する手順 - 連絡先 / コンタクトの使い方まとめ その4 【Android → iPhone】 


Android バージョン別シェア 2022年3月

Android OS 9.0 (P) API-28 までで、8割超えました!

minSDK は 28 でいいでしょうかね。

これで、気持ちの悪いバージョン関連の

アノテーションや分岐を減らすことができますね!

さらば、Oreo。ナビスコだったけか?


【オレオ】(30枚×4個)クッキー バニラクリーム OREO ナビスコ

👉 Android OS バージョンのコードネームを取得する 
👉 IllegalArgumentException: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.  


LeakCanary 2.8.1 アプリ起動時に NullPointerException

LeakCanary is a memory leak detection library for Android.
👉 LeakCanary 

アプリが起動できずにこんなの出ましたけど。


2022-02-28 21:18:29.578 16816-16816/com.benigumo.apn D/AndroidRuntime: Shutting down VM
2022-02-28 21:18:29.589 16816-16816/com.benigumo.apn E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.app, PID: 16816
    java.lang.NullPointerException
        at q5.c$c.b(:112)
        at q5.c$c.f(:154)
        at p5.f.d(:233)
        at c7.x$a.c(:46)
        at p5.b$a.a(:38)
        at c7.x$a.b(:43)
        at q5.b$b.a(:25)
        at q5.b$b.add(:23)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:393)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:133)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4847)
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:54)
        at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2214)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7842)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

minifyEnabled false ではクラッシュしない。

回避方法

難読化されている部分は以下の模様。


Fatal Exception: java.lang.NullPointerException
curtains.internal.WindowCallbackWrapper$Companion.getJetpackWrapped (WindowCallbackWrapper.kt:112)
curtains.internal.WindowCallbackWrapper$Companion.unwrap (WindowCallbackWrapper.kt:154)
curtains.WindowsKt.getWrappedCallback (Windows.kt:233)
leakcanary.RootViewWatcher$listener$1.onRootViewAdded (RootViewWatcher.kt:46)
curtains.OnRootViewAddedListener$DefaultImpls.onRootViewsChanged (Listeners.kt:38)
leakcanary.RootViewWatcher$listener$1.onRootViewsChanged (RootViewWatcher.kt:43)
curtains.internal.RootViewsSpy$delegatingViewList$1.add (RootViewsSpy.kt:25)
curtains.internal.RootViewsSpy$delegatingViewList$1.add (RootViewsSpy.kt:23)
android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:454)
android.view.WindowManagerImpl.addView (WindowManagerImpl.java:121)
...

👉 Obfucation and 2.8.1 version cause an app launch crash · Issue #2286 · square/leakcanary 

書いてあるように、proguard rule に以下を追加で暫定回避できました。


-keep class androidx.appcompat.view.WindowCallbackWrapper { *; }
-keep class android.support.v7.view.WindowCallbackWrapper { *; }

次期バージョンで修正され、不要になるのでしょうが。

👉 Add Proguard rules for WindowCallbackWrapper by carlonzo · Pull Request #33 · square/curtains 

2022-04-08 追記

さらに更新されてる。


-keep class androidx.appcompat.view.WindowCallbackWrapper {
    android.view.Window$Callback mWrapped;
}

-keep class android.support.v7.view.WindowCallbackWrapper {
    android.view.Window$Callback mWrapped;
}

👉 just keep it · carlonzo/curtains@686b12c hatena-bookmark



DefaultLifecycleObserver や LifecycleEventObserver の使い方

あら。

DefaultLifecycleObserver や LifecycleEventObserver の使い方

Annotation that can be used to mark methods on LifecycleObserver implementations that should be invoked to handle lifecycle events.

Deprecated
This annotation required the usage of code generation or reflection, which should be avoided. Use DefaultLifecycleObserver or LifecycleEventObserver instead.

いつのまにか deprecated。

言われる通りに代わりのやつらを使います。

👉 DefaultLifecycleObserver  |  Android Developers 

👉 LifecycleEventObserver  |  Android Developers 

昔のコードを久々に開くといろいろな新しい発見があります。

👉 android - Do I need to call removeObserver for lifecycle, upon its onDestroy() event? - Stack Overflow 
👉 JakeWharton/timber: A logger with a small, extensible API which provides utility on top of Android's normal Log class.