aria2 cmd set chmod, and others..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | import 'package:flutter/material.dart' ; import 'dart:io' ; import 'dart:async' ; import 'package:rxdart/rxdart.dart' ; import 'package:path_provider/path_provider.dart' ; import 'package:path/path.dart' ; import 'package:permission_handler/permission_handler.dart' ; import 'package:flutter/services.dart' ; void main() => runApp(MaterialApp(home: MyApp(),)); /* 1. Copy aria2c executable to ``/mnt/sdcard`` on your device. 2. Run Android Terminal Emulator. 3. ``mkdir /data/data/jackpal.androidterm/aria2`` 4. ``cat /mnt/sdcard/aria2c > /data/data/jackpal.androidterm/aria2/aria2c`` 5. ``chmod 744 /data/data/jackpal.androidterm/aria2/aria2c`` 6. Add the following commands to the initial command of Android Terminal Emulator:: export HOME=/data/data/jackpal.androidterm/aria2; cd $HOME 7. Exit Android Terminal Emulator. 8. Run Android Terminal Emulator again. 9. See whether aria2c actually works by invoking ``./aria2c -v`` */ class MyApp extends StatelessWidget { DataBloc bloc; checkPermission()async{ var per = await PermissionHandler().checkPermissionStatus(PermissionGroup.storage); if (per!=PermissionStatus.granted){ await PermissionHandler().requestPermissions([PermissionGroup.storage]); } } cp()async{ await checkPermission(); Directory tempDir = await getExternalStorageDirectory(); String workDir = join (tempDir.path, '' ); var appLocation = await getApplicationDocumentsDirectory(); await Process.run( 'chmod' , [ '755' , appLocation.path+ '/aria2' ]).then((e){ print(e.toString()); print(e.stdout); print(e.stderr); print(e.exitCode); print( '===============' ); }); // var file1 = await rootBundle.load('assets/aria2c'); // var buf = file1.buffer; // File(join(appLocation.path, 'aria2')).writeAsBytesSync(buf.asUint8List()); await Process.run( '${appLocation.path}' + '/aria2' , [ '-v' ]).then((e){ print(e.stdout); print(e.stderr); print(e.exitCode); }); } @ override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text( 'sss' ),), body: Container( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ RaisedButton(child: Text( 'mkdir' ),onPressed: (){ cp(); },), RaisedButton(child: Text( 'delete' ),onPressed: (){ },), Container( width: 50,height: 50,child: Image(image: AssetImage( 'assets/img/a.png' ,),fit: BoxFit.cover,)), ], ), ), ); } } class DataBloc { ReplaySubject dataBloc = ReplaySubject(); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?