Extensions VS. Built-In Blocks

Published on February 7, 2022

🏷️ Tags: #extensions

Extensions are undeniably an important part of App Inventor. In fact, about 20% to 30% of the discussion in all App Inventor forums are about implementing or introducing extensions. This all started back in 2015, when the top software engineer of App Inventor, Hal Abelson, made the following post:

4 Aug 2015, 15:40:19 to: MIT App Inventor Forum

The MIT App Inventor team is delighted to announce the availability of Extension Components for testing. We hope the Extension Components will prove to be a major enhancement to App Inventor: Extensions provide a way for anyone to build their own App Inventor components, which others can then use in creating apps.

App Inventor is free and open software, so people have always been able to build personal systems and install their own components. But until now, the only way to make those components available to others has been to create and maintain a personal App Inventor server that has those components built in.

Extension components, in contrast, can be loaded dynamically into any App Inventor system, so they can be shared and imported into projects as needed. For example, educators and educational software developers to provide extension components tailored to specific lessons and activities, so that students can have these available in building apps. Examples might be simulations or tools for large-scale data analysis, or image recognition. Those features might be unfeasible to implement with the built-in App Inventor blocks, either because of processing speed or programming complexity. But the same capability might be readily implemented using extension components that encapsulate the necessary processing.

Anyone can create extension components. This requires gaining some familiarity with the App Inventor source code (located on Github) and programming in Java. Once you create an extension component, you can share it with anyone for use in their App Inventor projects. Extension components can be housed anywhere on the Web. They need not be stored at MIT or any other special place, although MIT hosts a repository where people can make extension components available for sharing and public use.

Today, we’re releasing a test server for App Inventor that supports the Extension Components feature. You can find it at extension-test.appinventor.mit.edu. There’s also a document called App Inventor Extensions that explains how to create and use Extension Components. Once we've accumulated enough feedback, we'll make extension components a regular part of App Inventor.

With extensions, the range of App Inventor features can be expanded enormously. We hope that people will explore this tool to build new capabilities for App Inventor and their creations.

The implementation of App Inventor Extension Components is the work students who participated with the MIT App Inventor team in through Google Summer of Code: Ethan Hon, Justus Raju, and Mouhamadou Sall_

Now, with extensions, App Inventor has accomplished things that even seemed impossible before - customizing images, controlling the device storage, and even ad revenue extensions and apps running in the background. Now, with only learning Java, you can create your own extensions according to your needs. However, the purpose and importance of extensions is heat-debated.

Extensions might be a good thing, but now, there is a fashion of 'test extensions' growing. Users make extensions that can be accomplished with a few built-in blocks or existing components. While some users agree that these extensions are useful, most are against it. Here are some supporting and against arguments.

Support:

  • App developers usually want quick solutions, so they use these test extensions.

  • App Inventor is used for learning. Developing test extensions can make the developer learn more about Java.

  • Less than 2% of people use Android 2.2 or before. That makes test extensions accessible.

Against:

  • You cannot upload your project to the App Inventor gallery if you use extensions. This is because of a security issue.

  • Recently, there has been a case of more and more decompilers decompiling extensions, which makes the question of whether extensions benefit or harm the developer. There has been even illegal handling of extensions, such as stealing extensions.

  • Extensions are meant to be components that cannot be done with built-in blocks.

  • App Inventor is used for learning. It goes really interesting if you do not use extensions and find a way to do that using built-in blocks.

  • Extensions only support Android versions > 2.2. For users using phones before that, they can't use those test extensions.

  • Extensions also mean that they take up space in the app. This increases the burden of your application.

If I were to choose a side, I would be in the middle, but slightly leaning to the against side. Before, I used to use test extensions and make them, now, if the project is important, I would rather choose the built-in blocks way.

Taken from this discussion. What is your opinion about test extensions?