• Gradle 多渠道打包的使用和错误分析


    刚接触到android的开发,对什么都陌生的,本文是自己在项目中使用的技术要点总结,大咖遇到可直接飘过。。。。。

    1.Gradle 打包(不废话了直接来脚本),将下列脚本放到build.gradle文件android{}内;

     1     defaultConfig{
     2         //applicationId "" //应用包名
     3         minSdkVersion 9       //sdk最小支持版本
     4         targetSdkVersion 17   //sdk目标版本
     5         versionCode 1
     6         versionName "1.0"
     7 
     8         //dex突破65535限制
     9         multiDexEnabled true
    10 
    11         // AndroidManifest.xml 里面UMENG_CHANNEL的value为 ${UMENG_CHANNEL_VALUE}
    12         //manifestPlaceholders = [UMENG_CHANNEL_VALUE:""]
    13     }
    14 
    15     //执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。
    16     lintOptions{
    17         abortOnError false
    18     }
    19 
    20     //签名
    21     signingConfigs{
    22         myConfig{
    23             storeFile file("123456") //签名文件路径
    24             storePassword "123456"
    25             keyAlias "123456"
    26             keyPassword "123456"
    27         }
    28     }
    29 
    30 
    31     buildTypes {
    32         release {
    33             // 不显示Log
    34             buildConfigField "boolean", "LOG_DEBUG", "false"
    35             //混淆
    36             minifyEnabled true
    37             //Zipalign优化
    38             zipAlignEnabled true
    39             // 移除无用的resource文件
    40             shrinkResources true
    41             //加载默认混淆配置文件 progudard-android.txt在sdk目录里面,不用管,proguard.cfg是我们自己配<span></span>的混淆文件
    42             proguardFiles getDefaultProguardFile('proguard-android.txt')
    43             proguardFile 'proguard.cfg'
    44             //签名
    45             signingConfig signingConfigs.myConfig
    46         }
    47     }
    48 
    49     //flavorDimensions "abi"
    50 
    51     //渠道Flavors,我这里写了一些常用的
    52     productFlavors {
    53         _360 {
    54         }
    55         xiaomi {
    56         }
    57     }
    58 
    59 
    60     productFlavors.all { flavor ->
    61         flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    62     }
    63 
    64 
    65     applicationVariants.all { variant ->
    66         variant.outputs.each { output ->
    67             def outputFile = output.outputFile
    68             if (outputFile != null && outputFile.name.endsWith('.apk')) {
    69                 
    70                 // 输出apk名称为appName_v1.0.apk
    71                 def fileName = "${variant.productFlavors[0].name}_v${defaultConfig.versionName}.apk"
    72                 output.outputFile = new File(outputFile.parent, fileName)
    73             }
    74         }
    75     }

    然后 使用 gradle clean assembleRelease -d(输出debug信息) 一般就会成功打出360和小米的渠道包。

    Notes:

    1.混淆文件问题

    proguard.ParseException: Unknown option '锘?--dump.txt

    先查看混淆配置文件的编码和然后最将文件修改为proguard.cfg,并打开查看文件中命令行被识别为止;

    2.引用第三方jar问题

    Execution failed for task java.io.IOException: Can't write ‘ ’ Can't read

    查看引用第三方jar包是否被多次引用(删除被多次引用jar),引用依赖maven的写法

    dependencies {
        compile 'com.android.support:support-v4:13.0.0'
    }

    并且Can't read后面跟着的jar在libs中删除。

    (使用Gradle2.2.1 eclipse转android studio项目)

  • 相关阅读:
    多线程
    JavaSE
    SpringBoot是什么,可以做什么?
    SSM框架中如何简便上传文件表单
    SQL语句全解,非常棒!
    关于HttpSession 和 Hibernate框架中 session异同点的简单解析
    关于Javascript中页面动态钟表的简单实现
    Java 面向对象 知识点基础浅谈
    Eclipse无法正常启动,弹出对话框内容为 A Java Runtime...
    关于Java中面向对象章节、IO 流中的重点基础知识。
  • 原文地址:https://www.cnblogs.com/aland/p/4482825.html
Copyright © 2020-2023  润新知