FastAIX | Empowering Next-Generation AI Workflows & Rapid Development

Error: ENOENT: no such file or directory, open '/tmp/ext_xxx/assets/images/media.png

Here’s a clean and clear version in English, tailored for AixGenerator documentation or guidelines:


Icon Reference Requirement for AixGenerator Extensions

In AixGenerator, the icon reference in extensions must always be declared exactly as shown below:

@DesignerComponent(
        version = 1,
        description = "Simple extension to convert words (pt-BR) into integer numbers (long)",
        iconName = "icon.png"
)

:white_check_mark: Important rule
The icon file must be named exactly:

icon.png

And it must be correctly included in the extension assets.
No other file name or path should be used.


Common Error and How to Fix It

If you encounter an error similar to the one below:

{
  "error": "ENOENT: no such file or directory, open '/tmp/ext_26398728_2ca9eed9-ba47-4bf5-964b-aef11a9d1022_1769270441883/assets/images/media.png'",
  "fastLogs": "",
  "packageName": "com.yourpackage",
  "extensionName": "ExoVideoPlayer"
}

:magnifying_glass_tilted_left: What this means
This error usually indicates that the extension is trying to load an icon file that does not exist or is incorrectly referenced.

:white_check_mark: What the user must check

  • Ensure the icon file is named exactly: icon.png

  • Ensure the annotation uses:

    iconName = "icon.png"
    
  • Make sure the file is present in the correct extension assets directory


:light_bulb: Tip
Most ENOENT icon-related errors in AixGenerator are caused by:

  • Wrong icon file name
  • Wrong icon path
  • Using a name different from icon.png

Keeping this standard avoids build and packaging issues.

The Link is broken.
https://aixgenerator.xyz/

1 Like

We lacked the funds to maintain the project; I want to activate it soon, but I'm short of financial resources.

Use GitHub webpage, vercel etc

1 Like

I will explore other ways to maintain the project and reduce costs. It's too expensive through Replit.com.

New platform

1 Like

Nice, tried the DeviceUtils example, but the aix generated does not work:

  1. loaded the example
  2. clicked compile AIX
  3. created s simple app ( a label, two buttons and the extension ), but it does not display anything in companion and generating apk result in error
Error

