Umeng usa Gradle en AS para empaquetado multicanal y lanzamiento de firma APK

Desde que Google abandonó el mantenimiento de Eclipse e impulsó Android Studio, la velocidad de actualización e iteración de su versión también es muy rápida, y las operaciones relacionadas de gradle se utilizan a menudo en proyectos de desarrollo.

Gradle:

Gradle es la herramienta de compilación predeterminada de Android Studio, que se basa en un lenguaje JVM: Groovy, además de DSL.

Para decirlo sin rodeos, es una herramienta de gestión de dependencias que abandona varias configuraciones tediosas basadas en XML, es fácil de usar y tiene una sintaxis relativamente concisa.

Cada vez que se completa el desarrollo del proyecto y está listo para su lanzamiento en los principales mercados de aplicaciones de Android, es un gran dolor de cabeza para los desarrolladores de proyectos en este momento. Si el número de mercados de aplicaciones que se lanzarán es pequeño, es posible que se realice unas cuantas veces más. Si hay docenas En términos del mercado de aplicaciones, de hecho, la velocidad de empaquetado del apk en sí es lenta, lo que desperdicia mano de obra y recursos materiales y es ineficiente.

Desde el lanzamiento del SDK de estadísticas de Umeng, ha brindado mucha comodidad a todos. Además de las funciones habituales de estadísticas de usuario y análisis de errores, el SDK de Umeng también proporciona la función de empaquetado rápido multicanal.

Función:

Una vez creado el proyecto, se generan dos archivos build.gradle de forma predeterminada, uno se encuentra en el directorio raíz del proyecto y el otro en el directorio de la aplicación.

El archivo build.gradle en el directorio raíz del proyecto es para la configuración global, que incluye la dirección del almacén y la versión de gradle. No explicaré mucho sobre esto, hablaré principalmente sobre el archivo build.gradle en el directorio de la aplicación. .

La función del archivo build.gradle en el directorio de la aplicación

  • declara el tipo de elemento construido
apply plugin:'android'
  • Establecer los parámetros para compilar el proyecto de Android.
android {
    //编译SDK的版本
    compileSdkVersion 23
    //编译的tools版本
    buildToolsVersion "23.0.3"
 
   defaultConfig {
        //当前应用包名
        applicationId "com.chenyk.androidkits"
        //支持的最低版本
        minSdkVersion 9
        //支持的目标版本
        targetSdkVersion 22
        //版本号
        versionCode 1
        //版本名
        versionName "1.0"
        // dex突破65535的限制
        multiDexEnabled true
    }
  }
  • configuración de firma
    signingConfigs {
        debug {
            keyAlias 'kits'
            keyPassword '888888'
            storeFile file("kitskeystore.jks")
            storePassword '888888'
        }
        release {
            //key别名
            keyAlias 'kits'
            //key密码
            keyPassword '888888'
            //密钥文件路径
            storeFile file("kitskeystore.jks")
            //密钥文件密码
            storePassword '888888'
        }
    }
  • Configuración ofuscada
buildTypes {
    release {
        minifyEnabled true
         //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,指定混淆规则文件
        proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'            
        signingConfig signingConfigs.release
    }
}
  • embalaje multicanal
 productFlavors {
        googleplay {}
        huawei {}
        xiaomi {}
        wandoujia {}
        baidu {}
        yingyongbao {}
        android360 {}
        uc {}
        umeng {}
        meizu{}
        //批量配置
        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
 
    }
  • Importación de archivos .so
task copyNativeLibs(type: Copy) {
    from fileTree(dir: 'libs', include: 'armeabi/*.so') into 'build/lib'
}
tasks.withType(Compile) {
    options.encoding = "UTF-8"
}
tasks.withType(Compile) {
    compileTask -> compileTask.dependsOn copyNativeLibs
}
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { 
    pkgTask ->pkgTask.jniFolders = [new File(buildDir, 'lib')]
}
  • biblioteca dependiente
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
  • Definición de paquetes dependientes
dependencies {
    classpath 'com.android.tools.build:gradle:0.4'
}

embalaje multicanal

1. Registro e inicio de sesión de la cuenta Umeng

Dirección de registro de la cuenta Youmeng , siga los pasos para completar el proceso de registro, el método es simple y puede completarlo usted mismo

