システム レベルの権限を追加する android:sharedUserId="android.uid.system"

システム レベルのパーミッションをプロジェクトに追加すると、実行時に次のようなエラー メッセージが表示されます。

インストールに失敗しました。
アプリケーションをインストールできませんでした: 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 を追加します。

おすすめ

転載: blog.csdn.net/qq_34205684/article/details/122985522