システム レベルのアクセス許可を追加する
システム レベルのパーミッションをプロジェクトに追加すると、実行時に次のようなエラー メッセージが表示されます。
インストールに失敗しました。
アプリケーションをインストールできませんでした: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
エラーが報告される理由は、システム レベルのアクセス許可を追加した後、ターゲット システムのプラットフォーム キーが apk ファイルに再署名する必要があるためです。ここで使用する署名ファイルは、自分で生成したものではなく、ターゲット システムから見つけたものです。(ターゲット システムは、apk がインストールされる Android デバイスで使用される Android システムです。)
ここでは、android.uid.system パーミッションを例として、開発した Android アプリケーションがこのパーミッションを取得する方法を説明します。
1. Android プロジェクトにシステム レベルの権限を追加する
1. システム レベルのアクセス許可を追加する
AndroidManifest.xml に sharedUserId 属性を追加
android:sharedUserId="android.uid.system"
2. 既存の署名を build.gradle に追加します
署名ファイルのstorePassword(キーストアキー)、keyAlias(キー識別名)、keyPassword(キーパスワード)を追加
android {
signingConfigs {
platform {
storeFile file('D:\\aaa.keystore')
storePassword '123456'
keyAlias 'aaa'
keyPassword '123456'
}
}
}
3. Android Studio を選択 File->Project Structure->Modules
Signing Configs では、プラットフォームがモジュールに追加されていることがわかります。追加が成功したことを確認するだけで、変更は行わないでください
. Build Variants 列は、apk を生成するための構成です. apk を生成するための 2 つの組み込みメソッドがあります, すなわち、デバッグ用の debug と release
debug です. 通常、プロジェクト コードを記述しますデフォルトでは、debug によって生成された apk を使用します。release は、
ダウンロードおよびインストール用の公式リリースに使用されます。この方法では、最初にキーストアを作成する必要があります (キーストアは apk の証明書です。apk が更新されると、更新するには、証明書が一致する必要があります。)、一連の情報を入力して、Build->Build Bundles/APKS->Build APKs から apk を生成します。
トピックに戻り、Build Variants で生成方法を選択した後、Signing Config で使用する署名を追加し、保存してウィンドウを終了します.最後に、リリース
バージョンを変更します.android studio インターフェイスの左下隅で、プロジェクトを実行すると、IDE がエラーを報告しなくなり、android:sharedUserId="android.uid.system" パーミッションがアプリケーションに追加されていることがわかります。
2. sharedUserId 属性の概要
通常、各 apk にはユーザー ID があり、デバイスにインストールされた apk ファイルに対して、Android はユーザー ID に従って Linux ユーザー ID を割り当てて管理し、サンドボックスを作成して、他のアプリケーションが影響を受けないようにします (または影響を受けます)。つまり、異なる Linux ユーザー ID に属する apk は相互に通信できません。
ただし、複数の apk を開発し、リソースを相互に共有する必要がある場合があるため、それを達成するために shareUserId を設定する必要があります.これらの apk の shareUserId が同じであることを確認するだけでよく、値はカスタマイズできます. android:sharedUserId= "my_id" など
3. 異なる sharedUserId パーミッション
android.uid.system を共有 UID として使用するシステム内のすべての APK は、まず AndroidManifest.xml ノードに android:sharedUserId="android.uid.system" を追加し、次に Android.mk に LOCAL_CERTIFICATE := platform を追加します。
android.uid.nfc を共有 UID として使用するシステム内のすべての APK は、まず AndroidManifest.xml ノードに android:sharedUserId="android.uid.nfc" を追加し、次に Android.mk に LOCAL_CERTIFICATE := platform を追加します。
システムで共有 UID として android.uid.se を使用するすべての APK は、まず AndroidManifest.xml ノードに android:sharedUserId="android.uid.se" を追加し、次に Android.mk に LOCAL_CERTIFICATE := platform を追加します。
android.uid.shared を共有 UID として使用するシステム内のすべての APK は、AndroidManifest.xml ノードに android:sharedUserId="android.uid.shared" を追加し、Android.mk に LOCAL_CERTIFICATE := shared を追加します。
android.media を共有 UID として使用するシステム内のすべての APK は、AndroidManifest.xml ノードに android:sharedUserId="android.media" を追加し、Android.mk に LOCAL_CERTIFICATE := media を追加します。