WSL 使用 adb

wsl使用adb 版本问题 可能是版本问题,将wsl中的adb的版本和windows的adb版本统一 使用usbipd 连接 USB 设备 | Microsoft Learn usbip windows 使用,挂载远程usb设备 | ZhouZhou Blog 根据文档下载usbipd 注意windows版本和wsl版本 管理员模式运行powershell usbipd list usbipd bind --busid 1-4 # 可能需要重启 # 打开一个wsl窗口 usbipd attach --wsl --busid 1-4 在wsl lsusb 需要断开,在win usbipd detach --busid <busid> 问题 正常情况下,网络断开的 usbip 设备能够自动恢复,例如关闭wifi、关机等操作。然而如果直接拔掉 windows 电源。设备会一直处于一个挂载状态,无法再被开机自动挂载。 此时必须执行 usbip unbind --busid=xxx 取消绑定,然后再次执行 usbip bind --busid=xxx 才行 usbipd unbind --busid 1-4 usbipd bind --busid 1-4

August 25, 2026 · 1 min · 64 words · hy

JNI 总结

JNI JNI是指Java Native Interface,在编写Java程序时需要使用本地代码(C/C++)可以使用这一技术。 通常来说,要使用的本地代码有两种:C/C++源代码和经过编译的库(用在Android应用上的是.so库,需要根据运行的设备编译对应版本)。 使用JNI要做的几个部分有:确定接口,编写Java和cpp文件,编写cmake文件,加载库,使用函数。这几个步骤理论上没有顺序,按照我的实践结果,有的步骤按逻辑来执行比较方便。 前期配置 我的开发IDE是Android Studio,需要在项目中先配置好NDK和cmake插件。 在开发时,我选择了新建一个模块作为JNI部分,虽然多了一层的封装,但是自己看起来比较清楚。这里有一个小问题,在gradle版本为4.1.1时,会出现新建native Lib模块不能编译的问题,我将gradle版本升级到7.4.2解决了这个问题。如果选择新建moudle,还要在app的build.gradle中加入引用 ... dependencies { ... implementation project(path : ':nativeLib') } 如果选择在app中直接加入也很简单,在Java同级目录下创建cpp目录,并在cpp文件夹中创建CMakeLists.txt等文件就可以。 当然,以上两种都可以在创建app或模块时就选择native lab,IED会自动创建相关目录和文件。 确定接口 这里的接口指的是在Java中会调用的接口。在Java文件中,要加入native。 public static native int init(); 这里的接口也对应要编写的cpp文件。 Java文件加载库 在Java代码中除了要处理接口,还要引入库,我们编写的cpp文件也会编译成库,不要忘记加上这个库。 // cpp文件的库 System.loadLibrary("nativeLib"); // 其他库,对应名称libexample.lib System.loadLibrary("example"); 编写cpp文件 生成接口定义 Java中确定的native接口也需要在cpp中实现。 Java确定cpp文件中的函数名称有一套规则:Java_{package_and_classname}_{function_name}(JNI arguments)。包名中的点换成单下划线。需要说明的是生成函数中的两个参数: JNIEnv *:这是一个指向JNI运行环境的指针,后面我们会看到,我们通过这个指针访问JNI函数 jobject:这里指代java中的this对象 我不推荐按照这个规则直接去写,有两种方法可以生成Java能找到的cpp函数名: 将javah.exe加入环境变量并使用以下命令 javac -h . nativeLab.java java nativeLib.java javah -jni nativeLib.java 使用Android Studio 外部工具,将javah.exe作为外部工具直接使用生成头文件。 我们可以直接参照生成的头文件来编写cpp文件,在编译中,这个头文件不是必要的。 函数内容 java会将一些参数传给cpp,所以这些参数需要我们进行处理的转化。 原始类型 jint, jbyte, jshort, jlong, jfloat, jdouble, jchar, jboolean这些分别对应这java的int, byte, short, long, float, double, char and boolean。 ...

August 14, 2026 · 2 min · 260 words · hy

编译 libtensorflowlite_c.so

编译libtensorflowlite_c.so 环境:wsl/linux 需要充足的内存和硬盘空间 安装基础工具 python版本 >= 3.9 可以使用虚拟环境 sudo apt-get update sudo apt-get install build-essential git unzip python3 python3-pip 安装bazel 编译最新的tensorflow源码需要版本 >= 7.1.4 下载安装脚本,并运行。命令行太慢,建议直接在浏览器里下载Releases · bazelbuild/bazel · GitHub curl -L https://github.com/bazelbuild/bazel/releases/download/7.1.4/bazel-7.1.4-installer-linux-x86_64.sh -o bazel-installer.sh chmod +x bazel-installer.sh ./bazel-installer.sh --user 下载ndk 版本 >= 25 NDK 下载 | Android NDK | Android Developers unzip android-ndk-r25b-linux.zip -d ~/ echo 'export ANDROID_NDK_HOME="$HOME/android-ndk-r25b"' >> ~/.bashrc echo 'export PATH="$ANDROID_NDK_HOME:$PATH"' >> ~/.bashrc source ~/.bashrc 下载android sdk 直接下载android studio 或者用命令行 先下载java,最好选17 sudo apt update sudo apt install openjdk-17-jdk 下载sdk,如果下载慢可以直接从浏览器下载下载 Android Studio 和应用工具 - Android 开发者 | Android Developers mkdir -p ~/Android/Sdk/cmdline-tools cd ~/Android/Sdk/cmdline-tools # 下载并解压(替换为实际版本号) wget https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip unzip commandlinetools-linux-10406996_latest.zip mv cmdline-tools latest # 重命名为 `latest` # 配置环境变量 nano ~/.bashrc export ANDROID_HOME="$HOME/Android/Sdk" export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH" # ctrl + x 退出保存 source ~/.bashrc # 安装组件 sdkmanager --update sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34" "emulator" 下载tensorflow源码 git clone https://github.com/tensorflow/tensorflow.git cd tensorflow git checkout r2.14 # 切换到指定版本 运行交互式配置脚本 ./configure 按需配置 编译 通用编译(ARM64 架构) bazel build -c opt \ --config=android_arm64 \ --cxxopt='--std=c++17' \ //tensorflow/lite/c:libtensorflowlite_c.so 生成文件 生成库位于 ...

April 14, 2026 · 1 min · 160 words · hy