2. Descarga del SDK

La dirección de descarga del paquete jar . Una vez completada la descarga, descomprímalo y agregue el paquete jar al directorio libs.

Configuración de dependencia de Gradle: agregue la siguiente configuración al archivo build.gradle

dependencies {
     compile 'com.umeng.analytics:analytics:latest.integration'
}

3. Obtenga la clave de la aplicación Umeng

(1) Ingrese a la página de inicio de Umeng, seleccione Estadísticas de la aplicación, haga clic en Usar ahora e ingrese a la página Mi producto

(2) Agregue una nueva solicitud, complete la información relevante de acuerdo con la información solicitada, envíela y obtenga la clave de aplicación

4. Configure AppKey en AndroidMainfest.xml

Agregue los siguientes permisos relacionados y parámetros relacionados de Youmeng

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 
    <application ……>
    ……
    <activity ……/>
        <meta-data
            android:name="UMENG_APPKEY"
            android:value="YOUR_APP_KEY" />
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="Channel ID" />
    </application>

Los pasos de integración del SDK de Youmeng están bien aquí. Si aún no comprende algo, puede consultar el documento de integración oficial proporcionado por Youmeng.

A continuación, hablemos de los pasos de configuración del empaquetado multicanal.

5. Agregue el nombre del paquete del canal y configure diferentes estilos de APLICACIÓN

  productFlavors {
        googleplay {}
        huawei {}
        xiaomi {}
        wandoujia {}
        baidu {}
        yingyongbao {}
        android360 {}
        uc {}
        umeng {}
        meizu{}
        //批量配置
        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
 
    }

Finalmente, en el símbolo del sistema de la Terminal, ingrese el comando gradlew ensamblarRelease y espere a que se complete el trabajo de empaquetado.

Una vez completado el empaquetado, puede ver la lista de apk empaquetados en el directorio nombre del proyecto actual\app\build\outputs\apk\. ¿Cree que es mucho más simple que el método de empaquetado anterior y la eficiencia también ha mejorado mucho? ?

Aquí enumero varios otros comandos para usar, de la siguiente manera:

gradlew assembleRelease //创建新任务打包所有渠道包的release版本apk
gradlew assembleDebug //创建新任务打包所有渠道包的debug版本apk
gradlew assemblebaiduRelease //创建新任务打包指定渠道包(百度)的release版本apk

Aunque el trabajo de empaquetado se ha completado, todos saben que el apk empaquetado no se ha firmado en este momento y, por supuesto, no se puede lanzar al mercado de aplicaciones sin una firma.

lanzamiento de firma apk

(1) En la barra de menú de Android Studio, seleccione Construir------>Generar APK firmado...

(2) Cree un almacén de claves y una clave, haga clic en el botón "Gran nuevo ..." para crear un almacén de claves

(3) Precauciones para crear un almacén de claves

这里注意一下信息项需填写哪些信息:

Key store path:密钥库文件的地址
Password/Confirm:密钥库的密码
Alias:密钥名称
Password/Confirm:密钥密码
Validity(years):密钥有效时间,一般默认25年
First and Last Name:密钥颁发者姓名
Organizational Unit:密钥颁发组织
City or Locality:城市
Country Code(XX):国家代码

(4) Después de hacer clic en Finalizar, vaya a la página de ingreso de contraseña

(5) Haga clic en el botón Siguiente, seleccione todos los canales o canales específicos y haga clic en el botón Finalizar para llevar a cabo la tarea de firmar y empaquetar.

(6) Seleccione el tipo de compilación y los sabores

(7) Una vez firmados y empaquetados todos los paquetes de canales, se pueden lanzar a los principales mercados de aplicaciones.

Por cierto, hay otra forma de firmar, déjame popularizarla para todos.

 在buidle.gradle文件中添加签名配置信息以及buildTypes配置信息如下:

