腾讯实习| 总结(1)

前言

  • git基础指令
  • Android单元测试
  • 打包工具Walle使用及原理
  • TV项目的基本结构

1、git基础指令

git的工作流程中主要途径4个区域:

  • Workspace(工作区)
  • Index (暂存区)
  • Repository(本地仓库)
  • Remote(远程仓库)

4个区域的具体的工作流程如下图所示:


git工作流程

git里面的操作有许多的指令,这里先简单罗列一下最为基础的指令:


git指令

2、Android单元测试

2.1、单元测试概述

所谓单元测试是测试应用程序的功能是否能够按需要正常运行,并且确保是在开发人员的水平上,单元测试生成图片。单元测试是一个对单一实体(类或方法)的测试。单元测试是每个软件公司提高产品质量、满足客户需求的重要环节。

2.2、JUnit

JUnit 是一个 Java 编程语言的单元测试框架。它促进了“先测试后编码”的理念,强调建立测试数据的一段代码,可以先测试,然后再应用。这个方法就好比“测试一点,编码一点,测试一点,编码一点……”,增加了程序员的产量和程序的稳定性,可以减少程序员的压力和花费在排错上的时间。

2.3、JUnit的基本使用

Android项目里面其实已经内含了JUnit,我们直接创建一个Android project,然后工程目录如下:

Android工程目录

上图中标红的地方就是Android自动为我们创建的存放测试程序的地方。而在build.gradle当中,也会发现AS已经自动引入了JUnit包:

build.gradle

这里我们先来简单的感受一下JUnit,首先我们来创建一个被测试类Calculator,然后简单的实现一个加法的函数:

public class Calculator {
    
    public int add(int x,int y) {
        return x + y;
    }
}

接着我们就来创建该类的一个测试类,右键我们的类名,然后找到Go To,选择Test:

Test

接着我们在出来的面板上面进行如下的配置:

配置面板

然后点击ok,选择完路径之后就会自动创建一个测试类:


测试类

这里出现了两个注解@Before@After。首先是@Before,它的主要作用是来对对象进行初始化,而@After就是用来清理一些资源。它们会在运行每个@Test方法前后自动运行。

然后我们就可以来对我们的类进行测试了,具代码如下:

public class CalculatorTest {
    
    private Calculator calculator;

    @Before
    public void setUp() throws Exception {
        calculator = new Calculator();
    }

    @After
    public void tearDown() throws Exception {
    }
    
    @Test
    public void test1() {
        assertEquals(5,calculator.add(2,3));
        assertEquals(7,calculator.add(3,4));
        assertEquals(9,calculator.add(5,5));  
    }
}

我们使用@Test注解来表明该方法是一个测试方法,在测试方法中我们使用到了assertEquals(5,calculator.add(2,3));表示期望我们的add方法能够返回5,assertEquals(expected, actual)是最常用的测试方法,同时Junit中还定义了其他的一些方法:

  • assertTrue(): 期待结果为true
  • assertFalse(): 期待结果为false
  • assertNotNull(): 期待结果为非null
  • assertArrayEquals(): 期待结果为数组并与期望数组每个元素的值均相等

在创建完我们的Junit方法之后就可以来单独运行,对我们的测试类右键,然后找到run的选项运行即可:

run
运行结果

运行结果如上可以看出,前两个没有问题,输出正确,但是第三个出现了错误,我们希望函数返回值是9,但是函数却返回了10,所以报错。

推荐阅读: JUnit教程+实践

3、打包工具Walle使用及原理

3.1、Walle概述

Walle(瓦力):Android Signature V2 Scheme签名下的新一代渠道包打包神器

瓦力通过在Apk中的APK Signature Block区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包生成效率,可以作为单机工具来使用,也可以部署在HTTP服务器上来实时处理渠道包Apk的升级网络请求。

3.2、Walle配置

首先在项目的build.gradle文件中添加Walle插件依赖


插件依赖

然后在app的build.gradle中添加一个用于读取渠道名的依赖库:


添加依赖

接着我们来创建一个config,将我们的签名配置上去:

配置config

配置完成之后,会在app 下的 build.gradle里面自动生成配置信息:
image.png

