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

安卓ADT项目及升级AS(Android Studio)全攻略

2016-05-06 10:35 489 查看
安卓ADT项目及升级AS全攻略...1

1 ADT项目(即原Eclipse开发环境下项目)打包、签名、混淆配置...2

1.1 生成签名文件...2

1.2 打包配置...2

2 Eclipse项目升级至AS项目及升级过程遇到问题...7

2.1 首先将原先项目复制一份出来(避免损坏原项目),记为project_tag..7

2.2 打开AS选择Import
project (Eclipse ADT,Gradle,etc)7

3 AS项目多渠道混淆打包...7

3.1 生成签名文件就不多说,同上...7

3.2 添加签名文件(步骤如下)7

3.3 多渠道及混淆配置...8

1 ADT项目(即原Eclipse开发环境下项目)打包、签名、混淆配置

1.1 生成签名文件

dos下进入JDK的bin目录

运行如下命令:

keytool -genkey-alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore

(-validity 20000代表有效期天数),命令完成后,bin目录中会生成android.keystore

查看命令keytool-list -keystore "android.keystore" 输入你设置的keystore密码

输入密钥库口令

<-------->

您的名字与姓氏是什么?

<-------->

您的组织单位名称是什么?

<-------->

您的组织名称是什么?

<-------->

您所在的城市或区域名称是什么?

<-------->

您所在的省/市/自治区名称是什么?

<-------->

该单位的双字母国家/地区代码是什么?

<-------->

y

输入 <xxxxxx.keystore>的密钥口令

<-------->

输入后回车即可完成

1.2 打包配置

Ø 将1.1中生成的签名文件放入主工程目录(即classpath能识别的目录)下;

Ø 打开cmd命令并分别切换至对应项目目录下:

n 主工程项目执行android update project -n 项目名 -p ./

n 类库项目执行android update lib-project -p ./

Ø 在主工程项目下创建ant.properties文件(内容如下)

key.store=签名文件名

key.alias=签名文件别名

key.store.password=签名文件密码

key.alias.password=签名文件别名密码

apk.dir=生成APK存放路径

app.name=项目名称

market_channels=渠道标识中间用智短号分隔

test.tag.name=debug(测试包标识)

release.tag.name=release(正式包标识)

tz.dir=..\\工程项目

其它项目目录只要与tz.dir放在同一目录下,写法类似;

Ø 在主工程项目下创建custom_rule.xml文件(内容如下)

【配置之前需安装好ant环境】

<?xmlversion="1.0" encoding="UTF-8"?>

<projectname="custom_rules" >

<!-- 引用ant-contlib这个扩展包,声明一下 -->

<taskdefresource="net/sf/antcontrib/antcontrib.properties" >

<classpath>

<!—其中ANT_HOM为ant安装目录的环境变量-->

<pathelement location="${ant.ANT_HOME}/lib/ant-contrib-1.0b3.jar"/>

</classpath>

</taskdef>

<!-- 定义一个时间变量,打完包后跟渠道号一起命名apk -->

<tstamp>

<format

pattern="yyyyMMddhhmm"

property="pktime"

unit="hour" />

</tstamp>

<!-- 创建apk存放目录 -->

<mkdir dir="${apk.dir}" >

</mkdir>

<!-- 将第三方jar包添加到classpath变量中 -->

<target name="-pre-compile" >

<echomessage="JARPATH=${toString:project.all.jars.path}" >

</echo>

<!—若有多个循环添加以下标深绿色背景部分-->

<property

<!—工程项目第三方库配置,其它项目配置类似-->

name="tz.jars"

value="${tz.dir}/libs">

</property>

<path id="tz.lib" >

<pathpath="${toString:project.all.jars.path}" >

</path>

<pathelementlocation="${tz.jars}/第三方包(jar或so)路径 " >

</pathelement>

</path>

<path id="project.all.jars.path">

<path refid="tz.lib" >

</path>

</path>

<echomessage="JARPATH=${toString:project.all.jars.path}" >

