android studio 下载&配置

本文介绍Android Studio的下载、配置步骤及实用技巧,包括设置SDK路径、编码格式、背景色、作者信息模板等,并讲解序列化、多渠道打包及资源文件分包的方法。

下载

最新版本

历史版本

打开上面的下载链接,下滑找到“Android Studio 下载”
点击“下载归档”,进入协议页
重点:在协议页,将语言由中文切换为英文(见下图)
这个时候页面内的协议就可以正常显示了
点击"I agree to the terms"就可以看到旧版本列表了
选择需要的对应版本下载即可
语言切换为英文

配置

设置/修改 SDK 路径

依次打开 Settings -> Appearance & Behavior -> System Settings -> Android SDK ->
点击 Android SDK Location 后边的 Edit 选择本地 SDK 所在路径即可

设置编码格式为 UTF-8

依次打开 Settings -> Editor -> File Encoding ->
Global Encoding -> UTF-8
Project Encoding -> UTF-8
Default encoding for properties files -> UTF-8 勾选后面的复选框

设置护眼色背景色

依次打开 Settings -> Editor -> Colors Scheme -> General ->
右侧打开 Text 节点,选择 Default Text
勾选 Background
点击颜色选择器,设置颜色为 C7EDCC

配置作者姓名、邮箱、类描述等模板

依次打开 Settings -> Editor -> File and Code Templates -> Includes -> File Header ->
输入以下模板

/**
 * <pre>
 *     author : ${USER}
 *     e-mail : xxx@xx
 *     time   : ${YEAR}/${MONTH}/${DAY}
 *     desc   :
 *     version: 1.0
 * </pre>
 */

删除多余的 import,减少警告出现

依次打开 Settings -> Editor -> General -> AutoImport ->
勾选 Optimize imports on the fly,如下图
这里写图片描述

自动生成 SerializableID

序列化:Serializable & Parcelable

序列化:就是将对象的状态信息转换为可以存储或传输的形式的过程

在我们平时开发中,我们用到序列化最多的地方就是通过intent传递对象,
如果你要在intent中传递基本数据类型以外的对象,那么该对象必须实现
Serializable或者Parcelable,否则会报错

注意
1:通过intent传递过去的对象是经过了序列化与反序列化的,虽然传送的对象和接收的对象内容相同,但它们是不同的对象,因为它们的引用是不同的
2:静态变量是不会经过序列化的,所以跨进程通信的时候静态变量是传送不过去的

1.Serializable

Serializable是java提供的序列化接口,使用起来特别简单,你只用实现这个接口就能够让这个对象支持序列化

