Android studio 使用心得(四)—android studio 多渠道打包 这篇文章讲了一种打包方式。是直接在android studio 里面可视化操作,结合配置文件。我个人觉得严格上来讲是不完全正确的操作,因为配置文件里面的签名文件根本没有用到。但是,打出来的包绝对没问题的。这篇主要是介绍直接在dos命令里面使用gradle命令打包。两行命令,简单gradle clean ,gradle build。
1,配置文件还是和之前的一样,我才贴一次代码
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
apply plugin: 'com.android.application' dependencies { // <span></span>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 { //这样写就得把demo.jk文件放在项目目录 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 //加载默认混淆配置文件 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) } } } } |
2.我们直接在dos命令定位到Demo4的项目目录(如果你用的是win7,可以直接先进入到项目目录,然后在空白处,先按住shift,再点右键选择”在此处打开命令窗口”)
a,输入命令 :gradle clean
b,输入命令:gradle build 然后等待。时间会比较长
直到build successfule.细心的朋友应该会发现项目目录多了一个build文件夹。
我们打包好的apk就在里面。
大家会发现里面 debug版本,release版本都有,所以速度慢。我们一般只需要正式签名版本,所以我们在gradleclean后可以这样
输入命令:gradle assembleRelease // 这是编译并打Release的包
然后会发现时间比前面要快,而且apk文件里面只有release版本的了。
另外我们如果只想要debug版本,输入命令gradle assembleDebug //这是编译并打Debug包