Это очень специфический вопрос, но я больше не знаю, где искать.
evlois предоставляет SDK для Android в виде файлов .so.
https://sdk.evolis.com/doc/doc-c/index.html
https://sdk.evolis.com/doc/doc-c/evolis_8h.html
Я добавил файлы в правильные папки в моем каталоге Android и сгенерировал класс привязки Dart через ffigen. Так что я могу получить доступ к SDK. Это также работает для функции «evolis_version». Это дает мне версию 9.0.2.6484. Я не поймаю исключение, это просто сбои. Я могу найти функцию, так что она существует. < /P>
F/libc (22120): Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 22155 (1.ui), pid 22120 (systems.test_app)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'SUNMI/V3_MIX_EDLA_GL/V3_MIX:13/TKQ1.230110.001/40:user/release-keys'
Revision: '0'
ABI: 'arm64'
Timestamp: 2025-02-19 14:58:37.674946211+0100
Process uptime: 36s
Cmdline: de.organisation.test_app
pid: 22120, tid: 22155, name: 1.ui >>> de.organisation.test_app
На данный момент я не знаю, что еще Могу я проверить. Кто -то здесь, кто знает, как получить доступ к этому SDK? < /P>
% flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.27.2, on macOS 15.1.1 24B91 darwin-arm64, locale de-DE)
[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.1)
[!] Xcode - develop for iOS and macOS (Xcode 16.1)
✗ Unable to get list of installed Simulator runtimes.
✗ CocoaPods not installed.
CocoaPods is a package manager for iOS or macOS platform code.
Without CocoaPods, plugins will not work on iOS or macOS.
For more info, see https://flutter.dev/to/platform-plugins
For installation instructions, see https://guides.cocoapods.org/using/gett ... stallation
[✓] Chrome - develop for the web
[✓] Android Studio (version 2024.1)
[✓] IntelliJ IDEA Ultimate Edition (version 2024.1.7)
[✓] VS Code (version 1.97.2)
[✓] Connected device (4 available)
[✓] Network resources
< /code>
Вот как я называю функцию: < /p>
import 'dart:ffi' as ffi;
import 'dart:io';
import 'package:ffi/ffi.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:pos_app/ffi_libs/generated_evolis_bindings.dart';
import 'package:pos_app/utility/widgets/space.dart';
class EvoilsTestPage extends StatefulWidget {
const EvoilsTestPage({super.key});
@override
State createState() => _EvoilsTestPageState();
}
class _EvoilsTestPageState extends State {
late final EvolisBindings evoBinding;
String status = 'ready';
@override
void initState() {
if (!kIsWeb) {
final dynamicLibrary = Platform.isAndroid
? ffi.DynamicLibrary.open('libevolis.so')
: ffi.DynamicLibrary.process();
evoBinding = EvolisBindings(dynamicLibrary);
}
super.initState();
}
updateStatus(String status) {
print(status);
setState(() {
this.status = status;
});
}
_getEvoVersion() {
try {
final versionPtr = evoBinding.evolis_version();
String version = versionPtr.cast().toDartString();
updateStatus("evo version: $version");
} catch (e) {
updateStatus("evolis_version function NOT found: $e");
}
}
_lookUpFunction() {
String functionName = "evolis_open";
try {
updateStatus("start Print");
updateStatus("openPrinter");
final openFunc = evoBinding.lookup("evolis_open");
updateStatus('$functionName: ${openFunc.toString()}');
return;
} catch (e) {
updateStatus('$functionName does not seem to exist:\n\n${e.toString()}');
}
}
_testPrint() async {
ffi.Pointer namePtr = ffi.nullptr;
try {
String dartString = 'Evolis Primacy 2';
namePtr = dartString.toNativeUtf8().cast();
final printerPtr = evoBinding.evolis_open(namePtr);
if (printerPtr.address == 0) {
updateStatus("Failed to open printer.");
} else {
updateStatus(
"Printer opened successfully. ${printerPtr.toString()}");
}
print("closePrinter");
evoBinding.evolis_close(printerPtr);
print("free pointer");
malloc.free(namePtr);
} catch (e) {
malloc.free(namePtr);
updateStatus(e.toString());
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Evolis Printer Test")),
body: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(status),
Space.p40(),
ElevatedButton(
onPressed: () => _testPrint(),
child: Text("Test Print"),
),
ElevatedButton(
onPressed: _getEvoVersion,
child: Text("Evo Version"),
),
ElevatedButton(
onPressed: _lookUpFunction,
child: Text("Lookup Function"),
),
],
),
),
);
}
}
< /code>
Я не буду бросать здесь сгенерированный класс, потому что это 14495 строк. Но вот важные функции вызов < /p>
import 'dart:ffi' as ffi;
class EvolisBindings {
/// Holds the symbol lookup function.
final ffi.Pointer Function(String symbolName)
lookup;
/// The symbols are looked up in [dynamicLibrary].
EvolisBindings(ffi.DynamicLibrary dynamicLibrary)
: lookup = dynamicLibrary.lookup;
/// The symbols are looked up with [lookup].
EvolisBindings.fromLookup(
ffi.Pointer Function(String symbolName)
lookup)
: lookup = lookup;
/// Connect to the printer referenced by the `name` argument.
/// Same as evolis_open_with_mode(a, EVOLIS_OM_AUTO)
ffi.Pointer evolis_open(
ffi.Pointer name,
) {
return _evolis_open(
name,
);
}
late final _evolis_openPtr = lookup<
ffi.NativeFunction<
ffi.Pointer Function(
ffi.Pointer)>>('evolis_open');
late final _evolis_open = _evolis_openPtr
.asFunction();
/// Get library version at runtime.
ffi.Pointer evolis_version() {
return _evolis_version();
}
late final _evolis_versionPtr =
lookup(
'evolis_version');
late final _evolis_version =
_evolis_versionPtr.asFunction();
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... k-with-ffi
Флаттер сбои при использовании Evolis Android SDK с FFI ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1739973929
Anonymous
Это очень специфический вопрос, но я больше не знаю, где искать.
evlois предоставляет SDK для Android в виде файлов .so.
https://sdk.evolis.com/doc/doc-c/index.html
https://sdk.evolis.com/doc/doc-c/evolis_8h.html
Я добавил файлы в правильные папки в моем каталоге Android и сгенерировал класс привязки Dart через ffigen. Так что я могу получить доступ к SDK. Это также работает для функции «evolis_version». Это дает мне версию 9.0.2.6484. Я не поймаю исключение, это просто сбои. Я могу найти функцию, так что она существует. < /P>
F/libc (22120): Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 22155 (1.ui), pid 22120 (systems.test_app)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'SUNMI/V3_MIX_EDLA_GL/V3_MIX:13/TKQ1.230110.001/40:user/release-keys'
Revision: '0'
ABI: 'arm64'
Timestamp: 2025-02-19 14:58:37.674946211+0100
Process uptime: 36s
Cmdline: de.organisation.test_app
pid: 22120, tid: 22155, name: 1.ui >>> de.organisation.test_app
На данный момент я не знаю, что еще Могу я проверить. Кто -то здесь, кто знает, как получить доступ к этому SDK? < /P>
% flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.27.2, on macOS 15.1.1 24B91 darwin-arm64, locale de-DE)
[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.1)
[!] Xcode - develop for iOS and macOS (Xcode 16.1)
✗ Unable to get list of installed Simulator runtimes.
✗ CocoaPods not installed.
CocoaPods is a package manager for iOS or macOS platform code.
Without CocoaPods, plugins will not work on iOS or macOS.
For more info, see https://flutter.dev/to/platform-plugins
For installation instructions, see https://guides.cocoapods.org/using/getting-started.html#installation
[✓] Chrome - develop for the web
[✓] Android Studio (version 2024.1)
[✓] IntelliJ IDEA Ultimate Edition (version 2024.1.7)
[✓] VS Code (version 1.97.2)
[✓] Connected device (4 available)
[✓] Network resources
< /code>
Вот как я называю функцию: < /p>
import 'dart:ffi' as ffi;
import 'dart:io';
import 'package:ffi/ffi.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:pos_app/ffi_libs/generated_evolis_bindings.dart';
import 'package:pos_app/utility/widgets/space.dart';
class EvoilsTestPage extends StatefulWidget {
const EvoilsTestPage({super.key});
@override
State createState() => _EvoilsTestPageState();
}
class _EvoilsTestPageState extends State {
late final EvolisBindings evoBinding;
String status = 'ready';
@override
void initState() {
if (!kIsWeb) {
final dynamicLibrary = Platform.isAndroid
? ffi.DynamicLibrary.open('libevolis.so')
: ffi.DynamicLibrary.process();
evoBinding = EvolisBindings(dynamicLibrary);
}
super.initState();
}
updateStatus(String status) {
print(status);
setState(() {
this.status = status;
});
}
_getEvoVersion() {
try {
final versionPtr = evoBinding.evolis_version();
String version = versionPtr.cast().toDartString();
updateStatus("evo version: $version");
} catch (e) {
updateStatus("evolis_version function NOT found: $e");
}
}
_lookUpFunction() {
String functionName = "evolis_open";
try {
updateStatus("start Print");
updateStatus("openPrinter");
final openFunc = evoBinding.lookup("evolis_open");
updateStatus('$functionName: ${openFunc.toString()}');
return;
} catch (e) {
updateStatus('$functionName does not seem to exist:\n\n${e.toString()}');
}
}
_testPrint() async {
ffi.Pointer namePtr = ffi.nullptr;
try {
String dartString = 'Evolis Primacy 2';
namePtr = dartString.toNativeUtf8().cast();
final printerPtr = evoBinding.evolis_open(namePtr);
if (printerPtr.address == 0) {
updateStatus("Failed to open printer.");
} else {
updateStatus(
"Printer opened successfully. ${printerPtr.toString()}");
}
print("closePrinter");
evoBinding.evolis_close(printerPtr);
print("free pointer");
malloc.free(namePtr);
} catch (e) {
malloc.free(namePtr);
updateStatus(e.toString());
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Evolis Printer Test")),
body: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(status),
Space.p40(),
ElevatedButton(
onPressed: () => _testPrint(),
child: Text("Test Print"),
),
ElevatedButton(
onPressed: _getEvoVersion,
child: Text("Evo Version"),
),
ElevatedButton(
onPressed: _lookUpFunction,
child: Text("Lookup Function"),
),
],
),
),
);
}
}
< /code>
Я не буду бросать здесь сгенерированный класс, потому что это 14495 строк. Но вот важные функции вызов < /p>
import 'dart:ffi' as ffi;
class EvolisBindings {
/// Holds the symbol lookup function.
final ffi.Pointer Function(String symbolName)
lookup;
/// The symbols are looked up in [dynamicLibrary].
EvolisBindings(ffi.DynamicLibrary dynamicLibrary)
: lookup = dynamicLibrary.lookup;
/// The symbols are looked up with [lookup].
EvolisBindings.fromLookup(
ffi.Pointer Function(String symbolName)
lookup)
: lookup = lookup;
/// Connect to the printer referenced by the `name` argument.
/// Same as evolis_open_with_mode(a, EVOLIS_OM_AUTO)
ffi.Pointer evolis_open(
ffi.Pointer name,
) {
return _evolis_open(
name,
);
}
late final _evolis_openPtr = lookup<
ffi.NativeFunction<
ffi.Pointer Function(
ffi.Pointer)>>('evolis_open');
late final _evolis_open = _evolis_openPtr
.asFunction();
/// Get library version at runtime.
ffi.Pointer evolis_version() {
return _evolis_version();
}
late final _evolis_versionPtr =
lookup(
'evolis_version');
late final _evolis_version =
_evolis_versionPtr.asFunction();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79451624/flutter-crashes-on-use-of-evolis-android-sdk-with-ffi[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия