0%

一、编译Flutter Engine

  1. 创建工作目录 engine

  2. 添加 depot_tools 到环境变量,并在engine目录下创建.gclient文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    solutions = [
    {
    "managed": False,
    "name": "src/flutter",
    "url": "[email protected]:<your_name_here>/engine.git",
    "custom_deps": {},
    "deps_file": "DEPS",
    "safesync_url": "",
    },
    ]
  3. 在engine目录执行 gclient sync 命令同步源码和编译工具链

  4. 进入 engine/src 目录下,如果是linux平台执行:

    1
    2
    3
    4
    sudo ./build/install-build-deps-android.sh
    sudo ./build/install-build-deps.sh

    sudo ./flutter/build/install-build-deps-linux-desktop.sh

    如果是mac平台,安装jdk 1.8 和ant:

    1
    brew install ant
  5. engine/src 目录下,生成编译配置文件

    1
    ./flutter/tools/gn --android --unoptimized

    生成目录 engine/src/out/android_debug_unopt

  6. engine/src 目录下,执行编译命令

    1
    ninja -C out/android_debug_unopt

二、如何在mac下编译linux平台的产物?

Read more »

Android Native开发

Android 从

0x01 JNI 开发

1. Demo

我们现来看一个例子。

1
2
3
4
5
6
7
public class HelloJni {
static {
System.loadLibrary("native-lib");
}

public static native String stringFromJNI();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <jni.h>
#include <string>

extern "C"
JNIEXPORT jstring JNICALL
Java_cn_cwiki_someapp_test_HelloJni_stringFromJNI(JNIEnv *env, jclass type) {
// TODO
return env->NewStringUTF("Hello, Java Native Interface!");
}
extern "C"
JNIEXPORT jstring JNICALL
Java_cn_cwiki_someapp_test_HelloJni_test(JNIEnv *env, jobject instance) {
// TODO
return env->NewStringUTF("test");
}

image-20190628232500731

1
2
3
4
5
6
7
8
9
cmake_minimum_required(VERSION 3.4.1)
add_library(
native-lib SHARED
src/main/cpp/native-lib.cpp
)
target_link_libraries(
native-lib
src/main/cpp/native-lib.cpp
)
1
2
3
4
5
6
7
8
9
10
android {
...
externalNativeBuild {
cmake {
path "CMakeLists.txt" //CMakeLists.txt的路径
version "3.10.2"
}
}
...
}

image-20190628233820985

1
String stringFromJNI = HelloJni.stringFromJNI();

image-20190628234045501

Read more »

Lambda 表达式详解

1. Lambda 表达式的形式

  1. 无参数

    1
    2
    3
    4
    5
    6
    7
    NoArgument noArgument = () -> {
    System.out.println("No Argument");
    };
    // 定义
    public interface NoArgument {
    void noArg();
    }
  2. 一个参数

    1
    2
    3
    4
    5
    6
    7
    OneArgument oneArgument = (a) -> {
    System.out.println("One Argument:" + a);
    };
    // 定义
    public interface OneArgument {
    void oneArg(int one);
    }
Read more »

V2Ray(ubutnu:websocket+ssl+cdn)

0x01 设置时区

v2ray 对时间要求比较严格,服务器时间与本地时间相差在90s

1
2
dpkg-reconfigure tzdata  # 选择时区
hwclock -w # 将当前时区写入bios

0x02 安装

1
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

此脚本会自动安装以下文件:

  • /usr/bin/v2ray/v2ray:V2Ray 程序;
  • /usr/bin/v2ray/v2ctl:V2Ray 工具;
  • /etc/v2ray/config.json:配置文件;
  • /usr/bin/v2ray/geoip.dat:IP 数据文件
  • /usr/bin/v2ray/geosite.dat:域名数据文件

此脚本会配置自动运行脚本。自动运行脚本会在系统重启之后,自动运行 V2Ray。目前自动运行脚本只支持带有 Systemd 的系统,以及 Debian / Ubuntu 全系列。

Read more »

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
hexo new "My New Post"

More info: Writing

Read more »

java注解

annotation并不直接影响代码,不会改变程序的变异方式,java编译器对于包含注解和不包含注解的代码会生成相同的虚拟机指令

注解使用范围

  • 成员方法
  • 成员变量

注解使用方法

基本定义
  • 注解定义0(基本定义)
1
2
public @interface MyAnnotation{
}

此时的注解MyAnnotation可使用在任何地方(此时没有限定使用范围 )

1
2
3
@MyAnnotation
public void test(){
}
Read more »