2021年8月

jni 如果直接把源文件从 c 改为 cpp, 那么会报错 base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'和Method 'GetStringUTFChars' could not be resolved

具体的写法是有区别的。

  • c 调用
const char * file_path = (*env)->GetStringUTFChars(env, path, NULL);

return (*env)->NewStringUTF(env, "Hello from JNI !");//如果是用C语言格式就用这种方式
  • cpp 调用
const char * file_path = env->GetStringUTFChars(path, NULL);

return env->NewStringUTF((char *)"Hello from JNI !");//C++用这种格式

原因是 jni 的头文件定义

  • c

    const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);
  • cpp
    const char* GetStringUTFChars(jstring string, jboolean* isCopy)
    { return functions->GetStringUTFChars(this, string, isCopy); }

参考

https://blog.csdn.net/hejia729371286/article/details/51356983

firefox 打开网页慢可能是好几个原因,下面列出可能改善的方法

  1. 可能是证书的问题,在 firefox 设置中取消每次的证书验证。 搜索 OCSP 这个关键字就能找到了。
  2. 在about:config关闭media.peerconnection.enabled
  3. 在firefox设置中的网络设置里面,关闭代理和 enable dns over https

参考

https://www.jianlove.com/firefox-https-105.html#:~:text=%E6%9C%AC%E6%96%87%E5%B0%B1%E5%91%8A%E8%AF%89%E4%BD%A0%E4%BD%BF%E7%94%A8%20Firefox%E7%81%AB%E7%8B%90%E6%B5%8F%E8%A7%88%E5%99%A8%E6%89%93%E5%BC%80%20HTTPS%E7%BD%91%E7%AB%99%E7%BD%91%E9%A1%B5%E9%80%9F%E5%BA%A6%E6%AF%94%E8%BE%83%E6%85%A2%E6%9C%80%E6%9C%89%E5%8F%AF%E8%83%BD%E7%9A%84%E5%8E%9F%E5%9B%A0%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%8C%E9%82%A3%E5%B0%B1%E6%98%AF%E7%AE%80%E7%A7%B0%20OCSP%20%E7%9A%84%20Online%20Certificate%20Status,Protocol%EF%BC%8C%E4%B9%9F%E5%B0%B1%E6%98%AF%20TLS%E8%AF%81%E4%B9%A6%E7%8A%B6%E6%80%81%E6%9F%A5%E8%AF%A2%E6%89%A9%E5%B1%95%EF%BC%8C%E6%98%AF%E5%AE%83%E5%BD%B1%E5%93%8D%E4%BA%86%20https%20%E7%BD%91%E7%AB%99%E6%89%93%E5%BC%80%E7%9A%84%E9%80%9F%E5%BA%A6%E3%80%82%20%E6%89%93%E5%BC%80%20https%20%E7%BD%91%E7%AB%99%E5%BE%88%E6%85%A2%E7%9A%84%E5%8E%9F%E5%9B%A0%E6%98%AF%E5%9B%A0%E4%B8%BA%E6%AF%8F%E6%AC%A1%E9%83%BD%E9%9C%80%E8%A6%81%E6%9F%A5%E8%AF%A2%E8%AF%81%E4%B9%A6%E8%8A%B1%E8%B4%B9%E6%97%B6%E9%97%B4%EF%BC%8C%E5%BE%88%E5%A4%9A%E6%83%85%E5%86%B5%E8%AF%81%E4%B9%A6%E7%9A%84%E6%9F%A5%E8%AF%A2%E6%9C%BA%E6%9E%84%E9%83%BD%E5%9C%A8%E6%B5%B7%E5%A4%96%EF%BC%8C%E8%80%8C%E6%88%91%E4%BB%AC%E5%A4%A7%E5%B1%80%E5%9F%9F%E7%BD%91%E5%9C%B0%E5%8C%BA%E7%89%B9%E6%AE%8A%E7%9A%84%E5%8E%9F%E5%9B%A0%E4%BC%9A%E6%9B%B4%E6%85%A2%E4%B8%80%E4%BA%9B%EF%BC%8C%E6%89%80%E4%BB%A5%E5%8F%AA%E9%9C%80%E8%A6%81%E5%81%9A%E7%AE%80%E5%8D%95%E7%9A%84%E8%AE%BE%E7%BD%AE%E5%B0%B1%E5%8F%AF%E4%BB%A5%E5%A4%A7%E5%B9%85%E6%8F%90%E9%AB%98%20Firefox%E7%81%AB%E7%8B%90%E6%B5%8F%E8%A7%88%E5%99%A8%E6%89%93%E5%BC%80%E7%BD%91%E9%A1%B5%E7%9A%84%E9%80%9F%E5%BA%A6%E4%BA%86%E3%80%82
https://www.zhihu.com/question/264453926
https://www.zhihu.com/question/447886102

已经编译好的 .a 静态库

直接在相应的 Android.mk 里面增加:

LOCAL_SRC_FILES := $(LOCAL_PATH)/lib/libyuv_neon.a

这样就可以了

希望把部分源码编译成静态库,然后再加载

