proyecto androide con un conjunto de paquete de código múltiple APK, resolver Instalación fallado con el mensaje INSTALL_FAILED_CONFLICTING_PROVIDER.

 

requisitos:

APK empaquetado con una pluralidad de códigos, y se puede montar en el mismo teléfono 

Problemas encontrados:

Cuando se instala en el mismo teléfono le pedirá un error:

Error en la instalación con el mensaje INSTALL_FAILED_CONFLICTING_PROVIDER.

 

El problema se puede resolver no es un problema, es una valiosa las ideas de resolución de problemas, este artículo quiere dejar constancia de mi proceso de solución. . . . . .

 

Embalaje pasos de configuración usando una pluralidad de códigos de APK:

De hecho, Internet tiene una gran cantidad de introducción, aquí un breve resumen de

1. En el archivo de la aplicación, agregue el siguiente código 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
    }
}

nota:

Si se encuentra en el archivo de aplicación strings.xml también define nombre_apl, tiempo de compilación será un problema, ya que el código anterior resValue "cadena", "APP_NAME", "nombre de la aplicación 1" después de la operación, generará automáticamente el @ string / nombre_apl , por lo que habrá dos nombre_apl, por lo que queremos eliminar el compilador strings.xml aplicación va a ser normal.

2. Modificar el archivo 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>

 Embalaje y firma APK

 

 Seleccione el elemento correspondiente empaquetado bien, así que romper el Ejemplo 1 y ejemplo 2 está a sólo dos funciones diferentes exactamente los mismos iconos y los nombres de los dos proyectos

problema:

Cuando usted tiene un proyecto que utiliza el proveedor, dos aplicaciones instaladas en el mismo teléfono pueden Instalación rápida fallado con el mensaje INSTALL_FAILED_CONFLICTING_PROVIDER. Error

Motivo:

proveedor de las autoridades identifica de manera única la etiqueta, la instalación falla porque hay dos utilizan el mismo proveedor de autoridades de aplicación

solución:

Las autoridades de búsqueda global, la muerte de la configuración original Para escribir un Gradle parámetros de referencia para configurar, por ejemplo:

Con $ {} applicationId en lugar de la muerte nombre del paquete original escrita

temas avanzados:

Empecé a hacer más operaciones de instalación, pero todavía se le pida fallado con el mensaje INSTALL_FAILED_CONFLICTING_PROVIDER. Error, desconcertante, proveedor de búsqueda global, asegúrese de que todas las configuraciones se cambian, todavía no es

Explora:

Pensando: seguro que hay otros lugares con el proveedor y no pueden ser buscados, posiblemente algo de código de terceros plataforma;

Validación: añadir el siguiente código a prueba de cualquier archivo 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);

Imprimir más de un centenar de proveedor de información, no de registro específico fijado hacia fuera, de acuerdo con la búsqueda "com.example", porque me encontré con un proyecto example2, encontró que hay dos entidades locales incluyen "com.example.a" palabra, derecho debe ser "com.example.b", a saber:

i: 43 ContentProviderInfo {name = com.example.a.DownloadProvider className = cn.jpush.android.service.DownloadProvider} --- com.example.a.DownloadProvider 和 i: 177 ContentProviderInfo {name = com.example.a. DataProvider className = cn.jpush.android.service.DataProvider} --- com.example.a.DataProvider

Ver className, obviamente, Aurora empuje de servicio, por lo que debe haber problemas de configuración del SDK de Aurora,

El examen reveló:

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

applicationId aquí "com.example.a" es la configuración por defecto, la última se basa en las modificaciones de proyectos productFlavors reales dentro, pero debido a la configuración de acuerdo con el proyecto no estaban detrás de la reconfiguración de los parámetros de Aurora, resultando en Aurora es la configuración predeterminada se ha utilizado, también se JPUSH_PKGNAME: applicationId de applicationId ha sido com.example.a

revisión:

La Aurora trasladó siguientes parámetros de configuración 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
    }
}

El carril manifestPlaceholders defaultConfig = [] para eliminar

Vuelva a ejecutar el hecho. . . . . .

otros:

1, ya que el estallido del nombre del paquete APK no es lo mismo, por lo que es útil, de acuerdo con alguna de terceros nombre del paquete SDK de la plataforma de registro tendrá que configurar el subtema

2, fotos y otros recursos necesarios para mostrar contenido diferente dependiendo del proyecto, puede crear una carpeta de proyecto correspondiente en el directorio src, a continuación, crear un directorio de recursos correspondientes, lo que tendría un montón de búsqueda en línea tutorial

 

Publicado cuatro artículos originales · ganado elogios 3 · Vistas 3980

Supongo que te gusta

Origin blog.csdn.net/qq_24834241/article/details/82455681
Recomendado
Clasificación