</echo>

</target>

<!-- 替换参数 然后打包APK, deploytest打测试包标识-->

<target name="deploytest" >

<antcalltarget="foreach_replacechannel" >

<param

name="deploy_environment"

value="${test.tag.name}"/>

</antcall>

</target>

<!—deployrel,打正式包标识-->

<target name="deployrel" >

<antcall target="foreach_replacechannel">

<param

name="deploy_environment"

value="${release.tag.name}" />

</antcall>

</target>

<!-- singlerelease ,打单个正式包标识-->

<target name="singlerelease" >

<antcall target="modify_manifest_for_singlerelease">

<param

name="deploy_environment"

value="${release.tag.name}" />

</antcall>

</target>

<!—singledebug,打单个测试包标识-->

<target name="singledebug" >

<antcall target="modify_manifest_for_singledebug">

<param

name="deploy_environment"

value="${test.tag.name}" />

</antcall>

</target>

<!—打包时循环替换渠道号-->

<target name="foreach_replacechannel">

<foreach

delimiter=","

list="${market_channels}"

param="channel"

target="modify_manifest">

</foreach>

</target>

<target name="modify_manifest">

<replaceregexp

byline="false"

encoding="UTF-8"

flags="g" >

<regexppattern="android:name="TA_CHANNEL"\s*android:value="(.*)""/>

<substitutionexpression="android:name="TA_CHANNEL"

android:value="${channel}""/>

<fileset

dir=""

includes="AndroidManifest.xml" />

</replaceregexp>

<!-- 这里设置最终生成包的存放目录以及apk的名称,注意这里是文件名称,所以变量中不允许出现违规字符,否则将无法生成最终的apk(会出现output is not valid 的错误) -->

<property

name="out.final.file"

location="${apk.dir}/${app.name}_${channel}_${deploy_environment}_${pktime}.apk"/>

<antcall target="clean" />

<antcall target="release"/>

</target>

<target name="modify_manifest_for_singlerelease">

<!-- 这里设置最终生成包的存放目录以及apk的名称,注意这里是文件名称,所以变量中不允许出现违规字符,否则将无法生成最终的apk(会出现output is not valid 的错误) -->

<property

name="out.final.file"

location="${apk.dir}/${app.name}_${deploy_environment}_${pktime}.apk"/>

<antcall target="clean" />

<antcall target="release"/>

</target>

<target name="modify_manifest_for_singledebug">

<!-- 这里设置最终生成包的存放目录以及apk的名称,注意这里是文件名称,所以变量中不允许出现违规字符,否则将无法生成最终的apk(会出现output is not valid 的错误) -->

<property

name="out.final.file"

location="${apk.dir}/${app.name}_${deploy_environment}_${pktime}.apk"/>

<antcall target="clean" />

<antcall target="debug"/>

</target>

</project>

此时多渠道打包相关配置完成

Ø 在主工程项目下创建proguard-project.txt文件,创建好后在project.properties文件中做关联(proguard.config=proguard-project.txt)

-dontoptimize

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-verbose

-dontwarn

-dontpreverify

-ignorewarnings

-optimizationpasses5

