Android Debug Bridge (adb) 是一个功能强大的工具,广泛应用于安卓开发、调试和设备管理。本文将为大家介绍一些常用且实用的 adb 命令,帮助你更好地利用这个工具来提高工作效率。
设备和连接管理列出连接的设备要查看当前连接的设备,可以使用以下命令:
1$ adb devices
这将列出所有当前连接的设备和模拟器实例。
指定设备在多设备环境中,可以通过序列号指定目标设备来执行命令:
1$ adb -s <device_serial> <command>
例如,安装应用到特定设备:
1$ adb -s emulator-5554 install app.apk
重启设备重启设备是常见的操作,使用以下命令:
1$ adb reboot
重启到引导加载程序如果需要进入引导加载程序,可以使用:
1$ adb reboot bootloader
重启到恢复模式进入恢复模式的命令如下:
1$ adb reboot recovery
应用管理安装应用安装 APK 文件到设备:
1$ adb install <path_to_apk& ...
TypeScript
未读函数函数是任何应用程序的基本构建块,无论它们是本地函数、从另一个模块导入的函数,还是类中的方法。 它们也是值,就像其他值一样,TypeScript 有很多方法来描述如何调用函数。 让我们学习如何编写描述函数的类型。
约束条件我们编写了一些通用函数,可以处理任何类型的值。 有时我们想关联两个值,但只能对某个值的子集进行操作。 在这种情况下,我们可以使用约束来限制类型参数可以接受的类型种类。
让我们编写一个返回两个值中较长者的函数。 为此,我们需要一个 length 属性,它是一个数字。 我们通过编写 extends 子句将类型参数限制为该类型:
1234567891011121314function longest<Type extends { length: number }>(a: Type, b: Type) { if (a.length >= b.length) { return a; } else { return b; }}// longerArray is o ...
TypeScript
未读类型缩小假设我们有一个名为 padLeft 的函数。
123function padLeft(padding: number | string, input: string): string { throw new Error("Not implemented yet!");}
如果 padding 是 number,它会将其视为我们想要添加到 input 的空格数。如果 padding 是 string,它应该只是将 padding 前置到 input。让我们尝试实现当 padLeft 为 padding 传递 number 时的逻辑。
123function padLeft(padding: number | string, input: string) { return " ".repeat(padding) + input;}
哦,我们在 padding 上遇到错误。TypeScript 警告我们,将 number | string 添加到 number 可能不会给我们想要的东西,这是正确的 ...
TypeScript
未读函数函数是在 JavaScript 中传递数据的主要方式。 TypeScript 允许您指定函数的输入和输出值的类型。
参数类型注解声明函数时,可以在每个参数后面加上类型注解,声明函数接受哪些类型的参数。 参数类型注释在参数名称之后:
12345// Parameter type annotationfunction greet(name: string) { // ^^^^^^^^ console.log("Hello, " + name.toUpperCase() + "!!");}
当参数具有类型注释时,将检查该函数的参数:
1234declare function greet(name: string): void;// Would be a runtime error if executed!greet(42);
即使您的参数上没有类型注释,TypeScript 仍会检查您是否传递了正确数量的参数。
返回类型注解您还可以添加返回类型注释。 返回类型注释出现在参数列表之后:
...
TypeScript
未读字符串JavaScript 程序的另一项基本操作是处理网页或服务器端的文本数据。 像其它语言里一样,我们使用string表示文本数据类型。 和 JavaScript 一样,可以使用双引号(")或单引号(')表示字符串。
12let name: string = "bob";name = "smith";
你还可以使用模版字符串,它可以定义多行文本和内嵌表达式。 这种字符串是被反引号包围,并且以${ expr }这种形式嵌入表达式
12345let name: string = `Gene`;let age: number = 37;let sentence: string = `Hello, my name is ${ name }.I'll be ${ age + 1 } years old next month.`;
这与下面定义sentence的方式效果相同:
12let sentence: string = "Hello, my name ...
Android
未读当用户浏览、退出和返回到您的应用时,应用中的 Activity 实例会在其生命周期的不同状态间转换。Activity 类会提供许多回调,这些回调会让 Activity 知晓某个状态已经更改:系统正在创建、停止或恢复某个 Activity,或者正在销毁该 Activity 所在的进程。
Activity 生命周期概念为了在 Activity 生命周期的各个阶段之间导航转换,Activity 类提供六个核心回调:onCreate()、onStart()、onResume()、onPause()、onStop() 和 onDestroy()。当 Activity 进入新状态时,系统会调用其中每个回调。
下图是对此范例的直观展现。
当用户开始离开 Activity 时,系统会调用方法来销毁该 Activity。在某些情况下,此销毁只是部分销毁;Activity 仍然驻留在内存中(例如当用户切换至另一应用时),并且仍然可以返回到前台。如果用户返回到该 Activity,Activity 会从用户离开时的位置继续运行。除了少数例外,应用在后台运行时会受到限制,无法启动 Activity。
系统 ...
一直自动登录导致忘记 gitlab 的密码,这篇文章我们来通过命令行修改 gitlab 的密码。
启动并进入 Docker 中的 gitlab1$ docker exec -it gitlab-ce /bin/bash
在生产环境运行 GitLab 的 Rails 控制台1$ gitlab-rails console -e production
执行命令后需要稍微等待,将会进入如下界面
123456789root@dbbc74ab8f4f:/# gitlab-rails console -e production-------------------------------------------------------------------------------- Ruby: ruby 3.0.6p216 (2023-03-30 revision 23a532679b) [aarch64-linux] GitLab: 16.2.1 (3216f7a4aef) FOSS GitLab Shell: 14.23.0 PostgreSQL: 13 ...
在 C 语言中,结构体是一种非常重要的数据类型。它可以将不同的数据类型组合成一个整体,方便程序员进行操作。比如,我们可以定义一个结构体来表示一个人的信息,包括姓名、年龄、性别等等。使用结构体可以使得程序更加清晰易懂,提高代码的可读性和可维护性。
结构声明(structure declaration)描述了一个结构的组织布局。声明类似下面这样:
12345struct book { char title[MAXTITL]; char author[MAXAUTL]; float value;};
该声明描述了一个由两个字符数组和一个 float 类型变量组成的结构。该声明并未创建实际的数据对象,只描述了该对象由什么组成。我们来分析一些细节。首先是关键字 struct,它表明跟在其后的是一个结构,后面是一个可选的标记(该例中是 book),稍后程序中可以使用该标记引用该结构。所以,我们在后面的程序中可以这样声明:
1struct book library;
这把 library 声明为一个使用 book 结构布局的结构变量。
结构有两层含义。一层含义是“结构布 ...
在 macOS 上,man 命令用于查看系统中安装的程序的帮助文档。然而,默认情况下,这些帮助文档都是英文的,对于不熟悉英文的用户来说可能会有些困难。幸运的是,我们可以安装 manpages-zh 来获取中文帮助文档。
安装依赖在安装之前,我们需要先安装一些依赖项,依赖项有三个:cmake,python3,opencc,在 macOS 上我们使用 brew 安装这些依赖。
123$ brew install cmake$ brew install python$ brew install opencc
编译安装
clone 项目
1$ git clone git@github.com:man-pages-zh/manpages-zh.git
查看最新的 tag
123$ git describe --tags --abbrev=0# 或者执行 git tag -l 查看 tag 列表# 写这篇博客时,最近的 tag 是 v1.6.4.0
切换到最新的 tag
1$ git checkout tags/v1.6.4.0
编译安装
1234567$ cd manpages-zh ...
在 GitHub 上,我们可以使用 Fork 操作将其他用户的仓库复制到自己的账户下。但如果原始仓库更新了,我们可能需要将其再次 fork 到自己的账户下,以保持代码与原始仓库同步。下面将介绍如何使用 Git 命令行进行 GitHub 仓库再次 fork 的操作。
方法一
在 GitHub 上找到你之前 fork 的一个仓库,并且该原始仓库已经有更新。
打开 Git 命令行,使用 cd 命令进入你想要存储该仓库的本地目录中。
在命令行中输入以下命令,将你的 fork 仓库克隆到本地。
1$ git clone <你的 fork 仓库的地址>
进入本地仓库的目录中,使用 git remote -v 命令查看远程仓库的地址,确认你当前的远程仓库是你 fork 的仓库。
为原始仓库添加一个远程地址。输入以下命令:
1$ git remote add upstream <原始仓库的地址>
其中 <原始仓库的地址> 是你想要再次 fork 的仓库的地址。如果不知道原始仓库的地址,可以在该仓库页面中点击 “Clone or download” 按钮 ...