Skip to content

Instantly share code, notes, and snippets.

@twiceyuan
twiceyuan / note.md
Created March 29, 2019 03:47
[Uri 获取 Byte 数组] #Android

很多上传操作需要文件对象或者 byte 数组,但是 Uri 获取文件对象是不方便的(content 类型的 Uri),但是相对于获取 InputStream 是方便的:

InputStream iStream = getContentResolver().openInputStream(uri);
byte[] inputData = getBytes(iStream);

然后 InputStream 获取目标文件的 bytes

@twiceyuan
twiceyuan / build.gradle
Created March 28, 2019 17:17
[编译结束后声音通知] #Gradle
android {
applicationVariants.all { variant ->
def assembleTask
if (variant.hasProperty('assembleProvider')) {
assembleTask = variant.assembleProvider.get()
} else {
assembleTask = variant.assemble
}
assembleTask.doLast {
exec {
@twiceyuan
twiceyuan / note.md
Created March 12, 2019 16:20
[动态隐藏 App 图标] #Android
PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, MainActivity.class);
p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

想重新显示,设置 state 为 PackageManager.COMPONENT_ENABLED_STATE_ENABLED 就好了

@twiceyuan
twiceyuan / ClickRippleLayout.java
Created February 26, 2019 03:25
[全局水波纹 View] #Android #View
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Build;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.FrameLayout;
@twiceyuan
twiceyuan / note.md
Created January 16, 2019 09:52
[Gradle Kotlin DSL Implementation 过滤] #Gradle #Kotlin

根据 Build Type 或者 Flavor 来构建(替代之前 Groovy 版自动生成的函数)

fun DependencyHandlerScope.implementationWithFilter(
        flavor: String = "",
        buildType: String = "",
        dependency: Any
): Dependency? = when {
 flavor == "" && buildType == "" -> implementation(dependency)
@twiceyuan
twiceyuan / note.md
Created November 2, 2018 02:22
[iTerm 命令前或者命令后加字符快捷键] #macOS
  1. 在 Keys 里添加快捷键,选择 Send Hex Code
  2. 0x1 为跳转到目前输入命令的最前面,0x5 跳转到目前输入命令的最后
  3. 输入的命令可以用 xxd 获取。比如获取 sudo 的 hex code 可以用 echo -n 'sudo ' | xxd
 ~ echo -n 'sudo ' | xxd
00000000: 7375 646f 20                             sudo

这样最终的 hex code 就是 0x1(跳转最前) 0x73 0x75 0x64 0x6f 0x20('sudo '的 hex code) 0x5(跳转最后)

@twiceyuan
twiceyuan / note.md
Last active October 25, 2018 07:44
[Jenkins 构建开源 Android 项目配置] #Android #Jenkins

在开发 Android 项目时,为了自动化构建输出签名 APK 方便,通常会配置 signingConfigs 项来直接输出签名后的 APK。在构建开源项目时,证书文件一般不会上传到仓库,证书相关的配置也会存在被 ignore 的本地 properties 文件中。之前使用 Travis 构建开源项目时,使用的方式是仓库中存有一个加密的证书文件,通过在 Travis 控制台配置这个加密文件的密钥,以及其他必需的配置项来完成构建。在 Jenkins 里也是类似的方式不过更加方便一些。

首先,可以把证书文件直接上传到 Jenkins 里:

  1. 进入 Credentials - System - Global credentials (unrestricted) - Add Credentials,选择 Secret File,选择要上传的签名文件,ID 和 Description 按照需要给一个有含义的文本即可

  2. 同级下面,再通过 Add Credentials 添加一项,选择 Username and Password。Username 存储签名需要的 Alias,密码存储 Store Password 和 AliasPassword(这里我自己的约定是这样的,如果不相符可以建立更多的 credential 项)。

  3. 在构建项目下面,Build Environment 下面勾选 Use secret text(s) or file(s)Binding 下添加一个 Secret FileUsername and Password,分别对应 1、2 步添加的两项,绑定三个变量:KEY_PATHKEY_ALIASKEY_PASSWD

@twiceyuan
twiceyuan / .leptonrc
Created October 22, 2018 08:08 — forked from hackjutsu/.leptonrc
[Template for .leptonrc] This is a template for Lepton's configuration file. Please place it on your home directory. #lepton
{
"snippet": {
"expanded": true,
"newSnippetPrivate": false,
"sorting": "updated_at",
"sortingReverse": true
},
"editor" : {
"tabSize": 4
},
@twiceyuan
twiceyuan / note.md
Last active May 29, 2019 02:06
[macOS 下启动 http server] #macOS
  1. python(python3)

    cd www_root
    python -m http.server
    
  2. php

@twiceyuan
twiceyuan / note.md
Last active July 29, 2019 06:56
[Git Tag 生成 Android 版本号] 根据 Git Tag 的名字和数量决定 Android App 的版本名和版本号 #Android #Git
android {
    //...
    defaultConfig {
        //...
        versionCode getAppVersionCode()
        versionName getLastTagName()
        //...
    }
 //...