//签名配置
    signingConfigs {
        debug {
            keyAlias 'kits'
            keyPassword '888888'
            storeFile file("kitskeystore.jks")
            storePassword '888888'
        }
        release {
            //key别名
            keyAlias 'kits'
            //key密码
            keyPassword '888888'
            //密钥文件路径
            storeFile file("kitskeystore.jks")
            //密钥文件密码
            storePassword '888888'
        }
    }
 
  buildTypes {
        debug {
            // 显示Log
            buildConfigField "boolean", "LOG_DEBUG", "true"
            // apk包名称后缀,用来区分release和debug
            versionNameSuffix "-debug"
            signingConfig signingConfigs.debug
        }
        release {
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //开启混淆
            minifyEnabled true
            // 移除无用的resource文件
            shrinkResources true
            //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,指定混淆规则文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }

Tenga en cuenta que configuré la misma información de configuración tanto para la versión de depuración como para la versión de lanzamiento. En el proceso de desarrollo normal, la configuración de depuración puede utilizar la información de configuración predeterminada de Android Studio.

Una vez completada la configuración, en el símbolo del sistema de la Terminal, ingrese el comando gradlew ensamblarRelease

Resultado del paquete

Al empaquetar el archivo apk, también puede modificar el nombre del archivo, como agregar información de tiempo o versión svn al nombre del archivo apk, para que sea conveniente encontrar el apk, etc.

Agregue el tiempo de empaquetado al nombre de la apk, la operación del código específico es la siguiente:

  applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        // 输出apk名称为dt_android360_v1.0_0705114322.apk
                        def fileName = "dt_${variant.productFlavors[0].name}_v${defaultConfig.versionName}_${new Date().format("MMddhhmmss")}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }

Finalmente, les enviaré el contenido completo de la versión completa del archivo build.gradle. Al mismo tiempo, el archivo también agregó notas para que todos puedan leer y comprender.

apply plugin: 'com.android.application'
 
android {
    //编译SDK的版本
    compileSdkVersion 23
    //编译的tools版本
    buildToolsVersion "23.0.3"
 
    defaultConfig {
        //当前应用包名
        applicationId "com.chenyk.androidkits"
        //支持的最低版本
        minSdkVersion 9
        //支持的目标版本
        targetSdkVersion 22
        //版本号
        versionCode 1
        //版本名
        versionName "1.0"
        // dex突破65535的限制
        multiDexEnabled true
    }
    //执行lint检查,有任何的错误或者警告提示,都会终止构建,现将其关掉。
    lintOptions {
        abortOnError false
    }
 
    //签名配置
    signingConfigs {
        debug {
            keyAlias 'kits'
            keyPassword '888888'
            storeFile file("kitskeystore.jks")
            storePassword '888888'
        }
        release {
            //key别名
            keyAlias 'kits'
            //key密码
            keyPassword '888888'
            //密钥文件路径
            storeFile file("kitskeystore.jks")
            //密钥文件密码
            storePassword '888888'
        }
    }
 
    buildTypes {
        debug {
            // 显示Log
            buildConfigField "boolean", "LOG_DEBUG", "true"
            // apk包名称后缀,用来区分release和debug
            versionNameSuffix "-debug"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
            signingConfig signingConfigs.debug
        }
        release {
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //开启混淆
            minifyEnabled true
            //Zipalign优化
            zipAlignEnabled true
            // 移除无用的resource文件
            shrinkResources true
            //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,指定混淆规则文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
            //修改输出文件的名称
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        // 输出apk名称为dt_android360_v1.0_0705114322.apk
                        def fileName = "dt_${variant.productFlavors[0].name}_v${defaultConfig.versionName}_${new Date().format("MMddhhmmss")}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }
        }
    }
    //渠道Flavors,配置不同风格的app
    productFlavors {
        googleplay {}
        huawei {}
        xiaomi {}
        wandoujia {}
        baidu {}
        yingyongbao {}
        android360 {}
        uc {}
        umeng {}
        meizu{}
        //批量配置
        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
 
    }
}
 
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    implementation 'com.android.support:appcompat-v7:23.4.0'
    implementation 'com.android.support:design:23.2.0'
    implementation project(':jpushkit')
    implementation project(':commkit')
    implementation project(':asynchttpkit')
    implementation project(':jskit')
    implementation project(':appkit')
    implementation project(':photokit')
    implementation project(':retrofitkit')
    implementation project(':zxingkit')
}

Si tienes alguna pregunta, puedes agregarme para chatear con WeChat en yf1553653788.

Supongo que te gusta

Origin blog.csdn.net/Ai1114/article/details/125784960
Recomendado
Clasificación