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

安卓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=&quot;TA_CHANNEL&quot;\s*android:value=&quot;(.*)&quot;"/>

<substitutionexpression="android:name=&quot;TA_CHANNEL&quot;

android:value=&quot;${channel}&quot;"/>

<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

时间: 2024-11-05 16:35:08

安卓ADT项目及升级AS(Android Studio)全攻略的相关文章

Android适配全攻略(学习笔记总结)

一.为什么要进行屏幕适配 某厂商统计如下数据 2012年,支持Android的设备共有3997种 2013年,支持Android的设备共有11868种 2014年,支持Android的设备共有18796种 2015年,支持Android的设备的共有24093种 http://www.sfw.cn/xinwen/471726.html(2015年统计,里面包含android设备,厂家,碎片化) 二.屏幕适配对象 我们到底应该对哪些屏幕进行适配 首先来看下最新的Android设备分辨率(2016年)

大型ECShop安装搬家升级错误问题最全攻略

[引子] 最近将ECShop框架网站从租用服务器搬家至阿里云,虽然模块及功能上已经被修改的面目全非了,但基础部分还在. 在这个过程中遇到了很多的WARNING与ERROR,解决方案如下. [环境] 服务器环境由PHP5.3+MySQL5.6更新至PHP5.6+MySQL5.7 [数据库] 利用navicat for mysql工具导入导出,出现异常:Invalid default value for 'create_time',具体可参考上一篇随笔.http://www.cnblogs.com/

Android 升级到android studio 2.2项目死活run不起来

背景:升级到Android studio 2.2项目死活运行不起来 现象如下: run with --stacktrace --debug等等抛出的bug简直无法忍视 解决办法:把compileSdkVersion 改为23成功run起来了

fiddler Android下https抓包全攻略

fiddler Android下https抓包全攻略 fiddler的http.https的抓包功能非常强大,可非常便捷得对包进行断点跟踪和回放,但是普通的配置对于像招商银行.支付宝.陌陌这样的APP是抓不到包的,需要一些特殊的配置,本文把fiddler Android下https抓包的详细配置都罗列出来,供大家参考. 一.普通https抓包设置 先对Fiddler进行设置: 勾选“CaptureHTTPS CONNECTs”,接着勾选“Decrypt HTTPS traffic”.同时,由于我

Android屏幕适配全攻略(最权威的官方适配指导)

Android屏幕适配全攻略(最权威的官方适配指导)

&lt;2014 05 10&gt; Android平台开发攻略

1.标准SDK开发: IDE: Eclipse Netbeans Language: Java 2.标准NDK+SDK开发: IDE: Eclipse Language: Java(JNI) C/C++ 3.Tranditional linux开发 IDE: c4droid,   command line.vim,emacs Language: C/C++ ------------------------------------------------------------ In a mini

gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第二篇:gradle简单实战

一个bug 一个脚印的叫你们用gradle. 1介于网络上的很多资料都是老的 不适用与现在的新版本gradle 尤其是有些gradle方法改名了老的用不了 2介于网上都是粘贴复制并且零碎我很蛋疼啊,走了很多歪路才弄出来,所以我弄一个完全完整的版本 3我不但会写gradle还会写ant打包方式,希望能帮到大家 在这之前你需要有一个android工程(工程中不能有已经过时的方法) 可以没有eclipse或者ADT 因为只要你工程是ok的 gradle就可以直接用 后面我会越说越详细 前面都太简单了

Android Studio打包全攻略

1)手动打包 项目写完了,现在需要把应用上传到市场,问题出现—怎么把代码变成.apk(Android的可安装文件). 1. 创建签名文件 2. 填写好签名参数 3. 生成APK注意:签名的密码和密匙的密码注意保管,不要忘了,签名文件别泄漏了,也别搞丢了 为什么要打包 我最开始就有这个疑问,我们的代码不是点了下运行按钮就直接安装到手机上了吗,我们在在项目Project目录的build/outputs/apk目录下可以找到刚刚新鲜生成的app-debug.apk.直接把这个上传给市场不就行了吗. N

Android Studio打包全攻略---从入门到精通

初出茅庐 手动打包 怎么手动打包 项目写完了,现在需要把应用上传到市场,问题出现-怎么把代码变成.apk(Android的可安装文件). 1. 创建签名文件 2. 填写好签名参数 3. 生成APK 注意:签名的密码和密匙的密码注意保管,不要忘了,签名文件别泄漏了,也别搞丢了 为什么要打包 我最开始就有这个疑问,我们的代码不是点了下运行按钮就直接安装到手机上了吗,我们在在项目Project目录的build/outputs/apk目录下可以找到刚刚新鲜生成的app-debug.apk.直接把这个上传