-optimizations!code/simplification/arithmetic,!field/*,!class/merging/*

-keepattributesSignature,InnerClasses,LineNumberTable

<!—排除第三方混淆包-->

-libraryjars..\\项目\第三方包路径

-keepclass android.support.v4.** { *; }

-keeppublic class * extends android.support.v4.**

-keeppublic class * extends android.app.Fragment

-keeppublic class * extends android.app.Activity

-keeppublic class * extends android.app.Application

-keeppublic class * extends android.app.Service

-keeppublic class * extends android.app.View

-keeppublic class * extends android.content.BroadcastReceiver

-keeppublic class * extends android.content.ContentProvider

-keeppublic class * extends android.app.backup.BackupAgentHelper

-keeppublic class * extends android.preference.Preference

-keepclassmembersclass * implements java.io.Serializable {

static final long serialVersionUID;

private static final java.io.ObjectStreamField[]serialPersistentFields;

private voidwriteObject(java.io.ObjectOutputStream);

private voidreadObject(java.io.ObjectInputStream);

java.lang.Object writeReplace();

java.lang.Object readResolve();

}

-keepclasseswithmembernamesclass * {

native <methods>;

}

-keepclasseswithmembernamesclass * {

public<init>(android.content.Context, android.util.AttributeSet);

}

-keepclasseswithmembernamesclass * {

public<init>(android.content.Context, android.util.AttributeSet, int);

}

-keepclassmembersclass * extends android.app.Activity {

public void *(android.view.View);

}

-keepclassmembersenum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keepclass * implements android.os.Parcelable {

public static finalandroid.os.Parcelable$Creator *;

}

-keep class * extends java.lang.annotation.Annotation {*;}

最后根据实际需要排除项目相关包及类文件

【此时对于eclipse项目多渠道、混淆、签名打包基本配置完成】

Ø 执行命令进行打包

n 选中需要的打包的项目右击——》刷新

n cmd进入到主工程目录执行ant clean;

n 执行ant release/debug(或deployrel)进行打包;

2 Eclipse项目升级至AS项目及升级过程遇到问题

2.1 首先将原先项目复制一份出来(避免损坏原项目),记为project_tag

2.2 打开AS选择Importproject (Eclipse ADT,Gradle,etc)

Ø 选择要转换的项目工程,单击“OK”->下一步,去掉

一直Next即可完成;

Ø 转换后项目可能无法直接运行主要因为以下几个原因导致;

n 图片问题,可能部分图片不是真正png格式;需要通过TotalImageConverter工具转一下;

n 资源配置文件语言问题,需要在头部添加忽略MissingTranslation(示例如下)

<?xml version="1.0" encoding="utf-8"?>

<resources

xmlns:tools="http://schemas.android.com/tools"

tools:ignore="MissingTranslation">

</resources>

【解决以上两个问题项目基本可以运行,当然打包、混淆、多渠道需重新配置与Eclipse项目有区别;继续往下看】

3 AS项目多渠道混淆打包

3.1 生成签名文件就不多说,同上

3.2 添加签名文件(步骤如下)

Ø

Ø 选择工程Modules

Ø 创建签名标识并选择签名文件、设置密码

Ø 配置构建类型

【此时签名相关配置已完成】

3.3 多渠道及混淆配置

1. 如果混淆文件在当前工程下(即Gradle Scripts),那在buildTypes——>release下新增proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'即可;

2. 如果混淆文件放在其它位置,则可通过3.2中配置构建类型的Proguard File选择即中;

3. 混淆过程与Eclipse项目没多大区别可参考上面;

4. 多渠道配置如下:

productFlavors{

updateapks {}

baiduzhushou {}

qiuyaozhushou {}

anzhuoshichang {}

yingyongbao{}

wandoujia{}

sanliuling{}

huaweishichang{}

pgyer{}

sinaweibo{}

productFlavors.all { flavor ->

flavor.manifestPlaceholders =[TA_CHANNEL: name]

}

}

基本TA_CHANNEL为Mefester.xml渠道标识名称

【配置好后在右边选择Gradle,刷新后选择工程项目在build会出现对应多个渠道打包标识】(如下图)

5. 命令行统一生成多渠道

Ø 在android studio底栏中有个命令行工具Terminal,打开后就CMD可以自动切换到当前项目的目录下

Ø 有的项目下会有graldew.bat这个文件,你就可以输入这个命令:

gradlew assembleRelease

就可以一次性生成所有的渠道包了

【在执行以上命令之前最好先设置以下环境变量】

变量名为:GRADLE_HOME,变量值就为gradle的根目录;

所以变量值为:C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1

还有一个在系统变量里PATH里面添加gradle的bin目录

我的就是C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1\bin

安卓ADT项目及升级AS(Android Studio)全攻略.docx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: