🏃‍♂️ Fast : An Efficient Way to Build & Publish Extensions

:crescent_moon: An update is available 5.7.0

Date built: 28.02.26.11.53 :bangladesh:


  • Updated MavenResolver to v2.0.16
  • Allows sub-directory for icons & assets.
  • Fix utf-8 encoding issue.
1 Like

:rocket: An update is available 5.7.1

Date built: 28.03.26.00.17 :bangladesh:


  • Performance tweaks. (2x for premium users)
  • Updated ProGuard Library to v7.9.0
  • Updated Yaml writer.
  • Added --del-remote flag to remove project’s remote deps from cache. E.g: fast sync --del-remote.
  • Added --del-local flag to remove local parsed aars from cache.
3 Likes

add manifest merger :folded_hands:

I’m already thinking about it.

1 Like

Proposal: Add exclude Support for Gradle Dependencies in FAST Extension Builder

I would like to propose adding support for Gradle dependency exclusions inside the FAST Extension Builder for Android extensions.

Currently, when adding dependencies such as:

implementation('com.onesignal:OneSignal:5.1.6') {
    exclude group: 'org.jetbrains.kotlin'
    exclude module: 'kotlin-stdlib'
    exclude module: 'kotlin-stdlib-jdk7'
    exclude module: 'kotlin-stdlib-jdk8'
}

there is no direct way to define these exclude rules within the FAST Extension Builder.

Why this is important:

Many third-party SDKs include transitive dependencies that may conflict with the platform’s existing Kotlin libraries or other bundled libraries. In cases like OneSignal, excluding Kotlin stdlib modules is necessary to prevent:

  • Duplicate class errors
  • Build failures during APK/AAB generation
  • Version conflicts with existing dependencies
  • Unnecessary increase in app size

Suggested Improvement:

Please add support for dependency exclusion rules in the builder interface, allowing developers to define:

  • exclude group
  • exclude module

Example desired support:

implementation('com.onesignal:OneSignal:5.1.6') {
    exclude group: 'org.jetbrains.kotlin'
    exclude module: 'kotlin-stdlib'
    exclude module: 'kotlin-stdlib-jdk7'
    exclude module: 'kotlin-stdlib-jdk8'
}

This feature would significantly improve compatibility with modern Android SDKs and make FAST Extension Builder much more flexible for advanced integrations.

It would especially help developers working with push notifications, analytics SDKs, ads SDKs, and other libraries that commonly introduce transitive dependency conflicts.

Thank you for considering this improvement.

The exclusion feature is already there. Check it out here:

:fire: An update is available 6.0.0

Date built: 06.05.26.23.08 :bangladesh:


Breaking changes:

  • Added support for Xtend programming language.
  • Added support for modern Java (9-25) syntax.
  • Added manifests-merging feature.
  • Updated AndroidRuntime.jar and processor.jar to support YailProcedure.
  • Fix helper classes written in Kotlin were not supported.
  • Allow creation of projects with case-sensitive project names and package names.
  • Updated ProGuard library to v7.9.1.
  • Removed unnecessary libraries from Kotlin Home.
  • Gradle and Maven resolvers use custom cache directories.
  • By scrapping the old licensing system, FAST now uses the new token system to determine premium users. (Affects all users)
4 Likes

Suppose I have an AAR dependency. Where should I add this in the dependency or AAR section? How do I add the AAR dependency’s XML file when there are multiple files to include one by one?

Also, regarding the child folder, why is the ‘res’ folder not recognized? I’m getting an error message about this.

Hello Koders!

I’ve installed FAST-CLI on Ubuntu 26.04 (Linux) but it gave me:

Command 'fast' not found, but can be installed with:
sudo snap install fast

and the “sudo snap install fast” was false…

so how can i fix that?

Try the manual setup process:

dependencies:
- Aar-Library.aar
aars:
- Aar-Library.aar

Please elaborate….

1 Like

Thank you very much for your assistance.

However, I am encountering an AAPT error while building the APK, and I am unable to identify which XML file is causing this issue.

sometimes it can be the package structure if am not wrong, can you check that