public class MineTestSecond implements Serializable {
	//注意,添加一个字段,serialVersionUID
    private static final long serialVersionUID = 3275926292199431244L;
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

SerializableID 的作用

如,定义了一个 Student 类,里面定义了一个 SerializableID=5,序列化后传给服务器,服务器将其存到数据库以后再使用。若干天后,系统升级,在 Student 类加了一个字段 String address,如果 Student 类里没有定义 SerializableID 或者 SerializableID 不一样了,此时,存在数据库里的 Student 对象就反序列化不回来了。若定义了 SerializableID,在 Student 类里加了一个属性,即使存在数据库的对象少一个属性,也是可以反序列化回来的,只不过新添加的那个属性值为null而已。

序列化 & 反序列化

Serializable序列化与反序列化有很多种方法,这里示范一下通过写入文件和读取文件来实现.

序列化

File file = new File(getFilesDir()+"zhangsan.txt");
Person person = new Person("zhangsan");
ObjectOutputStream outputStream = 
new ObjectOutputStream(newFileOutputStream(file));
outputStream.writeObject(person);

反序列化

ObjectInputStream objectInputStream = 
new ObjectInputStream(new FileInputStream(getFilesDir()+"zhangsan.txt"));
Person person = (Person) objectInputStream.readObject();

2.Parcelable

Parcelable是Android特有的序列化方式,他的实现相对Serialiable来说更加复杂一点,但是通过AS的一个插件就可以很方便的完成。
插件名称:Android Parcelable Code Generator
安装插件:AS > Settings > Plugins > Browse Repositories > 搜索 Android Parcelable Code Generator > 安装插件后重启AS即可
Parcelable 序列化方法1:创建对象并实现Parcelable接口,右键 > Generate > Parcelable > 点击需要序列化的字段 > 点击ok
Parcelable 序列化方法2:创建对象并实现Parcelable接口,Alt + Insert > Parcelable > 点击需要序列化的字段 > 点击ok

这里写图片描述
(此截图引用自Android开发艺术探索)

3.Serializable与Parcelable的对比

Serializable:
1.Serializable是java提供的可序列化接口
2.Serializable的序列化与反序列化需要大量的IO操作,效率比较低
3.Serializable实现起来很简单


Parcelable:
1.Parcelable是Android特有的可序列化接口
2.Parcelable的效率比较高
3.Parcleable实现起来比较复杂


4.使用场景

1.Parcleable: 内存中的序列化时使用,效率更高
2.Serializable: 对象序列化到存储设备中、在网络中传输等

SerializableID 的自动生成

依次打开 Settings -> Editor -> Inspections -> General ->
右侧展开 Java 节点
展开 Serialization issues 节点
选中 Serializable class without ‘serialVersionUID’
在实现了Serializable中的JavaBean中,选中类名,Alt+Enter弹出提示,然后直接导入生成 SerializableID

功能

生成 SHA1 和 MD5 值

生成 SHA1 和 MD5 值需要使用 DOS 窗口,也可以在 android studio 中直接使用 Terminal 工具

点击 Terminal
cd 到 keystore.jks(签名文件)所在的目录
输入 keytool -list -v -keystore keystore.jks(其中 keystore.jks 替换为签名文件的文件名,包括后缀)
按下回车键
输入keystore密码(注意,是keystore的密码,不是key的密码)

这里写图片描述

Apk 配置多渠道打包

多渠道打包的用途(为什么要进行多渠道打包)

通过多渠道打包,将对应的 APP 发布到对应的应用渠道市场上
再利用友盟统计,来统计不同渠道上的 APP 下载量、安装量等数据信息
下载量:用户下载一次,下载量记为1次
安装量:同一个手机安装多次(不论从哪个应用市场进行的下载安装),安装量都记为1次

第一步:

在 AndroidManifest.xml 中的 Application 节点下添加如下代码
这里之所以命名 name 为 UMENG_CHANNEL,是因为我们将多渠道导包与友盟统计配合使用

这里写图片描述

<!--多渠道打包 - 友盟统计-->
<meta-data
    android:name="UMENG_CHANNEL"
    android:value="${UMENG_CHANNEL_VALUE}" />

第二步:

在 module 的 build.gradle 中的 android 节点下添加如下代码

这里写图片描述

//多渠道打包 - 友盟统计
productFlavors {
    yingyongbao {}
    wandoujia {}
    xiaomi {}
}
productFlavors.all {
    flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}

第三步:

在 module 的 build.gradle 中的 android 节点下的 buildTypes 节点下的 release 版本配置中添加如下代码

这里写图片描述

applicationVariants.all { variant ->
   variant.outputs.each { output ->
        def outputFile = output.outputFile
        if (outputFile != null && outputFile.name.endsWith('.apk')) {
            // 输出apk名称为app_v1.0_xxxx-xx-xx_xxxx.apk
            // def fileName = "app_v${defaultConfig.versionName}_${releaseTime()}.apk"
            // 输出apk名称为app_v1.0.apk
            // def fileName = outputFile.name.replace(".apk", "app_v${defaultConfig.versionName}.apk")
            // 输出apk名称为app_v1.0_yingyongbao.apk
            def fileName = "app_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
            output.outputFile = new File(outputFile.parent, fileName)
        }
    }
}

第四步:

生成 release 的 apk

点击 android studio 工具栏的 Build,选择 Generate Signed APK…,等待生成多渠道包,可能有点慢

这里写图片描述

至此、多渠道打包结束

这里写图片描述

如果用的是 友盟统计,只需按照友盟统计的官方文档进行集成友盟统计即可

除了上述原始的多渠道打包方式外,还有其他的多渠道打包方式,如美团多渠道打包、360多渠道打包等,打包速度极快,15秒钟可打包300左右,当然也是存在缺陷的,个人觉得一共就发布几个主流的应用渠道的话,使用原始的多渠道打包就好,慢不多少,还规避了一些风险

备注:

如果是没用到友盟统计的话,可以在需要的地方,添加如下代码
将 getChannel() 方法获取到的 渠道名 发送到服务器进行相应的统计。

这里写图片描述

/**
 * 获取渠道名称
 * 用于多渠道打包
 *
 * @return
 */
private String getChannel() {
   try {
       PackageManager pm = getPackageManager();
       ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
       return appInfo.metaData.getString("UMENG_CHANNEL");
   } catch (PackageManager.NameNotFoundException ignored) {
       ignored.printStackTrace();
   }
   return "";
}

res 资源文件分包

在 app 目录下的 build.gradle 中 android 节点下的 sourceSets 中配置如下代码

sourceSets {
    main {
        res.srcDirs('src/main/res', 'src/main/res_core', 'src/main/res_sub')
    }
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值