App Inventor is unable to compile this project.
The compiler error output was
[ReadBuildInfo] Starting Task
[ReadBuildInfo] Task succeeded in 0.004 seconds
[LoadComponentInfo] Starting Task
[LoadComponentInfo] INFO: Generating assets...
[LoadComponentInfo] Component assets needed, n = 0
[LoadComponentInfo] INFO: Generating activities...
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify activities
[LoadComponentInfo] Component activities needed, n = 0
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify activityMetadata
[LoadComponentInfo] Component activity metadata needed, n = 0
[LoadComponentInfo] INFO: Generating broadcast receivers...
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify broadcastReceivers
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify contentProviders
[LoadComponentInfo] INFO: Generating libraries...
[LoadComponentInfo] Libraries needed, n = 0
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify metadata
[LoadComponentInfo] Component metadata needed, n = 0
[LoadComponentInfo] INFO: Generating Android minimum SDK...
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify androidMinSdk
[LoadComponentInfo] INFO: Generating native libraries...
[LoadComponentInfo] Native Libraries needed, n = 0
[LoadComponentInfo] INFO: Generating permissions...
[LoadComponentInfo] usesLocation = false
[LoadComponentInfo] Permissions needed, n = 5
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify queries
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify services
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify xmls
[LoadComponentInfo] Component xmls needed, n = 0
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify features
[LoadComponentInfo] Component features needed, n = 0
[LoadComponentInfo] INFO: Generating component broadcast receivers...
[LoadComponentInfo] INFO: Component "com.fast.deviceutils.DeviceUtils" does not specify broadcastReceiver
[LoadComponentInfo] Task succeeded in 0.004 seconds
[PrepareAppIcon] Starting Task
[PrepareAppIcon] INFO: Creating mipmap dirs...
[PrepareAppIcon] INFO: Generating icons...
[PrepareAppIcon] Generating icons for mipmap-mdpi
[PrepareAppIcon] Generating icons for mipmap-hdpi
[PrepareAppIcon] Generating icons for mipmap-xhdpi
[PrepareAppIcon] Generating icons for mipmap-xxhdpi
[PrepareAppIcon] Generating icons for mipmap-xxxhdpi
[PrepareAppIcon] Task succeeded in 0.897 seconds
[XmlConfig] Starting Task
[XmlConfig] INFO: Creating animation xml
[XmlConfig] Creating zoom_enter.xml
[XmlConfig] Creating fadeout.xml
[XmlConfig] Creating slide_v_exit.xml
[XmlConfig] Creating fadein.xml
[XmlConfig] Creating zoom_exit.xml
[XmlConfig] Creating slide_v_enter.xml
[XmlConfig] Creating zoom_exit_reverse.xml
[XmlConfig] Creating slide_v_enter_reverse.xml
[XmlConfig] Creating zoom_enter_reverse.xml
[XmlConfig] Creating slide_enter_reverse.xml
[XmlConfig] Creating slide_exit.xml
[XmlConfig] Creating hold.xml
[XmlConfig] Creating slide_enter.xml
[XmlConfig] Creating slide_v_exit_reverse.xml
[XmlConfig] Creating slide_exit_reverse.xml
[XmlConfig] INFO: Creating style xml
[XmlConfig] INFO: Creating provider_path xml
[XmlConfig] INFO: Creating network_security_config xml
[XmlConfig] INFO: Generating adaptive icon file
[XmlConfig] INFO: Generating round adaptive icon file
[XmlConfig] INFO: Generating adaptive icon background file
[XmlConfig] Task succeeded in 0.005 seconds
[CreateManifest] Starting Task
[CreateManifest] INFO: Reading project specs...
[CreateManifest] VCode: 1
[CreateManifest] VName: 1.0
[CreateManifest] Min SDK 14
[CreateManifest] INFO: Writing screen 'appinventor.ai_google.fastaix01.Screen1'
[CreateManifest] Task succeeded in 0.001 seconds
[AttachNativeLibs] Starting Task
[AttachNativeLibs] Task succeeded in 0.0 seconds
[AttachAarLibs] Starting Task
[AttachAarLibs] Task succeeded in 0.143 seconds
[AttachCompAssets] Starting Task
[AttachCompAssets] Task succeeded in 0.0 seconds
[MergeResources] Starting Task
[MergeResources] Task succeeded in 0.155 seconds
[SetupLibs] Starting Task
[SetupLibs] Task succeeded in 0.0 seconds
[RunAapt] Starting Task
[RunAapt] Task succeeded in 0.906 seconds
[GenerateClasses] Starting Task
[GenerateClasses] INFO: Source File: appinventor/ai_google/fastaix01/Screen1.yail
[GenerateClasses] INFO: Libraries Classpath = /tmp/kawa4796551087026969224.jar:/tmp/acra-4.4.09364318289804672276.jar:/tmp/AndroidRuntime12044034621336663279.jar:/tmp/annotation15355775321674116328.jar:/tmp/annotation-experimental15678031574587651549.jar:/tmp/appcompat1413884703449370718.jar:/tmp/asynclayoutinflater11336588267099117983.jar:/tmp/collection9071058126671884909.jar:/tmp/constraintlayout5980483894642116288.jar:/tmp/constraintlayout-solver7580663353991269890.jar:/tmp/coordinatorlayout7593708724248708202.jar:/tmp/core4271368499944259507.jar:/tmp/core-common15917118601541368790.jar:/tmp/core-runtime250702261843604785.jar:/tmp/cursoradapter4103435021142640795.jar:/tmp/customview9664010693965981858.jar:/tmp/documentfile4471591745195575782.jar:/tmp/drawerlayout6930638063734324910.jar:/tmp/fragment15699353044546407134.jar:/tmp/interpolator2776485474215363172.jar:/tmp/legacy-support-core-ui14495921605881994347.jar:/tmp/legacy-support-core-utils12542634824780981340.jar:/tmp/lifecycle-common8420695293511851075.jar:/tmp/lifecycle-livedata12195573304814867424.jar:/tmp/lifecycle-livedata-core592993972380593801.jar:/tmp/lifecycle-runtime8467519006611470451.jar:/tmp/lifecycle-viewmodel2173450282266626518.jar:/tmp/loader14904417047907217596.jar:/tmp/localbroadcastmanager13605546975711513849.jar:/tmp/print6990568589753720285.jar:/tmp/slidingpanelayout410966112710584644.jar:/tmp/swiperefreshlayout5406921389595437292.jar:/tmp/vectordrawable15954596100527934235.jar:/tmp/vectordrawable-animated6748802374883316037.jar:/tmp/versionedparcelable5481060080636629746.jar:/tmp/viewpager7712309283723554595.jar:/tmp/1793866904648_761897588104827904-0/youngandroidproject/../assets/external_comps/com.fast.deviceutils.DeviceUtils/files/AndroidRuntime.jar:/tmp/1793866904648_761897588104827904-0/youngandroidproject/../build/classes:/tmp/android15909497636892822153.jar
[GenerateClasses] ERROR: Kawa compile has failed.
(compiling appinventor/ai_google/fastaix01/Screen1.yail to appinventor.ai_google.fastaix01.Screen1)
ERROR: appinventor/ai_google/fastaix01/Screen1.yail line 41: caught exception in inliner for # - java.lang.RuntimeException: no such class: com.fast.deviceutils.DeviceUtils
gnu.bytecode.ObjectType.getReflectClass(ObjectType.java:179)
gnu.bytecode.ClassType.getModifiers(ClassType.java:103)
gnu.bytecode.ClassType.isInterface(ClassType.java:471)
gnu.expr.InlineCalls.checkType(InlineCalls.java:56)
gnu.expr.InlineCalls.visit(InlineCalls.java:49)
gnu.expr.InlineCalls.visitSetExpValue(InlineCalls.java:363)
gnu.expr.InlineCalls.visitSetExpValue(InlineCalls.java:28)
gnu.expr.ExpVisitor.visitSetExp(ExpVisitor.java:114)
gnu.expr.InlineCalls.visitSetExp(InlineCalls.java:369)
gnu.expr.InlineCalls.visitSetExp(InlineCalls.java:28)
gnu.expr.SetExp.visit(SetExp.java:406)
gnu.expr.ExpVisitor.visit(ExpVisitor.java:55)
gnu.expr.InlineCalls.visit(InlineCalls.java:46)
gnu.expr.InlineCalls.visitBeginExp(InlineCalls.java:272)
gnu.expr.InlineCalls.visitBeginExp(InlineCalls.java:28)
gnu.expr.BeginExp.visit(BeginExp.java:156)
gnu.expr.ExpVisitor.visit(ExpVisitor.java:51)
gnu.expr.InlineCalls.visit(InlineCalls.java:46)
gnu.expr.InlineCalls.visit(InlineCalls.java:28)
gnu.expr.ExpVisitor.visitAndUpdate(ExpVisitor.java:161)
gnu.expr.ExpVisitor.visitExps(ExpVisitor.java:175)
gnu.expr.ApplyExp.visitArgs(ApplyExp.java:415)
gnu.kawa.functions.CompileMisc.validateApplyAppendValues(CompileMisc.java:139)
jdk.internal.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.base/java.lang.reflect.Method.invoke(Unknown Source)
gnu.expr.InlineCalls.maybeInline(InlineCalls.java:467)
gnu.expr.QuoteExp.validateApply(QuoteExp.java:150)
gnu.expr.InlineCalls.visitApplyExp(InlineCalls.java:119)
gnu.expr.InlineCalls.visitApplyExp(InlineCalls.java:28)
gnu.expr.ApplyExp.visit(ApplyExp.java:410)
gnu.expr.ExpVisitor.visit(ExpVisitor.java:55)
gnu.expr.InlineCalls.visit(InlineCalls.java:46)
gnu.expr.InlineCalls.visit(InlineCalls.java:28)
gnu.expr.LambdaExp.visitChildrenOnly(LambdaExp.java:1664)
gnu.expr.LambdaExp.visitChildren(LambdaExp.java:1651)
gnu.expr.InlineCalls.visitScopeExp(InlineCalls.java:279)
gnu.expr.InlineCalls.visitLambdaExp(InlineCalls.java:349)
gnu.expr.InlineCalls.visitLambdaExp(InlineCalls.java:28)
gnu.expr.ExpVisitor.visitModuleExp(ExpVisitor.java:103)
gnu.expr.ModuleExp.visit(ModuleExp.java:482)
gnu.expr.ExpVisitor.visit(ExpVisitor.java:51)
gnu.expr.InlineCalls.visit(InlineCalls.java:46)
gnu.expr.InlineCalls.inlineCalls(InlineCalls.java:33)
gnu.expr.Compilation.walkModule(Compilation.java:994)
gnu.expr.Compilation.process(Compilation.java:1965)
gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:330)
gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:315)
gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:315)
gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:315)
kawa.repl.compileFiles(repl.java:783)
kawa.repl.processArgs(repl.java:412)
kawa.repl.main(repl.java:827)
[GenerateClasses] ERROR: Can't find class file for Screen 'Screen1'
[GenerateClasses] Task errored in 2.222 seconds

