腾讯实习| 总结(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 界面的设备上运行。

    <manifest>
        <uses-feature android:name="android.software.leanback"
            android:required="false" />
        ...
    </manifest>
  • 将触摸屏声明为非必备条件

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

    <manifest>
        <uses-feature android:name="android.hardware.touchscreen"
                  android:required="false" />
        ...
    </manifest>
  • 声明TV Activity

在Activity中的intent 过滤器来声明

 <intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>

4.3、TV项目的创建

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351