然后,我们在app的build.gradle中添加如下信息:

配置信息

具体条目解释可见:Walle-GitHub

到这里如果点击sync now还是会报配置 app 项目出现问题,具体原因是出现在我们 build.gradle中buildTypes{} 这样的一个闭包中,我们需要在闭包中添加如下信息:

配置闭包

到这里,基本上就能添加依赖成功。

推荐阅读: 导入Walle 时报错

3.3、Walle打包

生成渠道包的方式是和assemble${variantName}Channels指令结合,渠道包的生成目录默认存放在 build/outputs/apk/,也可以通过walle闭包中的apkOutputFolder参数来指定输出目录

用法示例:

生成渠道包 gradlew clean assembleReleaseChannels
支持 productFlavors gradlew clean assembleMeituanReleaseChannels
生成单个渠道包 gradlew clean assembleReleaseChannels -PchannelList=anzhuo
生成多个渠道包 gradlew clean assembleReleaseChannels -PchannelList=wandoujia,baidu

在打包过程中可能会报错:


报错

具体的原因是由于在使用Oracle JDK 14时,所有gradle(6.2.2)任务都会失败,所以这里我们的解决方法是要么使用低版本的JDK,要么就对Android studio里面的gradle进行更新。

推荐阅读: Walle打包方式 | Walle打包出错 | gradle更新方法 | gradle版本对应

3.4、Walle原理

Android 7.0(Nougat)引入一项新的应用签名方案APK Signature Scheme v2,它是一个对全文件进行签名的方案,能提供更快的应用安装时间、对未授权APK文件的更改提供更多保护,在默认情况下,Android Gradle 2.2.0插件会使用APK Signature Scheme v2和传统签名方案来签署你的应用。

关于新签名方案和旧签名方案的区别,用一张图概括如下:


区别

新的签名方案会在ZIP文件格式的 Central Directory 区块所在文件位置的前面添加一个APK Signing Block区块,之前的渠道包生成方案是通过在META-INF目录下添加空文件,用空文件的名称来作为渠道的唯一标识,之前在META-INF下添加文件是不需要重新签名应用的,这样会节省不少打包的时间,从而提高打渠道包的速度。但在新的应用签名方案下META-INF已经被列入了保护区了,也就是说对Contents of ZIP entriesZIP Central DirectoryZIP End of Central Directory都有影响,所以,就只能在APK Signing Block里面来做文章。

推荐阅读: 新一代开源 Android 渠道包生成工具 Walle

4、Android TV项目的基本结构

4.1、TV项目概述

这里直接引用Android官网的话来说:

TV 应用使用的结构与手机和平板电脑的应用相同。这表示您可以根据自身对 Android 应用的既有知识创建新的 TV 应用,也可以扩展现有应用,使其支持 TV 设备。不过,TV 与手机和平板电脑设备在用户交互模式上差异很大。要让您的应用在 TV 设备上取得成功,您必须设计新的布局,使用户在距离电视 10 英尺的地方能轻松看清楚屏幕内容,并且只需使用方向键和选择按钮便可完成导航。

4.2、TV项目的声明

  • 声明 Leanback 支持

声明应用使用 Android TV 所要求的 Leanback 界面。如果要开发一款在移动设备(手机、穿戴式设备、平板电脑等)以及 Android TV 上都可运行的应用,请将 required 属性值设为 false。如果将 required 属性值设为 true,则应用将只能在使用 Leanback 界面的设备上运行。

    
        
        ...
    
  • 将触摸屏声明为非必备条件

想要在 TV 设备上运行的应用不依赖于触摸屏进行输入。需要在 TV 应用的清单中声明 android.hardware.touchscreen 功能并非必备功能。此设置会将应用标识为能够在 TV 设备上工作,也是在 Google Play 中将应用视为 TV 应用的必备条件。代码如下:

    
        
        ...
    
  • 声明TV Activity

在Activity中的intent 过滤器来声明

 
     
     

4.3、TV项目的创建

推荐阅读: Android TV 应用开发教程

你可能感兴趣的:(腾讯实习| 总结(1))