Noted also that generated java is quite "bare metal" ( for example Vibrate and CopyToClipboard functions do not contain anything )

DeviceUtils.java

import com.google.appinventor.components.annotations.Component;
import com.google.appinventor.components.annotations.Function;
import com.google.appinventor.components.annotations.Event;
import com.google.appinventor.components.annotations.Property;
import com.google.appinventor.components.runtime.AndroidNonvisibleComponent;
import com.google.appinventor.components.runtime.ComponentContainer;
import com.google.appinventor.components.runtime.EventDispatcher;
import com.google.appinventor.components.runtime.util.YailList;
import com.google.appinventor.components.runtime.util.YailDictionary;
import com.fast.deviceutils.helpers.*;

@Component(
version = 1,
versionName = "1.0",
description = "Hardware and system utility extension for battery status, device model, SDK level, vibration, and clipboard.",
iconName = "icon.png"
)
public class DeviceUtils extends AndroidNonvisibleComponent {

public DeviceUtils(ComponentContainer container) {
    super(container.$form());
}

@Function("Vibrates the phone for specified milliseconds.")
public void Vibrate(int milliseconds) {
}

@Function("Copies text to Android system clipboard.")
public void CopyToClipboard(String text) {
}

@Property("Returns DeviceModel property.")
public String DeviceModel() {
    return "1.0";
}

@Event("Fired when battery level drops.")
public void OnBatteryLow(int level) {
    EventDispatcher.dispatchEvent(this, "OnBatteryLow", level);
}

}

