您的位置:首页 > 移动开发 > Android开发

AndroidStudio使用心得-打包发布

2014-11-06 14:12 330 查看
到了最重要的环节了,这也是gradle真正出场的环节。作为自动化构建工具,他有什么好处,与maven、ant之间有什么联系区别什么的,这里我们就不讨论了。

我一般在AndroidStudio里面在terminal中进行命令输入。无论你选择在cmd里面去输入还是在AndroidStudio里面输入,都请先安装gradle,可能要翻墙,大家自己寻找翻墙软件

装好gradle,需要在环境变量path下面配置一下路径,配置完之后请重启电脑(这边我就纳闷了,java跟android配置Path时候都不需要重启,gradle为什么不重启就不行呢)



重启之后回来,在cmd里面验证一下是否配置成功,输入gradle -v,如果有相应版本信息,证明ok



这时候启动AndroidStudio,在设置中进行如下设置



这时候,就可以在terminal里面玩了,同样也先验证下正确性,同样输入gradle -v

如果结果跟之前一致,那么就OK了



好了,我们下面正式开始打包工作

先在build.gradle里面加上这句话,否则在build的时候会出现lint检查错误,注意,需将所有module都加上这句话,我这里面2个module都要加上

lintOptions {
abortOnError false
}


然后,在terminal 里面输入gradle clean,这个命令可以把之前打包所产生的所有文件全部清除

success之后,输入gradle build

build过程中出现fail什么的,原因也是比较明显的,经过相应google,还是可以比较容易解决的

举个例子,刚才我漏加一个module的lint错误忽略,就会报错了



说的还是很清楚的,在library模块里面lint发现错误了。

同样经过一会之后,build也显示success了,这时候我们进入项目目录里面去看看/AndroidStudioDemo/app/build/outputs/apk,这里面有三个文件,都是没有签名的测试版与正式版



现在我们要发布正式版了,要加上签名,怎么搞呢

先把我们的key放到app目录下,不然加配置文件时候会找不到key,



添加相应的配置文件,signingConfigs节点这是在把我们key相关信息描述出来,然后buildTypes里面进行引用

apply plugin: 'com.android.application'

android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
applicationId "com.renyu.androidstudiodemo"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
signingConfigs {
myConfig{
storeFile file("android.keystore")
storePassword "abcd1234"
keyAlias "android.keystore"
keyPassword "abcd1234"
}
}
buildTypes {
release {
signingConfig signingConfigs.myConfig
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions { abortOnError false }
productFlavors {
}
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:support-v4:21.0.0'
compile files('libs/pinyin4j-2.5.0.jar')
compile project(':library')
}


这时候,再次gradle clean与gradle build,我们得到的包就跟之前有所区别了



多了一个app-release.apk,这个就是带签名的正式版。

一般情况下,我们还会发布到各个应用市场,这时候我们怎么分渠道打包呢,其实也很简单,虽然我找了很多说明,但是都不适合,最后自己瞎搞了一套

1.在任意目录下创建你要生成的每个渠道包的manifest,我这边创建百度跟豌豆荚的



我放出其中一个渠道包manifest作为示例分析

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.renyu.androidstudiodemo.bd" >

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="channel_third"
android:value="bd" />
<activity
android:name="com.renyu.androidstudiodemo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>注意这边有2个注意点,渠道包们package不能相同,不然报错,我们这边就随便搞个名称,反正最后打包的时候都会改掉;还有一个就是渠道名称meta-data,主包的meta-data会被拷贝到这个子渠道包里面去,所以key值不能相同
下面再把主manifest贴出来对比下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.renyu.androidstudiodemo" >

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="channel"
android:value="channelvalue" />
<activity
android:name="com.renyu.androidstudiodemo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


最后上配置文件,继续build.gradle
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
}
bd {
manifest.srcFile 'src/main/channel/AndroidManifest_bd.xml'
}
wdj {
manifest.srcFile 'src/main/channel/AndroidManifest_wdj.xml'
}
}
productFlavors {
bd {
packageName='com.renyu.androidstudiodemo.bd'
}
wdj {
packageName='com.renyu.androidstudiodemo.wdj'
}
}sourceSets就是配置刚才我们自定义的那2个manifest文件,对应productFlavors文件里面的包名,然后gradle clean 和gradle build
这时候就生成了2组共8个包



我们来检验下,表面上看上去是ok的,我们打开豌豆荚包的manifest,注意包名跟渠道参数, 均符合预期(这边注意,打出来的包在apkTool里面无法正常反编译,请使用RootExplorer进入/data/app目录下找到相应app,进入manifest查看)



至此,全系列就结束了,欢迎大家拍砖
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  androidstudio gradle
相关文章推荐