Skip to content

Instantly share code, notes, and snippets.

@panpf
panpf / ViewLifecycle.kt
Last active December 8, 2023 07:36
为 View 提供 Lifecycle 支持
val View.lifecycleOwner: LifecycleOwner
get() {
synchronized(this) {
/*
* After Lifecycle enters the DESTROYED state, its coroutineScope will be canceled and can no longer be used.
* So you must create a new Lifecycle every time onAttachedToWindow
*/
check(ViewCompat.isAttachedToWindow(this)) {
"View.lifecycleOwner can only be called after onAttachedToWindow and before onDetachedFromWindow"
}
@panpf
panpf / AESHelper.java
Last active June 30, 2023 07:58
AES 加解密
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Base64;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
@panpf
panpf / gist:467f82d741bf2f761f47
Last active November 17, 2022 06:32
Android - 透明的Activity
要实现透明的Activity很简单,只需要给Activity设置一个透明的主题即可
<activity
android:name="xxxxxxxx"
android:theme="@android:style/Theme.Translucent">
<intent-filter>
<action android:name="android.intent.action.LAUCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
@panpf
panpf / ChannelApkGenerator.java
Created June 24, 2016 06:33
一种通过往META-INF目录下添加特殊名称的文件实现多渠道APK的方法
import java.io.*;
import java.net.URI;
import java.nio.file.FileSystem;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
public class ChannelApkGenerator {
@panpf
panpf / BatchConfiguration.java批量配置文件解析器
Last active March 5, 2022 11:24
一种通过ZIP备注实现APK多渠道的方法
import java.io.*;
import java.util.LinkedList;
import java.util.List;
public class BatchConfiguration {
public int version = -1;
public List<MCPComment> commentList;
private BatchConfiguration() {
@panpf
panpf / settings.gradle.kts
Created June 24, 2019 07:17
gradle local module reference
include(":app", ":router", ":router-annotation", ":router-compiler", ":download", ":app-installer", ":app-packages")
project(":download").projectDir = File("../download/download")
project(":app-installer").projectDir = File("../app-installer/app-installer")
project(":app-packages").projectDir = File("../app-packages/app-packages")
@panpf
panpf / gist:564a2ea910e3f5afb43f7075ac1c6218
Created May 10, 2019 09:34
shell 转义字符串中的双引号
originParams='"hello world"'
originParamsFormatted=`echo ${originParams//'"'/'\"'}` # 输出结果 \"hello world\"
@panpf
panpf / monitor
Last active May 10, 2019 08:41
shell 写一个监控脚本,可执行任意命令,命令执行失败退出码非 0 发送报警邮件
#!/bin/bash
# 如果需要监控指定命令的执行结果,失败时自动发邮件,就只需在最前面用此命令执行即可,例如 monitor echo "hello world"
# 得到当前脚本文件所在的绝对路径
basePath=$(cd `dirname $0`; pwd)
# 执行并记录状态码
# 如果原本参数里有双引号或单引号的话,直接执行 '$@',会失败
# 用 echo "$@" 打印后看不到原本的双引号或单引号,例如 hive -e "select * from test" 就会变成 hive -e select * from test
@panpf
panpf / gist:c11a91b3b996e9c18b0a242e52bdc9c3
Created May 10, 2019 07:43
shell 获取当前脚本文件所在的绝对路径
basePath=$(cd `dirname $0`; pwd)
@panpf
panpf / gist:eb32175e1a1fb94276037a2cabaf2da1
Created May 9, 2019 03:45
shell 格式化当前时间
startTimeFormatted=`date '+%Y-%m-%d %a %H:%M:%S'`