fastaix01.aia (4.4 KB)
com.fast.deviceutils.aix (6.7 KB)

P.S. Only adding that importing the attached aia fails : - (

1 Like

I have removed the in-browser compilation option. You will now need to run the server—available for direct download—on your own machine in order to compile with 'fast' installed.

ok, installed on my pc ( running on localhost:3000 ):

server output
C:\Users\Davide\Documents\Android\fastaix\fast-builder-server>run
"============================================================================"
"  FastAIX Local Build Server for MIT App Inventor & Kodular Extensions"
"  Fast-CLI by Jewel: https://github.com/jewelshkjony/fast-cli"
"============================================================================"

"[INFO] Starting local build server..."
"(If port 3000 is busy, it will automatically switch to port 3001 or next free port)"
"Keep this window open while using FastAIX Studio in your browser!"

================================================================
 FastAIX Build Server v2.1.0 is active!
 Listening on: http://localhost:3000
 Endpoint:     http://localhost:3000/health
 Security:     Anti-RCE, Anti-Traversal, High-Concurrency Ready
================================================================

but when I click compile AIX an error appear on the command window
:

server error on pc
node:internal/child_process:458
    throw new ErrnoException(err, 'spawn');
          ^

Error: spawn EINVAL
    at ChildProcess.spawn (node:internal/child_process:458:11)
    at spawn (node:child_process:813:9)
    at execFile (node:child_process:349:17)
    at Server.handleRequest (C:\Users\Davide\Documents\Android\fastaix\fast-builder-server\server.js:326:5)
    at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
  errno: -4071,
  code: 'EINVAL',
  syscall: 'spawn'
}

Node.js v24.21.0
Press any key to continue . . .

C:\Users\Davide\Documents\Android\fastaix\fast-builder-server>run

and this is the error on the fastaix console:

error fastaix
[20:36:32]INFO=======================================================

[20:36:32]INFOFAST-CLI Command Execution: fast build -r -s -b -dx -o -m -online

[20:36:32]INFO[DISPATCHING]: "build" -> http://localhost:3000/api/compile

[20:36:32]INFO- [FILES SYNCED]: 12 project files sent (Java source, fast.yml v8.1.0, assets, deps)

[20:36:32]ERROR[NETWORK ERROR]: NetworkError when attempting to fetch resource.

P.S.
added quotes in echo statements as unescaped chars where causing errors

run.txt (1.3 KB)

1 Like

Thank you for the feedback and for using Windows.

I have sent a new update. Could you please test it again by downloading the new file from the server?

Good, this is now the output on the command window on my pc:

