Grape

Grape

Graduated in Computer Science and Engineering, but currently working with GNU/Linux infrastructure and in the spare time I'm an Open Source programmer (Python and C), a drawer and author in the YINGJUE Blog.

C++ 继承

export NDK_ROOT=~/android-ndk-r18b

${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
  --target=x86_64-none-linux-android
  --gcc-toolchain=${NDK_ROOT}/toolchains/x86_64-4.9/prebuilt/linux-x86_64
  --sysroot=${NDK_ROOT}/sysroot
  -isystem ${NDK_ROOT}/sysroot/usr/include/x86_64-linux-android
  -pie -o  hello.c.o -c hello.c

${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
  --target=x86_64-none-linux-android
  --gcc-toolchain=${NDK_ROOT}/toolchains/x86_64-4.9/prebuilt/linux-x86_64
  --sysroot  ${NDK_ROOT}/platforms/android-21/arch-x86_64
  -pie hello.c.o -o hello

  ${NDK_ROOT …

Android Unicode 字符串

相关源码

String16

// http://androidxref.com/6.0.1_r10/xref/system/core/libutils/String16.cpp#allocFromUTF8
static char16_t* allocFromUTF8(const char* u8str, size_t u8len)
{
    const ssize_t u16len = utf8_to_utf16_length(u8cur, u8len);
    utf8_to_utf16(u8cur, u8len, u16str);
}

namespace android{

//! This is a string holding UTF-16 characters.
class String16{
private …

Android 智能指针

相关源码

http://androidxref.com/6.0.1_r10/xref/system/core/include/utils/StrongPointer.h http://androidxref.com/6.0.1_r10/xref/system/core/include/utils/RefBase.h http://androidxref.com/6.0.1_r10/xref/system/core/libutils/RefBase.cpp

StrongPointer

INITIAL_STRONG_VALUE 为什么不是0

区分从来没有指针引用该对象,还 …

Android 源码开发

准备开发环境

使用docker-aosp搭建

编译步骤

source build/envsetup.sh 
including device/asus/deb/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including device/asus/fugu/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup …

Docker 基础

Dockerizing a Python Flask App

Install nginx 1.27.2

docker pull nginx:1.27.2
docker pull python:3.13
services:
  web:
    container_name: example_nginx
    image: nginx:1.27.2
    privileged: true
    ports:
      - 80:80
      - 443:443
    volumes:
      - "$PWD/html:/usr/share/nginx/html:rw"
      - "$PWD/conf/conf.d:/etc/nginx/conf.d"
      - "$PWD/logs:/var/log/nginx"
      - "$PWD/certs:/etc/nginx/certs"

自 …

Android ClassLoader

Class

// http://androidxref.com/6.0.1_r10/xref/libcore/libart/src/main/java/java/lang/Class.java
public final class Class<T> implements Serializable, AnnotatedElement, GenericDeclaration, Type {
    static native Class<?> classForName(String className, boolean shouldInitialize,
        ClassLoader classLoader) throws ClassNotFoundException;
}

VMClassLoader

// http://androidxref.com/6.0.1_r10/xref/libcore/libart/src/main/java/java/lang/VMClassLoader.java
package java.lang;
class VMClassLoader{
    native static Class …

Android ProgressBar Circle

Shape

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] 
    android:innerRadius="integer"
    android:innerRadiusRatio="integer"
    android:thickness="integer"
    android:thicknessRatio="integer"
    android:useLevel="boolean"
    >
    <corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    <gradient
        android:angle="integer"
        android:centerX="float"
        android:centerY="float …

Java 知识点

可变参数

变长参数是 Java 的一个语法糖,本质上还是基于数组的实现:

void Foo(String... args);
void Foo(String[] args);

// Method signature
([Ljava/lang/String;)V // public void foo(String[] args)

注意事项: - 可变参数只能作为函数的最后 …

Github Usage

子模块

递归更新子模块:

git submodule add <remote url> <local url>
git submodule add https://github.com/tatamobile/pelican-boostrap5.git themes/pelican-bootstrap5

git submodule update --init
git submodule update --init --recursive
git archive -o v0.0.1.zip main
eval `ssh-agent -s`
GitHub
ssh-keygen -t ed25519 -C "your_email@example.com"

创建ssh-key 并且重命名 …

7z 解压文件名乱码

问题描述

在Windows 7中文版系统上使用7z压缩一些文件后,然后在Windows 10 Pro英文版系统上解压,发现凡是文件名中包含中文,最后都是乱码。

原因

使用7z压缩文件时,对文件名的编码是采用Windows 系统默认字符集,而不是unicode编码。

解决方法

  • 使用 …