feat: 添加 USB 摄像头连接功能

- 新增 Android USB 摄像头 APP (MJPEG 服务器)
- 电脑端支持 ADB 端口转发连接
- 修复 .gitignore 忽略 Android 文件

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
let5sne.win10
2026-02-12 22:23:43 +08:00
parent 35d05d4701
commit 767271d499
652 changed files with 28034 additions and 22 deletions

View File

@@ -0,0 +1,94 @@
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.usbwebcam"
4 android:versionCode="1"
5 android:versionName="1.0" >
6
7 <uses-sdk
8 android:minSdkVersion="24"
9 android:targetSdkVersion="34" />
10
11 <uses-feature android:name="android.hardware.camera.any" />
11-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:5:5-64
11-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:5:19-61
12
13 <uses-permission android:name="android.permission.CAMERA" />
13-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:6:5-65
13-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:6:22-62
14 <uses-permission android:name="android.permission.INTERNET" />
14-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:7:5-67
14-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:7:22-64
15 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
15-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:8:5-79
15-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:8:22-76
16
17 <permission
17-->[androidx.core:core:1.12.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\f816649ce4c661525cb38e8f74354319\workspace\transformed\core-1.12.0\AndroidManifest.xml:22:5-24:47
18 android:name="com.usbwebcam.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
18-->[androidx.core:core:1.12.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\f816649ce4c661525cb38e8f74354319\workspace\transformed\core-1.12.0\AndroidManifest.xml:23:9-81
19 android:protectionLevel="signature" />
19-->[androidx.core:core:1.12.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\f816649ce4c661525cb38e8f74354319\workspace\transformed\core-1.12.0\AndroidManifest.xml:24:9-44
20
21 <uses-permission android:name="com.usbwebcam.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" />
21-->[androidx.core:core:1.12.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\f816649ce4c661525cb38e8f74354319\workspace\transformed\core-1.12.0\AndroidManifest.xml:26:5-97
21-->[androidx.core:core:1.12.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\f816649ce4c661525cb38e8f74354319\workspace\transformed\core-1.12.0\AndroidManifest.xml:26:22-94
22
23 <application
23-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:10:5-25:19
24 android:allowBackup="true"
24-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:11:9-35
25 android:appComponentFactory="androidx.core.app.CoreComponentFactory"
25-->[androidx.core:core:1.12.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\f816649ce4c661525cb38e8f74354319\workspace\transformed\core-1.12.0\AndroidManifest.xml:28:18-86
26 android:debuggable="true"
27 android:extractNativeLibs="false"
28 android:label="USB摄像头"
28-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:12:9-31
29 android:testOnly="true"
30 android:theme="@style/Theme.AppCompat.NoActionBar" >
30-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:13:9-59
31 <activity
31-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:15:9-24:20
32 android:name="com.usbwebcam.MainActivity"
32-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:16:13-41
33 android:exported="true"
33-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:17:13-36
34 android:keepScreenOn="true"
34-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:19:13-40
35 android:screenOrientation="landscape" >
35-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:18:13-50
36 <intent-filter>
36-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:20:13-23:29
37 <action android:name="android.intent.action.MAIN" />
37-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:21:17-69
37-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:21:25-66
38
39 <category android:name="android.intent.category.LAUNCHER" />
39-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:22:17-77
39-->D:\code\post-ocr\android-app\app\src\main\AndroidManifest.xml:22:27-74
40 </intent-filter>
41 </activity>
42
43 <provider
43-->[androidx.emoji2:emoji2:1.2.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\1216682855f5510bed95f4067697479b\workspace\transformed\jetified-emoji2-1.2.0\AndroidManifest.xml:24:9-32:20
44 android:name="androidx.startup.InitializationProvider"
44-->[androidx.emoji2:emoji2:1.2.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\1216682855f5510bed95f4067697479b\workspace\transformed\jetified-emoji2-1.2.0\AndroidManifest.xml:25:13-67
45 android:authorities="com.usbwebcam.androidx-startup"
45-->[androidx.emoji2:emoji2:1.2.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\1216682855f5510bed95f4067697479b\workspace\transformed\jetified-emoji2-1.2.0\AndroidManifest.xml:26:13-68
46 android:exported="false" >
46-->[androidx.emoji2:emoji2:1.2.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\1216682855f5510bed95f4067697479b\workspace\transformed\jetified-emoji2-1.2.0\AndroidManifest.xml:27:13-37
47 <meta-data
47-->[androidx.emoji2:emoji2:1.2.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\1216682855f5510bed95f4067697479b\workspace\transformed\jetified-emoji2-1.2.0\AndroidManifest.xml:29:13-31:52
48 android:name="androidx.emoji2.text.EmojiCompatInitializer"
48-->[androidx.emoji2:emoji2:1.2.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\1216682855f5510bed95f4067697479b\workspace\transformed\jetified-emoji2-1.2.0\AndroidManifest.xml:30:17-75
49 android:value="androidx.startup" />
49-->[androidx.emoji2:emoji2:1.2.0] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\1216682855f5510bed95f4067697479b\workspace\transformed\jetified-emoji2-1.2.0\AndroidManifest.xml:31:17-49
50 <meta-data
50-->[androidx.lifecycle:lifecycle-process:2.4.1] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\267daa7394ed2025de47a9ccaee77d63\workspace\transformed\jetified-lifecycle-process-2.4.1\AndroidManifest.xml:31:13-33:52
51 android:name="androidx.lifecycle.ProcessLifecycleInitializer"
51-->[androidx.lifecycle:lifecycle-process:2.4.1] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\267daa7394ed2025de47a9ccaee77d63\workspace\transformed\jetified-lifecycle-process-2.4.1\AndroidManifest.xml:32:17-78
52 android:value="androidx.startup" />
52-->[androidx.lifecycle:lifecycle-process:2.4.1] C:\Users\yuanjian\.gradle\caches\9.2.1\transforms\267daa7394ed2025de47a9ccaee77d63\workspace\transformed\jetified-lifecycle-process-2.4.1\AndroidManifest.xml:33:17-49
53 </provider>
54 </application>
55
56</manifest>

View File

@@ -0,0 +1,34 @@
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.usbwebcam.test" >
4
5 <uses-sdk
5-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:5:5-74
6 android:minSdkVersion="24"
6-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:5:15-41
7 android:targetSdkVersion="34" />
7-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:5:42-71
8
9 <instrumentation
9-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:11:5-15:63
10 android:name="android.test.InstrumentationTestRunner"
10-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:11:22-75
11 android:functionalTest="false"
11-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:14:22-52
12 android:handleProfiling="false"
12-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:13:22-53
13 android:label="Tests for com.usbwebcam"
13-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:15:22-61
14 android:targetPackage="com.usbwebcam" />
14-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:12:22-59
15
16 <application
16-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:7:5-9:19
17 android:debuggable="true"
18 android:extractNativeLibs="false" >
19 <uses-library android:name="android.test.runner" />
19-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:8:9-60
19-->D:\code\post-ocr\android-app\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest2431176030697632976.xml:8:23-57
20 </application>
21
22</manifest>