Summary
[FAST-CLI] Executing: fast build -r -s -b -dx -o -m -online in C:\Users\Davide\Documents\Android\fastaix\fast-builder-server\workspace\DeviceUtils_1793917496106_df902b58
[FAST-CLI OUTPUT]:
__           _
 / _| __ _ ___| |_
| |_ / _` / __| __|
|  _| (_| \__ \ |_  (v8.0.0-free)
|_|  \__,_|___/\__| (29.10.26.22.11)


WARNING: A restricted method in java.lang.System has been called
WARNING: java.lang.System::load has been called by org.fusesource.jansi.internal.JansiLoader in an unnamed module (file:/C:/Users/Davide/AppData/Local/Fast/fast.jar)
WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module
WARNING: Restricted methods will be blocked in a future release unless native access is enabled

x java.io.FileNotFoundException: AndroidManifest.xml is not exists at: C:\Users\Davide\Documents\Android\fastaix\fast-builder-server\workspace\DeviceUtils_1793917496106_df902b58\src\AndroidManifest.xml
        at com.jewel.fast.repacked.Build.<init>(.java:129)
        at com.jewel.fast.Fast.main(Fast.java:115)

AndroidManifest.xml is present but in the parent directory ( C:\Users\Davide\Documents\Android\fastaix\fast-builder-server\workspace\DeviceUtils_1793917496106_df902b58\AndroidManifest.xml )

this is the message on the fastaix console:

fastaix console
[23:35:49]INFOTerminal cleared.

[23:35:50]INFO=======================================================

[23:35:50]INFOFAST-CLI Command Execution: fast build -r -s -b -dx -o -m -online

[23:35:50]INFO[DISPATCHING]: "build" -> http://localhost:3000/api/compile

[23:35:50]INFO- [FILES SYNCED]: 12 project files sent (Java source, fast.yml v8.1.0, assets, deps)

[23:35:51]INFO__ _

[23:35:51]INFO / _| __ _ ___| |_

[23:35:51]INFO| |_ / _` / __| __|

[23:35:51]INFO| _| (_| \__ \ |_ (v8.0.0-free)

[23:35:51]INFO|_| \__,_|___/\__| (29.10.26.22.11)

[23:35:51]INFOWARNING: A restricted method in java.lang.System has been called

[23:35:51]INFOWARNING: java.lang.System::load has been called by org.fusesource.jansi.internal.JansiLoader in an unnamed module (file:/C:/Users/Davide/AppData/Local/Fast/fast.jar)

[23:35:51]INFOWARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module

[23:35:51]INFOWARNING: Restricted methods will be blocked in a future release unless native access is enabled

[23:35:51]INFOx java.io.FileNotFoundException: AndroidManifest.xml is not exists at: C:\Users\Davide\Documents\Android\fastaix\fast-builder-server\workspace\DeviceUtils_1793918150238_a32a404f\src\AndroidManifest.xml

[23:35:51]INFO at com.jewel.fast.repacked.Build.<init>(.java:129)

[23:35:51]INFO at com.jewel.fast.Fast.main(Fast.java:115)

[23:35:51]OK>> FAST-CLI EXECUTION SUCCESSFUL!

[23:35:51]OKCreated AIX package: out/com.fast.deviceutils.aix (0.0 KB)

aix is generated but does not load

com.fast.deviceutils.aix (18 Bytes)

1 Like

Thanks. I will do a new analysis.

1 Like
[23:35:51]INFOx java.io.FileNotFoundException: AndroidManifest.xml is not exists at: C:\Users\Davide\Documents\Android\fastaix\fast-builder-server\workspace\DeviceUtils_1793918150238_a32a404f\src\AndroidManifest.xml

[23:35:51]INFO at com.jewel.fast.repacked.Build.<init>(.java:129)

[23:35:51]INFO at com.jewel.fast.Fast.main(Fast.java:115)

[23:35:51]OK>> FAST-CLI EXECUTION SUCCESSFUL!

[23:35:51]OKCreated AIX package: out/com.fast.deviceutils.aix (0.0 KB)

Although the FAST-CLI tool returned a FileNotFoundException, the process was logged as a successful execution!

yes, the aix is generated but contains only 18 bytes ( the string: "AIX Binary Archive" )

The aix is not generated by FAST, FAST threw (AndroidManifest.xml) FileNotFoundException.

@Passos_0213 I think you need the catch exceptions correctly.