Rush • A new and improved way of building extensions

Using Rush, how do you add another java file, which is a continuation of the first page?

What do you mean by a continuation of the first page?

Say I have a great big array of strings

List < String> countryFiles = Arrays.asList("ad.png","ae.png","af.png","ag.png","ai.png" ----"zw.png");

which means many scrolls of the ide to get to the next section. Have this in a separate java file to call on from the first.

Please add Java 11 support for dependencies. Also need to support Java 8 for dependencies.
(Thanks for your hard work)

Why not create a logic if the file names are like aa.png,ab.png,ac.png,ad.png.... ?

Like,

for(char i= 'a'; i<='z'; i++ )
    for(char j='a',j<='z',j++)
        list.add(i+j+".png");

You mean to create a new class and use them from main/another class??

That sort of thing :slight_smile:

I can create another java file with a new class, and put the list in it, but don't know how to reference that list in the main java file.

package xyz.hello.yourpackagename;

import java.util.Arrays;
import java.util.List;

public class ListData {
    public static List<String> myfiles = Arrays.asList(
            "ad.png", "ae.png", "af.png", "ag.png", "ai.png", "zw.png"
    );
}

and to access the list you can

// import the class if it is in a different package
List<String> myfiles = ListData.myfiles;
4 Likes

Aha !

// import the class....
List<String> myfiles = .....

This was the part I was missing. Thank you :slight_smile:

1 Like

Hello @shreyash,
How many days remain to release Rush v2.0?

1 Like

Status update 2 -- I spent the last month laying the foundation of the new update, implementing a few new features, and mostly, refactoring the horrible spaghetti only God knows which drunk head wrote (no, don't look at me).

We now have a mostly working dependency management system in place, written entirely from scratch to best meet Rush's needs. Along with that I recently added support for the helper blocks. The multi-component extensions are also supported now.

Talking about beta testing, I will certainly start it in a couple of days. I wanted to start it by the end of the last month, but things were mostly half-baked and/or broken and it didn't really made any sense to beta-test at that phase. If you're interested in beta testing Rush, PM me here on the community or on Discord (my username: shreyash#4002).

Also, if you have any feature requests, suggestions, or bug reports, now is the right time to let me know about them. Bring them on!

Before we finish, here's a peek at a handy little feature I implemented to view the dependency tree of your extension project. This screenshot is from my media-notification extension.

Oh, in case you're wondering where's the first status update, it's here on the Kodular community. Sorry, I forgot to post here last time.

4 Likes

Please tell me how to build extensions on rush

There's the official documentation here to help you get started with Rush. It expects you to have previous knowledge of developing extensions.

If you're completely new, you can follow this blog post by me that guides you through the basics of extension development. Even though in that post I use AI2's extension-template to create an extension, you can still follow it with Rush with a few changes:

  1. You don't need to manually create the extension source file as mentioned in the "Getting started section". Running rush create extension-name creates it for you.

  2. You don't need to add the following annotations:

    • @DesignerComponent: This is replaced by the rush.yml config file. More info about it here.
    • @SimpleObject
  3. Instead of running ant extensions, you run rush build to build your extensions.

There are also some video tutorials by @ZainUlHassan and @AkshatRana on their respective YouTube channels (kudos to them :tada:):

Edit: There's also this awesome guide by @Juan_Antonio: App Inventor. Crear extensión con Rush. Create extension with Rush. Even though it's in Spanish, but you should be able to translate the webpage using Google Translate.

6 Likes

I have a problem. the extension will not be built

You need to run rush build from the command line.

do you have a telegram?

Make sure you have JDK 8 installed and correctly set up.

I do, but I'd rather have you ask your queries here publically so others can refer to them as well.

1 Like

I already told you what you need to do:


Also, please don't spam the topic by posting multiple small replies, it's always best to write everything down in a single reply.

3 Likes

I am trying to compile my extension with Rush so that I can put ads in my app but the build failed.
Screenshot from 2022-11-02 11-40-12

I don't know where the problem is but I am going to post a picture.

The top arrow points to the line that I was instructed to add in this guide. How can I add admob extension to my app?
I do not know if the line is correct. For example, the star at the end of the line.
Furthermore, I don't know if the @UserPermissions line and the @UsesApplicationMetadata line are in the correct place.

Here's the text from this picture. (my .java file that was created when I ran
rush create <projectname>

package io.htwgadsext;

import com.google.appinventor.components.annotations.SimpleFunction;
import com.google.appinventor.components.runtime.AndroidNonvisibleComponent;
import com.google.appinventor.components.runtime.ComponentContainer;
import com.google.appinventor.components.runtime.errors.YailRuntimeError;
import com.google.appinventor.components.runtime.util.YailList;
import com.google.appinventor.components.annotations.androidmanifest.*;

public class Htwgadsext extends AndroidNonvisibleComponent {

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

@UsesPermissions(permissionNames = "")
@UsesApplicationMetadata(metaDataElements={@MetaDataElement(name="com.google.android.gms.ads.APPLICATION_ID", value="App-ID-Number")})

@SimpleFunction(description = "Returns the sum of the given list of integers.")
public int SumAll(YailList integers) {
int sum = 0;

for (final Object o : integers.toArray()) {
  try {
    sum += Integer.parseInt(o.toString());
  } catch (NumberFormatException e) {
    throw new YailRuntimeError(e.toString(), "NumberFormatException");
  }
}

return sum;

}

}

Here is the contents of the rush.yml file.

# For a detailed info on this file and supported fields, check out the below link:
# https://github.com/ShreyashSaitwal/rush-cli/wiki/Metadata-File

---
name: NameName
description: Extension component for PackageName. Created using Rush.

version:
  number: auto
  name: '1'

authors:
  - BlahBlah

build:
  release:
    # Optimizes the extension on every release build.
    optimize: true

  # If enabled, you will be able to use Java 8 language features in your extension.
  desugar:
    enable: false
    desugar_deps: false

assets:
  # Extension icon. This can be a URL or a local image in 'assets' folder.
  icon: icon.png
  # Extension assets.
  # other:
  #   - my_awesome_asset.anything

# Extension dependencies (JAR).
# deps:
#   - my_awesome_library.jar

Here is the xml file's contents.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.Package">
  <application>
    <!-- <activity android:name=".MainActivity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity> -->
  </application>
</manifest>

Thanks for any help!

Your build is failing because you don't have Java Development Kit (JDK) installed. Make sure to install version 8 (or 1.8).

Also, there are no UsesPermissions, UsesApplicationMetadata and similar annotations in Rush. You need to define required manifest tags in the AndroidManifest.xml of your extension.