LOCAL_STATIC_LIBRARIES := libtest

这个需要有源码

比如说 libyuv,这个在 external 目录下面有这个库,所以在 framework 下面使用也很简单,只要

LOCAL_STATIC_LIBRARIES := libyuv_static

如果提示找不到,那么直接去提示的目录那边去看看,看看目录名字是什么,就把这边的库名字修改了就可以了。

参考:

https://blog.csdn.net/baidu_31872269/article/details/84554696
https://blog.csdn.net/zhang01/article/details/78760630
https://blog.csdn.net/qq840727854/article/details/54782700
https://blog.csdn.net/sofa120/article/details/83029698
https://blog.csdn.net/kafeidev/article/details/8860278
https://programming.vip/docs/compiling-google-libyuv-so-library.html

有两种方法。

1. 进入容器

docker ps
docker exec -it instance15 sh
logcat

2. 不进入容器

docker ps
adb connect localhost:5987
logcat

3. 也可以把 log 写入文件,再把文件读取出来

docker ps
docker exec -it instance15 sh
logcat >log.txt
exit

adb connect localhost:5987
adb -s localhost:5987 pull log.txt .

4. 还可以这样

docker logs --since 5m 00363a3b96d6

安装 v2ray-core

  1. 先去 https://github.com/v2fly/v2ray-core 下载最新的 v2ray-linux-64.zipv2ray-linux-64.zip.dgst.
  2. https://github.com/v2fly/fhs-install-v2ray 下载最新的脚本。
  3. 修改安装脚本 install-release.sh, 把 download_v2ray 注释掉,把 ZIP_FILE 替换为你下载的 v2ray-core 的 zip 的路径。
  4. sudo bash install-release.sh 运行安装脚本。
  5. systemctl enable v2ray
  6. systemctl start v2ray
  7. systemctl status v2ray 查看服务启动状态。

GUI 可以选择 v2rayA 或者 Qv2ray

v2rayA 是 web 端,只需要下载 https://github.com/v2rayA/v2rayA 最新的 deb 包,然后双击安装即可。安装完成后,到软件中心里面能够看到 v2rayA,直接点击运行,import 导入服务器, connect 连接使用即可。 Qv2ray 是一个整体的 img 文件,打开后,首先设置里面 kernel settings,exe path 选择 /usr/local/bin/v2ray', assets dir 选择/usr/local/share/v2ray` ,点击下面的 check v2ray core settings,确认无误即可。

但是暂时 Qv2ray 没有能够正常使用,v2rayA 可以正常使用。

参考

https://v2xtls.org/v2ray-linux%e5%ae%a2%e6%88%b7%e7%ab%afv2raya%e4%b8%8b%e8%bd%bd%e5%ae%89%e8%a3%85%e5%8f%8a%e4%bd%bf%e7%94%a8%e6%95%99%e7%a8%8b-%e6%94%af%e6%8c%81vmess-vless-ss-ssr-trojan-pingtunnel/
https://www.jianshu.com/p/dae87e4d7691
https://bainesing.wordpress.com/2019/10/25/linux%E9%85%8D%E7%BD%AEv2ray%E5%AE%A2%E6%88%B7%E7%AB%AF/

  1. 使用 fdisk 把硬盘分为一个区, 先用fdisk -l 查看。
  2. 使用 mkfs.ext4 /dev/sdb1 格式化
  3. 创建挂载目录 sudo mkdir /mnt/home 并挂载 sudo mount /dev/sdb1 /mnt/home
  4. 复制 home 目录 sudo cp -ap /home/ /mnt/
  5. 备份原来的 home 目录 tar cvfzp home.tar.gz /home
  6. 取消挂载 sudo umount /mnt/home
  7. 查看 uuid ls -l /dev/disk/by-uuid
  8. 修改 fstab,/dev/sdb1 /home ext4 defaults 0 0
  9. 删除 home 目录下面的文件 sudo rm -rf /home/*
  10. 立即挂载 mount -a
  11. 查看挂载情况 df -h

参考: https://blog.csdn.net/LiHuaYouGuZi/article/details/103760280

linux 系统之间传递文件,有两种方式,scp 或者 rsync.

scp 源目录在前,目标目录在后。

scp -P 225 /home/oscar/myimages.tar.gz root@192.168.2.5:/home/root
scp -r -P 225 /home/oscar/ root@192.168.2.5:/home/root
  • -r:递归拷贝目录
  • -q:不显示进度
  • -l:限制传输带宽,单位是kbits/s

rsync 可以断点续传

rsync --progress --partial --rsh='ssh -p 225' ./pascal_train.txt jp@192.168.2.5:/data/oscar
# --rsh='ssh -p 225'指示采用ssh协议链接并使用端口225
  • --progress: 显示拷贝进度
  • --partial:保留不完整文件,实现断点续传
  • --partial-dir=DIR:指定不完整文件的存储目录,而不是默认存储到目的地目录。
  • -P:包含--progress和--partial,可以理解为一个快捷方式
  • --rsh=ssh:使用ssh方式传输文件

参考: https://www.jianshu.com/p/56b3fba77eb9