Android 8.1(API レベル 27)では、 ユーザーとデベロッパー向けに 新機能を提供することにしました このドキュメントでは、デベロッパー向けの最新情報を紹介します。
Android Oreo(Go バージョン)
<ph type="x-smartling-placeholder"></ph> Android Go は、Android のエクスペリエンスを最適化し、 何十億人もの人々が インターネットにアクセスしていますAndroid 8.1 以降 エントリレベルのデバイスに適した プラットフォームを開発していますAndroid Oreo の機能 (Go エディション)構成には以下が含まれます。
- メモリの最適化。プラットフォーム全体のメモリ使用量を改善し、 1GB 以下の RAM を搭載したデバイスでアプリを効率的に実行できることを要件としています。
- 柔軟なターゲティング オプション新規 ハードウェア機能 定数を使用して、通常のデバイスまたは低 RAM デバイスへのアプリの配布を Google Play。
- Google Play: すべてのアプリは Android Oreo を搭載したデバイスで利用可能 (Go バージョン)では、デベロッパーが特別に最適化されたアプリが表示されます。 何十億人ものユーザーに 優れたエクスペリエンスを提供できます <ph type="x-smartling-placeholder"></ph> ガイドラインを参照
何十億人ものユーザー向けに Google Play の建物を更新 <ph type="x-smartling-placeholder"></ph> の使用に関する追加のガイダンスが <ph type="x-smartling-placeholder"></ph> デバイスに応じてアプリを最適化する Android Oreo(Go バージョン)。ほとんどのデベロッパーにとって、既存の APK を最適化するか、 Google Play の<ph type="x-smartling-placeholder"></ph> 複数 APK 機能: APK のバージョンを低 RAM デバイスをターゲットにします が、Android Oreo(Go バージョン)を搭載するデバイスに対応する最善の方法です。重要なことは、 アプリ 軽量化と効率化により、デバイスを問わずオーディエンス全体に利益をもたらします。
Neural Networks API
Neural Networks API により、デバイス上のマシンの計算と推論を高速化 TensorFlow など、ML フレームワークを Lite(Google のモバイル向けクロスプラットフォーム ML ライブラリ) Caffe2 などですTensorFlow Lite を見る オープンソース リポジトリをご覧ください。 TensorFlow Lite は、Neural Networks API と連携して次のようなモデルを実行します。 MobileNets Inception v3、 および スマート リプライをモバイル デバイスで効率的に使用しましょう。
自動入力フレームワークの更新
Android 8.1(API レベル 27)では、自動入力機能が改良されています。 アプリに組み込むことができるフレームワークです。
BaseAdapter
クラスに setAutofillOptions()
が含まれるようになりました
メソッドを使用すると、値を文字列で表すことができます。
設定してください。これは spinner に便利です。
渡す必要があります。たとえば
setAutofillOptions()
メソッドを使用して、文字列を指定できます。
ユーザーが期間の一部として選択できる年数のリストを
クレジットカードの有効期限自動入力サービスは、文字列表現を使用して
データを必要とするビューに
適切に入力できます
また、AutofillManager
クラスに notifyViewVisibilityChanged(View, int, boolean)
メソッドが含まれている
この関数を呼び出して、API 呼び出しの可視性の変化を
仮想構造で表示できます。メソッドのオーバーロードもあり、
構築できます。ただし、非仮想構造の場合、通常は
このメソッドはフレームワークによってすでに呼び出されているため、フレームワークに明示的に通知します。
View
クラスです。
Android 8.1 では、自動入力サービスで保存 UI をカスタマイズできる機能も追加されています。
CustomDescription
and
Validator
のサポートを追加することにより、アフォーダンス
(SaveInfo
内)
カスタムの説明は、自動入力サービスが何を伝えられるかを
保存されるかどうかたとえば、画面にクレジット カードが表示されている場合、
クレジット カード会社のロゴ(クレジット カードの末尾 4 桁)を表示する
その有効期限番号が含まれます詳しくは、
CustomDescription
をご覧ください
クラスです。
Validator
オブジェクトを使用して、Validator の実行時に自動入力保存 UI が表示されないようにします。
満たされません詳しくは、
Validator クラス、およびそのサブクラス
LuhnChecksumValidator と RegexValidator。
通知
Android 8.1 では、通知が次のように変更されています。
- アプリが通知アラート音を 1 秒に 1 回音で鳴らせるようになりました。次の値を超えるアラート音 レートはキューに追加されずに失われます。この変更は通知の他の要素には影響しません。 動作と通知メッセージは想定どおりに送信されます。
-
NotificationListenerService
、ConditionProviderService
は低 RAM 容量ではサポートされていません。 次の場合にtrue
を返す Android 搭載デバイスActivityManager.isLowRamDevice()
が呼び出されます。
EditText の更新
API レベル 27 以降では、EditText.getText()
メソッドは Editable
を返します。以前
CharSequence
が返されました。この変更は
後方互換性があるため、Editable
は
CharSequence
。
Editable
インターフェースは、有用な追加情報を
説明します。たとえば、Editable
も
Spannable
インターフェースを実装しているので、マークアップを
EditText
のインスタンス内のコンテンツを返します。
プログラマティックなセーフ ブラウジング アクション
WebView
実装を実装すると、アプリで次の操作が可能になります。
WebView
のインスタンスが移動しようとしたときに検出する
Google が既知の脅威と分類した URL に誘導する試みです。デフォルトでは、
WebView
は、既知の脅威についてユーザーに警告するインタースティシャルを表示します。
この画面では、URL を読み込むか、元のページに戻るか
表示されます。
Android 8.1 では、 アプリが既知の脅威に対応する
- アプリが既知の脅威を Safer に報告するかどうかを制御できます ブラウジング。
- 次のような特定のアクションを、アプリに自動的に実行させることができます。 安全にアクセスします。これは、セーフ ブラウジングが認識する URL に 既知の脅威に分類されます。
注: 既知の脅威から最適な形で保護するには、
呼び出す前にセーフ ブラウジングを初期化してから
WebView
オブジェクトの loadUrl()
メソッド。
次のコード スニペットは、アプリのインスタンスに
WebView
: 障害が発生すると常に安全な場所に戻る
既知の脅威:
<manifest> <application> ... <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing" android:value="true" /> </application> </manifest>
Kotlin
private var superSafeWebView: WebView? = null private var safeBrowsingIsInitialized: Boolean = false // ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) superSafeWebView = WebView(this).apply { webViewClient = MyWebViewClient() safeBrowsingIsInitialized = false startSafeBrowsing(this@SafeBrowsingActivity, { success -> safeBrowsingIsInitialized = true if (!success) { Log.e("MY_APP_TAG", "Unable to initialize Safe Browsing!") } }) } }
Java
private WebView superSafeWebView; private boolean safeBrowsingIsInitialized; // ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); superSafeWebView = new WebView(this); superSafeWebView.setWebViewClient(new MyWebViewClient()); safeBrowsingIsInitialized = false; superSafeWebView.startSafeBrowsing(this, new ValueCallback<Boolean>() { @Override public void onReceiveValue(Boolean success) { safeBrowsingIsInitialized = true; if (!success) { Log.e("MY_APP_TAG", "Unable to initialize Safe Browsing!"); } } }); }
Kotlin
class MyWebViewClient : WebViewClient() { // Automatically go "back to safety" when attempting to load a website that // Safe Browsing has identified as a known threat. An instance of WebView // calls this method only after Safe Browsing is initialized, so there's no // conditional logic needed here. override fun onSafeBrowsingHit( view: WebView, request: WebResourceRequest, threatType: Int, callback: SafeBrowsingResponse ) { // The "true" argument indicates that your app reports incidents like // this one to Safe Browsing. callback.backToSafety(true) Toast.makeText(view.context, "Unsafe web page blocked.", Toast.LENGTH_LONG).show() } }
Java
public class MyWebViewClient extends WebViewClient { // Automatically go "back to safety" when attempting to load a website that // Safe Browsing has identified as a known threat. An instance of WebView // calls this method only after Safe Browsing is initialized, so there's no // conditional logic needed here. @Override public void onSafeBrowsingHit(WebView view, WebResourceRequest request, int threatType, SafeBrowsingResponse callback) { // The "true" argument indicates that your app reports incidents like // this one to Safe Browsing. callback.backToSafety(true); Toast.makeText(view.getContext(), "Unsafe web page blocked.", Toast.LENGTH_LONG).show(); } }
動画のサムネイルの抽出ツール
MediaMetadataRetriever
クラスには、getScaledFrameAtTime()
という新しいメソッドが追加されています。
特定の時間位置に近いフレームを読み込み、同じアスペクト比のビットマップを返す
比率になりますが、指定された幅の長方形に収まるようにスケーリングされ、
あります。このメソッドは、動画からサムネイル画像を生成するのに便利です。
メモリを浪費する可能性がある getFrameAtTime()
ではなく、この方法を使用することをおすすめします。
元の動画と同じ解像度のビットマップが返されるためです。対象
たとえば 4K 動画のフレームは 16 MB のビットマップで、
サムネイル画像が必要だからです
SharedMemory API
Android 8.1(API レベル 27)では、
SharedMemory
APIこのクラスを使用すると、匿名グループの作成、マッピング、管理を
SharedMemory
作成します。メモリ保護を設定する
日付
SharedMemory
読み取り/書き込み用のオブジェクトであり、
SharedMemory
オブジェクトが Parcelable であれば、AIDL を介して別のプロセスに簡単に渡すことができます。
SharedMemory
API は Google Cloud のプロジェクトと
NDK の ASharedMemory
機能。
ASharedMemory
がアクセスを許可します
ファイル ディスクリプタに変換してから読み取りと書き込みにマッピングできます。とても
大量のメッセージや
アプリ間または単一のアプリ内の複数のプロセス間で
大量のデータを取り込みます
WallpaperColors API
Android 8.1(API レベル 27)では、ライブ壁紙に色を付けることができます
情報をシステム UI に渡します。これを行うには、WallpaperColors
を作成します。
オブジェクトを使用するか、手動で選択した 3 色を使用します。
この色情報を取得することもできます。
WallpaperColors
を作成するには
次のいずれかを行います。
WallpaperColors
を作成するには 3 色を使用して、WallpaperColors
のインスタンスを作成します。 プライマリ カラー、セカンダリ カラー、ターシャリ カラーを渡します。メイン color を null にすることは許可されていません。WallpaperColors
を作成するには 使用したら、fromBitmap()
を呼び出して、 メソッドにビットマップ ソースをパラメータとして渡します。WallpaperColors
を作成するには ドローアブルから保持する場合は、fromDrawable()
を呼び出します。 ドローアブル ソースをパラメータとして渡します。
プライマリ カラー、セカンダリ カラー、ターシャリ カラーの詳細を 次のメソッドを呼び出します。
getPrimaryColor()
は、壁紙の中で視覚的に最も特徴的な色を返します。getSecondaryColor()
は、壁紙の 2 番目に目立つ色を返します。getTertiaryColor()
メソッドは、壁紙の中で 3 番目に目立つ色を返します。
ライブ壁紙の色に大きな変化があったときにシステムに通知するには、次の操作を行います。
notifyColorsChanged()
を呼び出す
メソッドを呼び出します。このメソッドは、onComputeColors()
ライフサイクルをトリガーします。
新しい WallpaperColors
を提供する機会がある
渡されます。
色の変化のリスナーを追加するには、addOnColorsChangedListener()
メソッドを呼び出します。Google Chat では
getWallpaperColors()
メソッドも呼び出す
壁紙のプライマリ カラーを取得できます。
フィンガープリントの更新
FingerprintManager
クラスには、
以下のエラーコードが導入されました。
-
FINGERPRINT_ERROR_LOCKOUT_PERMANENT
– ユーザーが 指紋認証リーダーでデバイスのロックを解除する回数が多すぎる。 -
FINGERPRINT_ERROR_VENDOR
- ベンダー固有のフィンガープリント リーダーエラーが発生しました。
暗号化の更新
Android 8.1 では、暗号化に関するさまざまな変更が行われています。
- 新しいアルゴリズムが Conscrypt に実装されました。コンスクリプト
実装は既存の Bouncy Castle よりも優先されます。
説明します。新しいアルゴリズムは次のとおりです。
<ph type="x-smartling-placeholder">
- </ph>
AlgorithmParameters:GCM
KeyGenerator:AES
KeyGenerator:DESEDE
KeyGenerator:HMACMD5
KeyGenerator:HMACSHA1
KeyGenerator:HMACSHA224
KeyGenerator:HMACSHA256
KeyGenerator:HMACSHA384
KeyGenerator:HMACSHA512
SecretKeyFactory:DESEDE
Signature:NONEWITHECDSA
- 不参加
Cipher.getParameters().getParameterSpec(IvParameterSpec.class)
人 GCM を使用するアルゴリズムでは正常に機能しません。代わりに、getParameterSpec(GCMParameterSpec.class)
。 - TLS に関連付けられている多くの Conscrypt 内部クラスがリファクタリングされました。以降
シムが残されたままになっているため、開発者がリフレクティブ
サポートしていますが、詳細が一部変更されています。たとえば、ソケットは
以前は
OpenSSLSocketImpl
型でしたが、現在は型になっています。ConscryptFileDescriptorSocket
またはConscryptEngineSocket
(どちらも拡張)OpenSSLSocketImpl
。 - スローに使用される
SSLSession
メソッドIllegalArgumentException
に null 参照が渡されると、NullPointerException
をスローする。 - RSA
KeyFactory
で鍵を生成できなくなりました バイト配列から取り出します。着信generatePrivate()
、generatePublic()
は、KeySpec
(キー構造が入力データに対応しない) 全体のバッファ全体がInvalidKeySpecException
になります。 - 閉じているソケットによってソケットの読み取りが中断された場合、Conscrypt は
読み取りから -1 を返します。読み取りは
SocketException
。 - ルート CA 証明書のセットが変更されましたが、 ルート証明書の削除も行います WoSign と StartCom です。この決定について詳しくは、 セキュリティに関するブログ投稿 最終版 WoSign 証明書と StartCom 証明書の信頼の削除。