Android studio 使用心得(四)---android studio 多渠道打包

之前有发表过一篇android studio 打包的文章http://my.oschina.net/aibenben/blog/350967。今天这个是介绍多渠道打包,继续以Demo4为例

 

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

 

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

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

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

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

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

 

打包好的apk,就在这了。

 

 ----当然,打包的过程中,好多盆友可能会遇到一个错误.导致打包失败。

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 多渠道打包渠道验证 .

 

最后直接贴上配置代码

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
       // 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 ->
             def outputFile = output.outputFile
             if (outputFile != null && outputFile.name.endsWith( '.apk' )) {
                 def fileName = outputFile.name.replace( ".apk" , "-${defaultConfig.versionName}.apk" )
                 output.outputFile = new File(outputFile.parent, fileName)
             }
         }
     }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值