コードパッケージの複数のAPKのセットでのAndroidプロジェクト、インストールを解決するには、メッセージINSTALL_FAILED_CONFLICTING_PROVIDERで失敗しました。

 

要件:

APKコード複数のパッケージ化され、そして同じ電話に搭載することができます 

問題が発生しました:

同じ電話機にインストールされているときにエラーが求められます。

インストールがメッセージINSTALL_FAILED_CONFLICTING_PROVIDERで失敗しました。

 

問題が解決することができる貴重な問題解決のアイデアで、この記事では、私の解決策のプロセスを記録したい、問題ではありません。

 

コードAPKの複数を使用して設定手順をパッキング:

実際には、インターネットは、ここで簡単にまとめたものの導入をたくさん持っています

アプリケーションのファイル1.次のコードを追加しますbuild.gradle

android {
    ...

    //创建一个APP维度
    flavorDimensions "APP"

    //多项目打包配置
    productFlavors {
        //项目例子1
        example1 {
            dimension "APP"
            applicationId "com.example.a"
            resValue "string", "app_name", "应用名称1"//应用名称
            manifestPlaceholders = [
                    app_icon: "@mipmap/ic_launcher1"//桌面图标
            ]
        }

        //项目例子2
        example2 {
            dimension "APP"
            applicationId "com.example.b"
            resValue "string", "app_name", "应用名称2"//应用名称
            manifestPlaceholders = [
                    app_icon: "@mipmap/ic_launcher2"//桌面图标
            ]
        }
    }

    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
}

注意:

あなたは、アプリのstrings.xmlファイル内にある場合は上記のコードresValue操作後に「文字列」、「APP_NAME」、「アプリケーション名1」は、ASは自動的に@文字列/ APP_NAMEを生成しますので、また、APP_NAME、コンパイル時間が問題になります定義私たちは通常になります、アプリのstrings.xmlコンパイラを削除するので、そう、2 APP_NAMEがあるでしょう。

2. [変更AndroidManifest.xmlファイル

<application
        android:allowBackup="true"
        // 注意啦,这里改为${app_icon}
        android:icon="${app_icon}"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
           ...
</application>

 包装および署名APK

 

 [OK]をパッケージ化に対応する項目を選択し、その例1及び例2は2つだけ異なる機能である二つのプロジェクトのまったく同じアイコンと名前を抜け出します

問題:

あなたは、プロバイダを使用してプロジェクトを持っている場合は、同じ電話機にインストールされた2つのアプリケーションは、プロンプトインストールがメッセージINSTALL_FAILED_CONFLICTING_PROVIDERで失敗しましたことがあります。エラー

理由:

2つのプロバイダの使用同じ当局のAppがあるので、当局者が独自にタグを識別し、インストールが失敗します

ソリューション:

グローバル検索当局、例えば、設定するには、参照Gradleのパラメータを記述するために、元の構成の死:

代わりに、元のパッケージ名書かれた死の$ {} APPLICATIONID付き

高度な問題:

私はより多くの操作を行うようになったが、それでもプロンプトが表示されインストールがメッセージINSTALL_FAILED_CONFLICTING_PROVIDERで失敗しました。エラー、不可解な、グローバル検索プロバイダー、すべての設定が切り替えられることを確認してください、それはまだありません

おすすめ情報

考える:確かに、おそらくいくつかのサードパーティ製のプラットフォームのコードがプロバイダと他の場所があり、検索することができません。

検証:任意のJavaファイルでテストに次のコードを追加します

StringBuffer sb = new StringBuffer();
        List<ProviderInfo> providerInfos = getApplicationContext().getPackageManager().queryContentProviders(null, 0, 0);
        for (int i = 0; i < providerInfos.size(); i++) {
            sb.append("i: " + i + " " + providerInfos.get(i).toString() + "---" + providerInfos.get(i).authority + "\n");
        }
        Log.e(TAG, "provide: " + sb);

、私は例2のプロジェクトを実行したので、情報の百以上のプロバイダを印刷ではなく、特定のログは、「com.example」検索によると、アウト投稿2つの自治体などが「com.example.a」という言葉があることがわかりました右すなわち、「com.example.b」である必要があります:

I:43 ContentProviderInfo {名前= com.example.a.DownloadProviderクラス名= cn.jpush.android.service.DownloadProvider} --- com.example.a.DownloadProvider和I:177 ContentProviderInfo {名前= com.example.a。データプロバイダクラス名= cn.jpush.android.service.DataProvider} --- com.example.a.DataProvider

参照クラス名、明らかにオーロラプッシュサービス、それがオーロラSDKの構成上の問題でなければなりませんので、

検査は、明らかにしました。

defaultConfig {
        applicationId "com.example.a"
        minSdkVersion 18
        targetSdkVersion 27
        multiDexEnabled true
        
        manifestPlaceholders = [
                JPUSH_PKGNAME: applicationId,
                JPUSH_APPKEY : "xxx", //JPush上注册的包名对应的appkey.
                JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
        ]
    }

アプリケーションIDは、ここで「com.example.a」は、後者は内部実際のプロジェクトの変更のproductFlavorsに基づいて説明するデフォルトの設定であるが、プロジェクトに係る構成は、オーロラパラメータの再設定の背後になかったため、オーロラをもたらすことも、デフォルトの設定が使用されてきていますAPPLICATIONIDのAPPLICATIONID com.example.aされています:JPUSH_PKGNAMEがされ

レビュー:

オーロラは、次の設定パラメータを移動SDK

android {
    ...

    //创建一个APP维度
    flavorDimensions "APP"

    //多项目打包配置
    productFlavors {
        //项目例子1
        example1 {
            dimension "APP"
            applicationId "com.example.a"
            resValue "string", "app_name", "应用名称1"//应用名称
            manifestPlaceholders = [
                    app_icon: "@mipmap/ic_launcher1"//桌面图标
                    JPUSH_PKGNAME: applicationId,
                    JPUSH_APPKEY : "xxx", //JPush上注册的包名对应的appkey.
                    JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
            ]
        }

        //项目例子2
        example2 {
            dimension "APP"
            applicationId "com.example.b"
            resValue "string", "app_name", "应用名称2"//应用名称
            manifestPlaceholders = [
                    app_icon: "@mipmap/ic_launcher2"//桌面图标
                    JPUSH_PKGNAME: applicationId,
                    JPUSH_APPKEY : "xxx", //JPush上注册的包名对应的appkey.
                    JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
            ]
        }
    }

    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
}

defaultConfigレーンmanifestPlaceholders = []削除します

再実行が行わ。

その他:

1、APKパッケージ名のうち休憩はとても有用であることが、同じではないので、いくつかのサードパーティ製のプラットフォームSDKパッケージ名の登録に応じてのconfigureサブ項目にする必要があります

2、写真およびその他のリソースは、プロジェクトに応じて、異なるコンテンツを表示するために必要な、あなたは、オンライン検索のチュートリアルがたくさんあるでしょう、対応するリソースディレクトリを作成し、srcディレクトリの下に対応するプロジェクトフォルダを作成することができます

 

リリース元の4件の記事 ウォンの賞賛3 ビュー3980

おすすめ

転載: blog.csdn.net/qq_24834241/article/details/82455681