Android Studio的使用之 多渠道打包

原文链接:
http://my.oschina.net/aibenben/blog/370577
http://my.oschina.net/aibenben/blog/370985

第一就是配置:在项目的build.gradle里面配置 先上图,再上代码。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

第二步,就是打包。(网上有介绍用命令打包,可是我这人太懒,发现了个小窍门,直接在android studio 里面进行。)上图(另外,后面我还是补上了gradle命令打包的介绍。大家可以看看http://my.oschina.net/aibenben/blog/370985

这里写图片描述

如果没有keystore,先创建一个,默认为.jks文件,一样的。

这里写图片描述

这里写图片描述

大家这里创建完后,可以再回头看看前面配置的build.gradle里面signingConfigs的内容。是不是就懂了(其实我这里有一个疑问,感觉如果用我这种方式去打包,签名文件都没有去读取配置文件里面的了)

这里写图片描述

大家可以注意这里的Flavors,先回头看看前面配置的buld.gradle文件里面的productFlavors,嘿嘿,渠道都在这了,按住ctrl,选择你要打包的渠道,然后Finish.静静等待。需要要时间

这里写图片描述

打包成功!点击直接会进入到项目

这里写图片描述

这里写图片描述

—-当然,打包的过程中,好多盆友可能会遇到一个错误.导致打包失败。
Execution failed for task ‘:proguardGooglePlayRelease’.java.io.IOException: Can’t write [D:\androidstudiocode\Demo4\build\intermediates\classes-proguard\GooglePlay\release\classes.jar] (Can’t read [D:\androidstudiocode\Demo4\build\intermediates\exploded-aar\Demo4\appcompat_v7_8\unspecified\libs\android-support-v4.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [android/support/v4/b/d.class == android-support-v4.jar:android/support/v4/os/ParcelableCompatCreatorHoneycombMR2.class]))
是因为混淆打包的时候,有重复的v4包,所以你只需要删掉一个,在Demo4这个项目里面,我是直接注释掉

这里写图片描述
再打包,等待,成功。
打包成功,我们可以验证 Android 多渠道打包渠道验证 .

最后直接贴上配置代码

apply plugin: 'com.android.application'

    dependencies {
     // compile fileTree(dir: 'libs', include: '*.jar')
        compile project(':appcompat_v7_8')
    }
    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.0.0'

        }
    }
    android {
        compileSdkVersion 19
        buildToolsVersion "21.0.2"

        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
            }

            // Move the tests to tests/java, tests/res, etc...
            instrumentTest.setRoot('tests')

            // Move the build types to build-types/<type>
            // For instance, build-types/debug/java, build-       types/debug/AndroidManifest.xml, ...
            // This moves them out of them default location under src/<type>/... which would
            // conflict with src/ being used by the main source set.
            // Adding new build types or product flavors should be accompanied
            // by a similar customization.
            debug.setRoot('build-types/debug')
            release.setRoot('build-types/release')
        }

        defaultConfig {
            applicationId "com.example.demo4"
            minSdkVersion 8
            targetSdkVersion 19
            versionCode 1
            versionName "1.0"

            // dex突破65535的限制
            multiDexEnabled true
           // AndroidManifest.xml 里面UMENG_CHANNEL的value为 ${UMENG_CHANNEL_VALUE}
            // manifestPlaceholders = [UMENG_CHANNEL_VALUE: "channel_name"]
        }
        //执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。
        lintOptions {
            abortOnError false
        }

        //签名
        signingConfigs {
            debug {
                storeFile file("C:/Users/xxx/.android/debug.keystore")
            }
            relealse {
                storeFile file("demo.jks")
                storePassword "demo123456"
                keyAlias "demo_4"
                keyPassword "demo123456"
            }
        }
        buildTypes {
            debug {
                // 显示Log
                buildConfigField "boolean", "LOG_DEBUG", "true"

                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
                //加载默认混淆配置文件 progudard-android.txt在sdk目录里面,不用管,proguard.cfg是我们自己配<span></span>的混淆文件
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg'
                //签名
                signingConfig signingConfigs.relealse
            }
        }
        //渠道Flavors,我这里写了一些常用的
        productFlavors {
            GooglePlay {}
            xiaomi {}
            umeng {}
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }



        productFlavors.all { flavor ->
                flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
        applicationVariants.all { variant ->
                variant.outputs.each{ output ->
                defoutputFile = output.outputFile
            if(outputFile != null&& outputFile.name.endsWith('.apk')) {
                deffileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
                output.outputFile = newFile(outputFile.parent, fileName)
            }
        }
        }
    }

接下来我会介绍build命令打包
1,配置文件还是和之前的一样,上述的代码
2.我们直接在dos命令定位到Demo4的项目目录(如果你用的是win7,可以直接先进入到项目目录,然后在空白处,先按住shift,再点右键选择”在此处打开命令窗口”)

这里写图片描述

a,输入命令 :gradle clean

这里写图片描述

b,输入命令:gradle build 然后等待。时间会比较长

这里写图片描述

直到build successfule.细心的朋友应该会发现项目目录多了一个build文件夹。

这里写图片描述

这里写图片描述

大家会发现里面 debug版本,release版本都有,所以速度慢。我们一般只需要正式签名版本,所以我们在gradle clean后可以这样
输入命令:gradle assembleRelease // 这是编译并打Release的包
然后会发现时间比前面要快,而且apk文件里面只有release版本的了。

这里写图片描述

另外我们如果只想要debug版本,输入命令gradle assembleDebug

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值