If your AAR has res/font/*.ttf font file, it might be the reason.

Hmm, I have already removed it. My res folder is attached below:

res.zip (5.3 KB)

Is there any way to see which XML files are included in AIX ? Also, does Kodular support Google’s full Material Components library?

build log
Kodular is unable to compile this project.
The compiler error output was
[ReadBuildInfo] Starting Task
[ReadBuildInfo] Task succeeded in 0.006 seconds
[LoadComponentInfo] Starting Task
[LoadComponentInfo] INFO: Generating assets...
[LoadComponentInfo] Component assets needed, n = 7
[LoadComponentInfo] INFO: Generating activities...
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify activities
[LoadComponentInfo] Component activities needed, n = 0
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify activityMetadata
[LoadComponentInfo] Component activity metadata needed, n = 0
[LoadComponentInfo] INFO: Generating broadcast receivers...
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify broadcastReceivers
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify contentProviders
[LoadComponentInfo] INFO: Generating libraries...
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify libraries
[LoadComponentInfo] Libraries needed, n = 3
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify metadata
[LoadComponentInfo] Component metadata needed, n = 0
[LoadComponentInfo] INFO: Generating Android minimum SDK...
[LoadComponentInfo] INFO: Generating native libraries...
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify native
[LoadComponentInfo] Native Libraries needed, n = 0
[LoadComponentInfo] INFO: Generating permissions...
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify permissions
[LoadComponentInfo] usesLocation = False
[LoadComponentInfo] Permissions needed, n = 4
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify queries
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify services
[LoadComponentInfo] Component xmls needed, n = 12
[LoadComponentInfo] INFO: Generating component broadcast receivers...
[LoadComponentInfo] INFO: Component "com.glich.motiontoastext.MotionToastExt" does not specify broadcastReceiver
[LoadComponentInfo] Task succeeded in 0.007 seconds
[CheckDeprecatedComponents] Starting Task
[CheckDeprecatedComponents] Task succeeded in 0.012 seconds
[CheckComponentRequirements] Starting Task
[CheckComponentRequirements] Task succeeded in 0.0 seconds
[VerifyExtensions] Starting Task
[VerifyExtensions] Task succeeded in 0.375 seconds
[GenerateBuildId] Starting Task
[GenerateBuildId] INFO: Skipping Build ID generation for App with no required components.
[GenerateBuildId] Task succeeded in 0.0 seconds
[RetrieveGamAdUnit] Starting Task
[RetrieveGamAdUnit] INFO: Skipping Ad Unit ID retrieval for app with no required components.
[RetrieveGamAdUnit] Task succeeded in 0.0 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.078 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 colors xml
[XmlConfig] INFO: Creating styles 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] INFO: Creating fragment xml
[XmlConfig] INFO: Creating listview xml
[XmlConfig] INFO: Creating listview-21 xml
[XmlConfig] INFO: Creating drawable xml
[XmlConfig] INFO: Creating drawable-21 xml
[XmlConfig] INFO: Creating strings xml
[XmlConfig] INFO: Generating custom xml files
[XmlConfig] Task succeeded in 0.004 seconds
[CreateManifest] Starting Task
[CreateManifest] INFO: Reading project specs...
[CreateManifest] VCode: 1
[CreateManifest] VName: 1.0
[CreateManifest] Custom Package Name: com.app.test
[CreateManifest] Min SDK 21
[CreateManifest] INFO: Writing screen 'io.kodular.shaju_mukta.Simple26.Screen1'
[CreateManifest] INFO: Writing screen 'io.kodular.shaju_mukta.Simple26.toastsrc'
[CreateManifest] Task succeeded in 0.0 seconds
[AttachNativeLibs] Starting Task
[AttachNativeLibs] Task succeeded in 0.0 seconds
[AttachAarLibs] Starting Task
[AttachAarLibs] Task succeeded in 0.06 seconds
[AttachCompAssets] Starting Task
[AttachCompAssets] Task succeeded in 0.003 seconds
[MergeResources] Starting Task
[MergeResources] Task succeeded in 0.049 seconds
[SetupLibs] Starting Task
[SetupLibs] Task succeeded in 0.0 seconds
[RunAapt] Starting Task
[RunAapt] ERROR: Error running AAPT
[RunAapt] Task errored in 0.226 seconds
.

Should be supported except mentioned type of libraries.

:fire: An update is available 6.3.0

Date built: 01.06.26.15.26 :bangladesh:


  • Added support for event name mismatch check in EventDispatcher.dispatchEvent.
  • Added support for arguments count check in EventDispatcher.dispatchEvent.
  • Added support for sequentially variables names check in EventDispatcher.dispatchEvent.
  • Added new short annotations. E.g:
@DesignerComponent --> @Component
@DesignerProperty --> @Designer
@SimpleProperty --> @Property
@SimpleFunction --> @Function
@SimpleEvent --> @Event
  • Updated sources writer with new short annotations.
3 Likes

:fire: An update is available 7.0.0

Date built: 15.08.26.00.17 :bangladesh:


  • Added FastGuard feature to obfuscate string literals.
  • Desugar feature is now compatible with JDK 8 to JDK 25+.
  • Added relocator feature to resolve duplicate class conflicts without performing full code optimization.
  • Added minimizer feature to identify and strip unused classes, reducing extension size.
  • Added coreLibraryDesugaring feature to enable modern Java API support on older Android devices.
  • The excludes attribute now allows for excluding classes when merging dependencies.
  • Updated annotation-processor to process helper classes directly without pre-compiling them when JDK 8/11.
  • Added manifest merging support to src/AndroidManifest.xml with sync command. E.g: fast sync -mani.
  • Added copy command to copy selected blocks into clipboard. E.g: fast copy.
  • Added an optional attribute (java_home) in fast.yml.
  • Added an optional attribute (default_args) in fast.yml.
  • Optimized manifest-merger & xtend-compiler.
  • Replaced collect_rules with apply_rules in fast.yml.
  • Added missing commands in default usage prints.
  • Skips resolving dependencies twice when running sync build.
  • Updated manifest-merger.
  • Updated components version increaser to allow new short annotations.
  • Updated provided dependencies to nb204.
  • Updated project migrators.
  • Updated logs.txt writer.

FAST, a next-gen extension compiler.

6 Likes

Why aren’t permissions specified in the APK file’s manifest?

# The name of the extension developer.
author: vakha

# Define the minimum Android SDK API level your extension supports.
min_sdk: 14

# Permissions required for audio processing and networking
permissions:
  - android.permission.RECORD_AUDIO
  - android.permission.MODIFY_AUDIO_SETTINGS
  - android.permission.INTERNET

# If enabled, extension will be optimized using R8.
R8: true
# If enabled, extension will be optimized using ProGuard.
proguard: true
# If enabled, the D8 tool will generate desugared jar (classes.dex)
desugar_dex: true
# Enable to write docs in Markdown during build. Pass `-b` to generate blocks.
gen_docs: true
# Enable to generate blocks with shadow blocks. (premium)
shadow_blocks: false
# Enable to increment the version number of each component during build.
auto_version: true
# Enable to remove @annotations from the extension.
deannonate: true
# Enable to skip matching classes provided by AI2.
filter_mit_classes: false

You should edit the AndroidManifest.xml file, and place them there, using the correct syntax:
e.g.
<uses-permission android:name="android.permission.INTERNET"/>

1 Like