Search This thread

amarullz

Inactive Recognized Developer
Jan 16, 2007
1,066
7,272
Bandung
amarullz.blog.unikom.ac.id
logo.png

The World's First ANDROID Touch And Customizable ROM Installer


DEVELOPMENT AND UPDATE NOW ON XDA-DEVDB
AROMA INSTALLER THREAD


Don't Forget To Donate To Me:



When you install Linux, Windows, Mac or applications on the PC
You can always customize your installation as you want.


WHY CAN'T WE DO THE SAME INSTALLING AN ANDROID ROM?

BECAUSE NOW
AROMA Installer
GIVES YOU THIS POSSIBILITY!




For Questions and Answer about scripting and customizing your Installer, please post your problems in Q&A Thread below:
AROMA Installer & Edify
Q & A THREAD



Need stunning AROMA Installer Package Creator in GUI:
Aroma App Package Creator

by commandersafi​
YOU DON'T NEED TO USE TOUCH RECOVERY TO MAKE THE TOUCH SCREEN WORKS
If your Recovery Kernel include Touch Screen Driver, even if the recovery not supported touch screen, it will works.
And Almost any recovery included touch screen driver in its kernel (Except some trimmed versions)


-------------------------A-R-O-M-A---I-n-s-t-a-l-l-e-r-------------------------



Benefits For Users
AROMA Installer gives users the possibility to choose which mods and applications they want to Install on to their device. Sometimes we want the clean install, without bloatware; and sometimes we want the full set of applications on our device. With AROMA Installer, you are your phone's master!



Benefits For Chefs/Developers
AROMA Installer gives chefs many benefits:

You don't ever again have to hear someone ask to remove or include something they like into your ROM, just for you to yell "Hey, that is only your opinion! Only you and some other people like it; most people don't! Go remove the apps on your own with WINRAR, you ^$#&*&#$", remember they are still a customer :cool:, and with AROMA Installer, this problem can be solved.

If you are good at customizing the AROMA Installer it was possible to make your ROM compatible with many devices using just one ROM File. You save your time, bandwith and hosting maintanance.

With the great user interface in your ROM installation, users will be very happy with it.

With AROMA Installer, You Are The Greatest ROM Developer


-------------------------A-R-O-M-A---I-n-s-t-a-l-l-e-r-------------------------




-------------------------A-R-O-M-A---I-n-s-t-a-l-l-e-r-------------------------


Videos
Watch this video to learn about AROMA Installer. Thanks to XsMagical for creating this awesome video...





 
Last edited:

amarullz

Inactive Recognized Developer
Jan 16, 2007
1,066
7,272
Bandung
amarullz.blog.unikom.ac.id
Downloads & Resources

FOR ROM CHEFS ONLY

ROM CHEF? WHAT IS THAT? ... HERE IS A VIDEO


DON'T ASK ABOUT HOW TO INSTALL IT, BECAUSE IT MEANS YOU DON'T KNOW WHAT IT IS FOR

IT ISN'T AN APPLICATION YOU CAN USE OR INSTALL ON TO YOUR PHONE LIKE ANGRY BIRDS OR FACEBOOK

IF YOU JUST A USER, THEN FIND A ROM THAT ALREADY USES THIS INSTALLER

MOST IMPORTANT THING BEFORE CUSTOMIZING IT

Make sure You took an update-binary from a working ROM,
renamed it to update-binary-installer and overwrote the one in my AROMA Installer zip

Download Binary

Version 3.00b1 - MELATI
BUILD:15022833

NOTE WILL ONLY WORKS ON DEVICE WITH ARM NEON SUPPORT
Recent Changelogs:
  • FLAMBOYAN MELATI- 3.00b1
  • new engine fb & input driver
  • support msmfb overlay
  • more neon improve
  • tweaks some ui
  • graphics processing

Download Binary

Version 2.70 RC2 - FLAMBOYAN
BUILD:130903

NOTE WILL ONLY WORKS ON DEVICE WITH ARM NEON SUPPORT

Recent Changelogs (FLAMBOYAN BETA):
  • FLAMBOYAN BETA - 2.70B1-B6
  • -
  • BETA-6
  • Fix some back sequence (thanks Electronic Punk) - Small but Important fix aparse_current_position++ to ++aparse_current_position. ( https://github.com/amarullz/AROMA-In...1bba2d02988c60 )
  • -
  • BETA-5
  • Fix Commented NEON - Now Fast Again
  • New Themes
  • New Stack Transition, and smoother dialog transitions
  • Add ini_set("transition","stack");
  • Add Screenshoot (Volume Down+Power Button) - Image Format BMP-565 16 bit
  • fix ini_get function
  • Whole new input driver
  • Optimize alphablend processes
  • Optimize and Add Drawing Scale Nearest Neighbor
  • Add drawing functions for alphablend
  • Dialog In & Out Transition
  • Cache recovery display for exit transition
  • Add Exit transition
  • fix force_colorspace issue
  • add colorspace change demo
  • remove unneeded sleep for faster start and exit
  • -
  • BETA-4
  • Fix Icon Themes Error
  • Change Transition Animation - Slides for next/back - Smoother than alpha blend animation
  • Remove any transition effect for Dialog Window
  • Use Bold Text for Navigation Button
  • Fix Installer UI for text log position
  • Add ini_set/ini_get for Vibrate Intensity (0-10). ini_set("vibrate","5") = Half Intensity, ini_set("vibrate","0") = No Vibrate At All
  • Add ini_set/ini_get for icon_back and icon_next. ini_set("icon_next","@install"), ini_set("icon_back","icons/back")
  • Fix Installer Freeze on (pthread_detach) - Compileable for Android Build Environment
  • BUILD WITH ANDROID BUILD ENVIRONMENT - Binary Size Reduce By ~60% - BUILD COMMAND: make aroma_installer; make aroma_installer.zip
  • Add zip build command in building the source
  • Rewrite building script for windows and linux with Android Build Environment
  • Modify aroma-config in demo zip to includes some new features
  • Change update-binary-installer from Galaxy Nexus binary. Sensation user should replace it binary with sensation binary
  • Beautifier Source Code. Add beautifier tools in source code tree
  • -
  • BETA-3
  • Fix Include Back Error
  • Improve Back Sequence Capability
  • ADD EVAL Function to execute the script inline from string
  • ADD GOTO Function to jump back into GOTO Label. gotolabel(), goto().
  • Update More Demo in Example Zip
  • Improving Efficiency processes when loading and reloading themes
  • -
  • BETA-2
  • Fix color handling on themes
  • Using bilinear scaling in png.9p
  • Re-add hebrew support
  • Add Italic Support with tag \<i>Italic\</i>
  • ADD include function, to include script from different file. look at new aroma-config file and language_select.edify file
  • -
  • BETA-1
  • reboot("now","recovery"); and reboot("now","fastbot");
  • Refresh look and feel
  • Remove RTL and Arabic Support (For faster and freeing resource, because the features still unusable)
  • Subpixel rendering for Fonts (Clear Type Like)
  • Improve performance with NEON here and there.
  • Tweaks some input driver
  • May fix some colorspace issue
  • Bilinear scaling for png icons, Now it look smooth even if it resized
  • FIX MANY BACK SEQUENCE BUGS
  • Font will only loaded if the font is really changed - Faster-faster performance improvement
  • Change Navigation Bar Buttons. Now next and back can be using Icons
  • Add Menu Button for buttonless devices.


  • EDELWEIS - 2.56 - BUILD 121004-031
  • Fix capacitive button
  • Remove calibration tools

  • EDELWEIS - 2.55 - BUILD 121003-030
  • Completely new Input/Touchscreen Handler - Thanks to agrabren from TWRP
  • Remove all calibration need. calibtool(), calibrate() and calibrate_matrix() won't do anything now. :)

  • EDELWEIS - 2.51 - BUILD 120810-026
  • Supported Galaxy Nexus Touch Screen - And maybe other devices now supported

  • EDELWEIS - 2.50 - BUILD 120716-025
  • Add Calibration Matrix for More Accurate Touch screen calibration
  • Set ROBOTO as Default True Type Font

  • DAHLIA - 2.00 - BUILD 120425-020
  • Fix Installation Save Logs
  • Fix framebuffer mmap size
  • Fix status 0 error
  • Add Multilanguage functions
  • Change list bullet drawing method
  • Add support for kerning font when use TrueType/OpenType
  • Add AROMA Memory management and memory debuging build (COMPILE FROM SOURCE ONLY)
  • Add more limit size for AROMA texts
  • Add font glyph cache for faster freetype drawing & processing
  • Add support for Modern Standard Arabic
  • Add support for RTL
  • Add support for TrueType and OpenType fonts
  • Add support for UTF8 encoding in aroma-config and all AMS text. For updater-script use NO-BOM UTF8
  • Fix Memory leaks
  • Add ini_set("force_colorspace","rgba");
  • Add support for atmel_maxtouch - Asus Transformer Touch Screen

  • CEMPAKA- 1.64 - BUILD 120414-040
  • Fix framebuffer mmap size
  • Fix status 0 error


Previous Changelogs:
Code:
[LEFT]
* [B]CEMPAKA- 1.63 - BUILD 120306-032[/B]
* Add support for atmel_maxtouch (Down Event SYN) - Asus Transformer Prime Touch Screen

* [B]CEMPAKA- 1.62 - BUILD 120303-030[/B]
* Fix some memory leaks ([COLOR="Red"]Important[/COLOR]).
* Add ini_set("[COLOR="Green"]force_colorspace[/COLOR]","rgba");

* [B]CEMPAKA- 1.60 - BUILD 120227-026[/B]
* Add msb_right check for Endianess video memory
* Fix Installer text log drawing
* Add ini_get
* Add rom_date in ini_get
* Fix reboot and back function
* Add more and recreate Icons for themes and generic
* Rewrite text handler
* Add alignment, indentation and list in AROMA Markup String
* Change temp directory to /tmp/aroma, /tmp/aroma-data stil works
* Add Theme Support
* Add AROMA Markup for <b> Bold
* Add More Colorset
* Add More Text to Customize
* Add PNG Icon Load From Theme (Default Icons)
* Add Tab support in AROMA Markup String
* Change int to long for partition info, now support big storage information
* Config Init All/Theme Only
* Recreate new example (release) for binary release
* Customizable Font Runtime
* Reformat About Dialog
* Add show progress per time in installer (now support by files and by time).
* Themeable Progressbar
* Enhance Exec Functions to return exit status and autosave buffer into variable
* Fix glibc error in ag_close - Need workaround
* Move ai_trim to system libs
* Add Stretch function for png
* Add 9 Patch drawing function for png
* Fix Reboot Function
* Add Alternative Touch Method
* Add ziptotmp & restotmp
* Add support for mxt224 touch screen (SYN_MT_REPORT event)
* [B]BOUGENVILLE - 1.10 - BUILD 120208-13[/B]
* Add Alternative Touch Method
* Added New Functions
  - anisplash - ANIMATED SPLASH SCREEN
  - prop - GET PROP FROM AROMA TMP
  - zipprop - GET PROP FROM ZIP
  - resprop - GET PROP FROM AROMA RESOURCE ZIP
  - sysprop - GET RECOVERY PROP
  - property_get - GET RECOVERY PROP
  - write - WRITE STRING INTO FILESYSTEM
  - readtmpfile - READ TEMPORARY FILE AS STRINF
  - read - READ FILESYSTEM AS STRING
  - zipread - Read String From Zip
  - resread - Read Strinf From Resource
  - zipexec - Exec Program From Zip
  - resexec - Exec Program From Resource
  - run_program - Run Program/Exec
  - exec - Run Prohram/Exec
  - back - BACK TO PREVIOUS WIZARD
  - reboot - REBOOT DEVICE
* Deprecated Funcrions
  - readfile - Will Renamed to zipread
  - readfile_aroma - Will Renamed to resread
* Add Some Fix in Touch Up Handler
* Prop parsing, File Handling & Zip Handling has been managed in efficient functions
* Remove CERT.SA - Not Needed
* Add Licence Headers in all aroma source code Apache 2.0
* Add More Comments & Documentation in Souce Code
* Renamed functions for fit needs

* [B]ANGGREK -1.00 - BUILD:120204-011[/B]
* Fix calibrating function not working when set in aroma-config
* Update and fix firmware command from update-binary-installer into recovery.

* [B]ANGGREK -1.00 - BUILD:120202-10[/B]
* Improve touch handler compatibility. Now more accurate in every devices
* Add more chars into ROM Infos from only 31 to 63max
* Detail changelog from commit: [URL="https://github.com/amarullz/AROMA-Installer/commit/f49e2969e3b3514e180dcb15bed5a48298b19046"]10[/URL]

* [B]ANGGREK -1.00 - BUILD:120201-009[/B]
* Stride/Pitch/Padding Framebuffer support for non multiply 8 screen size like qhd on sensation and evo3d
* Rewrite input handler, better keys & touch screen compatibility.
* Change calibration division data from integer to float, more accurate calibrating
* Improve fling and scrolling engine
* Add support for all possible screen bit depth 32/24/16bit. ARGB, ABGR, RGBA, BGRA. No problem now.
* Detail changelog from commit: [URL="https://github.com/amarullz/AROMA-Installer/commit/b9daae9151e6ec4e1054725722b6f507f621f065"]006[/URL], [URL="https://github.com/amarullz/AROMA-Installer/commit/65fdbb9a2f7c12a799f320b3759ab60d6b00d3b1"]007[/URL], [URL="https://github.com/amarullz/AROMA-Installer/commit/f49e2969e3b3514e180dcb15bed5a48298b19046"]009[/URL]

[B]ANGGREK -1.00 - BUILD:120129-005[/B]
* Remove Signature Check - Now You don't need to sign aroma-config and updater-script
* Calibration Tool now show before anything, so you can directly do calibration. you can disabled it in aroma-config by deleting [B]calibtool("");[/B] command.
* Fix some touch screen input handler
* Add 229 in menu keycode (F2 used in emulator as menu key)

[B]ANGGREK -1.00 - BUILD:120128-004[/B]
* Open Source - Binary No Released

[B]ANGGREK -1.00 - BUILD:120126-003[/B]
* Refer to defy recovery source code found [URL="https://github.com/CyanogenDefy/android_device_motorola_jordan/blob/gingerbread/recovery_ui.c"]HERE[/URL] (Thanks [URL="http://xdaforums.com/showthread.php?t=1356767"]walter79[/URL] for github source code) I add some keycode into input reader : [URL="http://xdaforums.com/showpost.php?p=21826756&postcount=32"]Read Here[/URL]
* Add confirmation if calibrated data will be used in current process (After Calibrating) - So you can try touchscreen without editing [COLOR="Green"]aroma-config[/COLOR] after you calibrate it.
* Remove precision calculation in scrolling thread (Natural calculation but less fluid)... Feel faster now.
* Add function for [COLOR="Green"]aroma-config[/COLOR] to define custom key code for up/down/select/back/menu, just like [COLOR="Green"]calibrate()[/COLOR] function. with format like this: [COLOR="DarkRed"]ini_set("customkeycode_up",130);[/COLOR] or [COLOR="DarkRed"]ini_set("customkeycode_select",13);[/COLOR], the keycode can be capture by [URL="http://xdaforums.com/attachment.php?attachmentid=872892&d=1327550395"]aroma-keycapture-flashable.zip[/URL]

[B]ANGGREK -1.00 - BUILD:120125-002[/B]
* Add Home & Power Button To Select Items
* Unsigned Script Now Not Terminated Installer, but just show Alert That the script should be signed to pass install ui
* Add More Documentation in aroma-config

[B]ANGGREK -1.00 - BUILD:120124-001[/B]
* Initial Release ( AROMA UI, AROMA Touch Handler, AROMA Markup String )
* Customizable ( Custom Theme Colors, Customizable Fonts and Images )
* Optimized Build ( Static, -o2, remove unused functions, remove png-write and zlib deflate functions )
[/LEFT]

Open Source?
There may be some people who will ask if the project is Open Source, and the quick answer is YES. It is an Open Source Project Now.

Why Release The Source?
  • I used some other work (modified) from the Open Source Community, especially Koush's recovery source code for getting the input mode, PNG, ZLIB, and some Framebuffer programming samples.
  • I want to make all chefs feel safe, so I guarantee that I won't make this into a money making program.
  • I got something from the community, and I want to give something back to it.

What Benefits?
  • Rapid development
  • I can get code review & patches - Not just bug reports
  • There are many innovations that I wrote in the program that may be useful for other needs, like the AROMA Graphic Framebuffer, the AROMA UI, the Amarullz Dithering Method, and the AROMA Simple PNG Fonts. It may be used in recovery, so recovery can use the AROMA Installer Interface
  • :cool: I can learn more about Open Sourcing programs (especially the CVS and licensing things - that always drive me to the question - what is it?)

I Need Help
As I said before, I am just a newbie at Android Development, or even as a user. I need someone who has a lot of knowledge about Open Sourcing the software, and a lot of knowledge about licencing (I don't know much, I just tried to make my software compatible with them: GPL, Apache, etc.)...

Thanks.
Source Code


TOOLS: AROMA Key Capture
I also created "aroma-keycapture-flashable.zip" to capture the keycodes of your device (flashable in recovery - won't flash anything :cool:). And in case the keys don't work, report the keycodes in this thread, with information like this example:


Code:
Prev Item/Up Key = 120
Next Item/Up Key = 110
Select Item/Enter/Select Key = 13
Back Key = 200
Menu Key = 193

To customize keycodes, open aroma-config and modify this code:
Code:
##
# Custom Key Code - Usefull For Some Device which not used
#                   Standard key code for up/down/select/back/menu
#
# You can capture the keycode in
# recovery using "aroma-keycapture-flashable.zip" Available in
# AROMA Installer Thread.
#
# Press some key when it run, it will return key code,
# that key can override up/down/select/back/menu actions in
# AROMA Installer, you can even set your home key for up, or
# volume down for select item
#
#-------- Uncomment & Modify this Code:
#
# ini_set("customkeycode_up",     "115");
# ini_set("customkeycode_down",   "114");
# ini_set("customkeycode_select", "116");
# ini_set("customkeycode_menu",   "139");
# ini_set("customkeycode_back",   "158");
#
 

Attachments

  • aroma-1.00-2.zip
    852.2 KB · Views: 9,758
  • aroma-1.00-3.zip
    852.8 KB · Views: 7,012
  • aroma-1.00-05.zip
    852.6 KB · Views: 6,913
  • aroma-120102-009.zip
    851.7 KB · Views: 6,660
  • aroma-120202-010.zip
    851.9 KB · Views: 7,710
  • aroma-120204-011.zip
    851.8 KB · Views: 6,887
  • aroma-1.10-120208-013b.zip
    1.1 MB · Views: 10,584
  • aroma-1.60-120227-026.zip
    1.9 MB · Views: 7,168
  • aroma-1.62-120303-030.zip
    1.9 MB · Views: 6,954
  • aroma-1.63-120306-031.zip
    1.9 MB · Views: 10,000
  • aroma-1.64-120414.zip
    1.9 MB · Views: 9,619
  • aroma-2.00-120425-020.zip
    3.9 MB · Views: 20,669
  • aroma-2.50-120716-020.zip
    3.9 MB · Views: 8,027
  • aroma-2.51-120810-026.zip
    3.9 MB · Views: 4,553
  • aroma-2.55-121003-030.zip
    3.9 MB · Views: 2,313
  • aroma-2.56.zip
    3.9 MB · Views: 81,683
Last edited:

amarullz

Inactive Recognized Developer
Jan 16, 2007
1,066
7,272
Bandung
amarullz.blog.unikom.ac.id
AROMA Installer Resources

The Codenames
AROMA Installer codename based on Alphabetical Indonesian Flower Names. Here the list of already used codename:

ANGGREK - 1.00
anggrek.jpg


BOUGENVILLE - 1.10
bougenville.jpg


CEMPAKA - 1.60 - 1.64
cempaka.jpg


DAHLIA - 2.00
dahlia.jpg


EDELWEIS - 2.50
edeilweis.jpg


FLAMBOYAN - 2.70
flamboyan.jpg



Programming Language
It was application which runs on Android device but not on Android OS Environment that the native applications usually use Java. AROMA Installer use C (Pure C, not C++), so it may run on another platform like x86 with small modifications ofcourse.​


Used Libraries
  • ZLIB - ofcourse, it was the most awesome thing in computer world :good:
  • PNG
  • MinZIP
  • Freetype
All library need to compiled as static to make sure it runs without any dependency issue in any devices.​


Official Binary
I Only support ARM device, but it was opensourced, so anyone can play with the source and compiled it for they own devices.


ROM That Already Uses AROMA Installer

MOD/THEMES Uses AROMA Installer
3rd Party AROMA Installer Resources



If you release the ROM with AROMA Installer, please inform me here, I will add your ROM in this post.​

Thanks for Donators


Thanks To
  • Sebastiaan15 - For using and test it for the first time
  • avss - For helping me to make it works in sgs2 and many samsung devices
  • DemonWav - For helping grammar in the thread, Testing and give many great ideas.
  • -viperboy- - For intensively testing & feedback the touch screen in EVO3D CDMA
  • baadnwz - For Testing the touch input in sensation
  • capychimp - For Testing Display
  • Prof Peach - For helping and testing
  • V6-Maniac - Creating Video
 
Last edited:

amarullz

Inactive Recognized Developer
Jan 16, 2007
1,066
7,272
Bandung
amarullz.blog.unikom.ac.id
About AROMA Installer

Background
Android has an advanced system for installing the OS and updates, unlike other mobile OS's that distribute the contents of the OS in static ROM image(s), Android distributes the OS and updates in a plain .zip file that contains all of the packages, files, and the updater for processing the installation.

The updater splits in 2 types, the binary (update-binary) and script (updater-script), while the binary is an executable file, and the script was a configuration script that tells the binary executable what to do.

But this advanced technology never expanded into its highest potential ability. The update-binary was simply the linux executable wrote in C that runs in root mode, and can do anything to your system; including accessing the Display FrameBuffer, accessing keys and the touch screen, set vibrate, run programs, parse files, load png(s) and .zip's, and read and write to the filesystem.

The old update-binary only supported a few functions that can controlled only by the updater-script to instal the files. It didn't have a single function that allowed the installer to interact with the user. There is a program called "yesno" that shows a "Yes" or "No" interface, but it wasn't enough to create a more customizable updater.

Now with AROMA Installer update-binary, all of this limitation is gone, and this advanced technology is expanded to the highest level of its pontential.


What is AROMA Installer
"AROMA" was taken from Bahasa Indonesia (Indonesian Language) and it means "Scent", but it is also an abbreviation of "AMARULLZ ANDROID ROM MANIFESTATION". It is an advanced update-binary for Android that contains many features like Wizard Installation, Touch User Interface (AROMA UI), Customizable Packages, System Inspecting, Themeable, and User Interactive. All release versions will have "flower" codenames, for example, the 1st version is codenamed "Anggrek", which mean "Orchid".​


How AROMA Installer Works
How can it work in recovery mode, and how can it so smooth when it scrolls? It works because I hired Chuck Norris to force the recovery to run the installer, and the phone is too afraid to show any lag :cool:.

No, seriously, when the user selects the .zip file to install it, the recovery will extract the update-binary and run it with a few arguments. All processes are handled by the update-binary, and the recovery will only show the information passed by update-binary via a custom pipe. The great thing is that the update-binary can do anything if we can code it in C/C++, but not all people can easily play with C/C++. Its also not very effective or fun to compile it every time we need to change the process. That's why the custom script is used in AROMA Installer, it is simply edify scripting that is used as the normal updater-script, but with expanded functions available.

It wasn't a simple thing to archive something like this, because the update-binary is simply the "linux executable" that doesn't even support dynamic links of libraries, basic drawing functions like drawrect, drawline, and I don't think it OpenGL can be included in it's binary. It runs on it's own. Even User Interface was wrote from scratch to manipulate directly into the display framebuffer, user input was read directly from the raw kernel input device, png and .zip was read with a static link library, and the configuration was parsed in it's own program. It is the result of one full month of developing, but you can learn it instantly, without any need to know how to manage memory usage and pointers.

The AROMA Installer will read, parse, and run the script commands to show it's UI, calculate partition sizes, create, read, and write temporary prop files, set & get variables, do simple integer comparisons and math sequences, do the if else or inline if conditions, configure the UI color scheme, configure rom information, and much more.

Because it was very complicated and needed a lot of time to develope, did I earn some reason to get donations?.​

Flowchart How It Works

more at amarullz.com [+]​
 

Attachments

  • custom-fonts.zip
    38.2 KB · Views: 2,709
  • font-guide.jpg
    font-guide.jpg
    16 KB · Views: 871,230
  • font-prev.jpg
    font-prev.jpg
    24.8 KB · Views: 850,549
  • aroma-communicating.jpg
    aroma-communicating.jpg
    38.2 KB · Views: 831,501
Last edited:

amarullz

Inactive Recognized Developer
Jan 16, 2007
1,066
7,272
Bandung
amarullz.blog.unikom.ac.id
Customizing AROMA Installer

Best Practice to learn about Customizing AROMA Installer was read and edit the aroma-config and updater-script directly from downloaded files, or for the completed features (but not well documented) was read aroma-config and updater-script from RunnyMede AIO,

Download RunnyMede AIO AROMA Installer Scripts!

And Some Interesting Answered Questions from TweetyPeety by me Here


Customizing Your Script
AROMA Installer can be configured and customized as you like, there is so many features and functions you can used to implemented many things. In this manual, we will learn all the features and functions in technical ways and can be implemented directly in configuration for practice, or production.​


AROMA Installer Zip Directory Structures
AROMA Installer use standard ClockWorkMod zip Installer structures. All configurations will be placed in META-INF Folder in zip contents. Here the example directory structure for AROMA Installer:

All AROMA Installer files, should be placed in META-INF/com/google/android/. There is 2 Binary files, and 2 Script/configuration files, and 1 resources folder.

  • aroma – Aroma Assets/Resource folder, It contains custom files, like png fonts, png icons, png splash images, text file for changelogs or agreement/license.
  • aroma-config – It was main AROMA Installer configuration script. This configuration was the one that supported AROMA Installer functions like Wizard UI's, Installer UI, Dialog UI, get and set variables, etc. This script wrote on Edify Script Sintax (See next chapter). This script not supported functions to manipulate system files/extract files and other installing method. It's only configuration to prepared all needed data for updater-script.
  • update-binary – It was AROMA Installer Executable, the compiled program wrote by me in C, and it was the program that show User Interface.
  • update-binary-installer – It was old update-binary (renamed to update-binary-installer), will be runs on Installer UI when the installer need to flash/install/extract files from zip to the phone.
  • updater-script – It was old edify format to start copying/install/extract files from zip to the phone. It will only support old functions that supported by update-binary-installer, but can read prop files created by AROMA Installer.


AROMA Installer Assets Directory
AROMA Installer use others files to show the interfaces, The Interfaces like windows, dialog, title, rounded rectangle and simple drawing was implemented by executable used compositing colors configurations, but for others drawing like text and icons, AROMA Installer will read zip contents in this asset directory.

The minimum requirements in this assets directory was png fonts files (big and small). It placed in fonts directory, an Icons can be placed in any directory of aroma assets, but for cleaner locations, it recommended to placed all icons in icons directory, And there is some default icons like alert.png, install.png and info.png that should be placed in this directory, because the installer executable was hardcoded icons locations like icons/alert.png for confirmation, icons/install.png for about dialog.

All splash and text files can be placed in anywhere but inside this assets directory. Example when you want to read text file into variable, use:

Code:
setvar("changelogs",readfile_aroma("changelogs.txt"));

It will find META-INF/com/google/android/aroma/changelogs.txt.​


Link Between aroma-config and updater-script
It was main section to be knowing by anyone that how can the aroma-config communicated with updater-script, so please read it carefully.

attachment.php

aroma-config and updater-script runs in different process, and can't share it's memory resource, so the only possible way to communicate is with temporary files. updater-script was original updater-script commonly used in old installer (without AROMA Installer), it's only supported bunch of functions to be used for manipulating system files, like delete_recursive, set_perm, format, mount, package_extract_dir, etc. But it's also support 1 function for read prop file, it was file_getprop.

That's why the AROMA Installer UI always save the result in prop files ( checkbox, optionbox, menubox ). Other than the UI, aroma-config has the feature to create temporary file in plain text (writetmpfile) which able easily create prop files.
Prop File Format
The prop file format was simple plain text format with (=) token as delimiter between key and values, and newline as delimiter between one key=values with another key=values.

Code:
key1=value1
key2=value2
key_3=value3
last.name=amarullz

It can be easily accessed with file_getprop in updater-script like this:

Code:
file_getprop("example.prop","key1");

With above code, the file_getprop function will return the value of key1, it will returned "value1". We can use it for our needs in if/if else statement. We can use others characters in keys, like dot (.) and underscore, but please be careful, that you don't add some quotes in the values. Here the wrong prop file format:

Code:
key1="value1"     [COLOR="Red"]# add quotes[/COLOR]
key2="value2"     [COLOR="Red"]# add quotes[/COLOR]
first name=james  [COLOR="Red"]# Key name with space[/COLOR]
AROMA Installer Default Prop Temporary Locations

When playing with AROMA Installer aroma-config files, almost all things that manipulated prop files will be saved relatively on AROMA temporary directory located in /tmp/aroma-data/, so if we pass the prop filename like this: writetmpfile("test.prop","key1=ok");, the test.prop will be located at /tmp/aroma-data/test.prop.

Quick Example
In this example case, the aroma-config will create temporary prop file that will be readed by updater-script:

aroma-config:
Code:
writetmpfile(
  "kernel.prop",
  "snq =yes\n"+
  "call.2way=no\n"
);

updater-script:
Code:
if
  file_getprop("/tmp/aroma-data/kernel.prop","snq") == "yes"
then
  # Install Kernel
  write_raw_image("/tmp/boot.img", "boot");
endif;

if
  file_getprop("/tmp/aroma-data/kernel.prop","call.2way") == "yes"
then
  # Do Something here
else
  # Do Something here
endif;

With this feature, it's enough to archive customizable installation, and the aroma-config will be able to communicate with updater-script.


EDIFY SCRIPT
Edify Script was simple script sintax to configure the behavior of binaries executable. In AROMA Installer, there is 2 edify script in the META-INF/com/google/android folder. The aroma-config and updater-script. Both files has it own use, and accessed by different binary executable, but use the same sintax, It's called edify.

The aroma-config used to configuring the UI in AROMA Installer, it will accessed directly by AROMA Binary Executable ( update-binary ), and updater-script will be used to configuring commands for installations (extract files, create symlinks, change permissions, format, mount, etc), and will be accessed directly by update-binary-installer. This couple script use the same sintax but have different functions that can be used.
Basic Edify Sintax
Edify Script was function base script, similar to C language, but without any supported statement except if else. You also can't create function, only bundled functions available for the script. All commands will call functions name with some arguments, and ends by semicolon, like this:

Code:
function_name( argument1, argument2, argument3 );

Edify also supporting simple concat-ing string, just like some other languages like Javascript or Java. Using plus (+).

Code:
function_name("Concat this " + "Strings" + " as one argument");

All Edify function's arguments was in type string. Edify doesn't support others data type, however, we can insert some integer values into arguments, but it in the fact it will be treated as string.

Code:
function_name( 50, 20, "55" );

We can't do any math calculation in edify script, so the script below is invalid:

Code:
function_name( 50 + 50 );

If you use the string with plus operator, it will only concat the strings just like the 2nd example:

Code:
function_name( "50" + "50" ); [COLOR="Green"]# Result = "5050"[/COLOR]

For commenting the code, we can use the sign character (#), only line comment was supported, just like an unix shell comment sintax:

Code:
[B]# This is comments[/B]
function_name("Lorem ipsum dolore…");

Code writing isn't strict, so we can safely use space or new line between function and arguments:

Code:
function_name(
  "First Argument",
  getvar("config"),
  "Third Argument"
);

The functions in Edify Script can returned values. But just like an arguments, it's only supported string type data. The good thing is this String can be converted into Boolean for conditions need. The string with contents will have true Boolean, and the empty string will have false Boolean.

  • "" = false
  • "1" = true
  • "yes" = true
  • "no" = true
  • "0" = true
Control Structures
Edify only supported limited control structure. Only if, and if else supported. But this control structures is enough to make an interactive installer. The basic sintax of if structure is:

Code:
if
  "comparison"=="comparison"
then
  .. commands ..
endif;

And for if else structure is:

Code:
if
  "comparison"=="comparison"
then
  .. true commands ..
else
  .. false commands ..
endif;

We don't have any looping control structure, the Next and Back features in Wizard UI was handled by program automatically.
Comparison & Logical Operators
Edify script doesn't supporting arithmetic operators, but it supported simple comparison and logical operators, Just like other programming languages base on C (java, php, javascript). It use simple operator sintax:

Code:
# Equal
val1 == val2

# Not Equal
val1 != val2

# Or
val1 || val2

# And
val1 && val2

# Not
!val1

# Logical & Comparison
(val1 == val2)||(val3 != val4)

(val1 == val2)&&(val3 != val4)

!((val1 == val2)&&(val3 != val4))

Yes, it doesn't support less than and greater than comparison, because it's only supported with string and Boolean string only. For Integer comparison use cmp function, but it's only supported in aroma-config script.
String and Escape Characters
Fortunately Edify support common string sintax. It's also supported escape characters for newline. The string in Edify defined with double quoted (") and ended with double quoted. Here the basic manipulation of string in Edify:

Code:
# Newline use \n:
"Hi, AROMA Installer is\nAWSOME!!!"

# Concat multiple lines:
"Lorem Ipsum Dolore sit\n"+
"Amet, lorem ipsum dolore\n"+
"sit amet, lorem ipsum\n"+
"dolore sit amet."

# Escape Characters:
"You can add\tTabs, \" Quote, \\ Backslash…"

# Hex Characters:
"It was character A : \x41"
Not Supported Operators in Edify
There is a lot of operator features in common programming languages that not supported by edify, like assignment operator for inserting something into variable, bitwise operator for manipulating bits within integer, and arithmetic operators for doing simple math calculations.

All this limited has been added via functions (except bitwise), but only available for aroma-config script, and only simple operations supported.

What UI's AROMA Installer Supported
AROMA Installer had 4 main type of Customizable User Interfaces, the Wizard UI, Dialog UI, Splash UI and Installer UI. And un-customizable Menu UI for selecting About, Help, Tools and Quit Installer.​
Wizard UI
The Wizard UI was the main User Interface in AROMA Installer, it's contain Back and Next button in navigation bar just like Computer common Installer programs (Windows Installer, NSIS Install System, InstallShield). Users can navigate trough the screens, or back to previous screens if something not right in configurations. Users can select Typical or Customize installations, and Users can customize what packages to install.

AROMA Installer support many Wizard UI, and here the completed list of it's UI:

  • checkbox – UI to show checkboxes in groupable list, the selected items will be saved in prop format, and can be accessed with file_getprop.
  • selectbox – It's like checkbox, but it's only able to check 1 items per group.
  • textbox – It will show the textbox, you can read text file to show it into the textbox
  • viewbox – It's like Textbox, but not scrollable, and only supported limited text length
  • agreebox – It's like Textbox, but with agree checkbox, user can't step to next page if the checkbox not already checked. Useful to show License or Terms of Use Interface.
  • menubox – This UI will show list of menu to select, there is no Next button, because when User select the item, it will automatically step into next page. And The selected menu will be saved in temporary prop file.
Dialog UI
While Wizard UI will shown it's interface in Fullscreen, the Dialog UI will shown it's interface in Popup Window, It was useful for some needs, like show confirmation for "Are You Sure want to format the partitions?", or show Alert Dialog for "Thanks for using my ROM". Here the complete list of Dialog UI in AROMA Installer:
  • alert – Show popup dialog, with limited text length and Only the OK button.
  • confirm – Show popup dialog, with limited text length and contains 2 customizable Button "Yes" and "No", with return value true for "Yes" and false for "No".
  • textdialog – Show scrollable text popup dialog, with long text length support and Only OK Button.
Splash UI
This UI Simply show the Splash Screen from png files with custom delay before it show next page. The image will automatically position in center of screen depended from it's image size. The background will be blended in blur and darkest color.​
Installer UI
When configuration invoke the install UI, it will start an installation, and show the installer UI with description text on top window, textbox for installer information in middle, and progress text and bar in bottom of screen. The installation will not cancelable, and there is no buttons or menu to select before installation finished, The Next and Save Logs button will be shown after installation finished. And next Wizard UI can't do Back command beyond this installer UI, so the Installer UI will only shown once time only in flash process.​


What Functions AROMA Installer Supported
There is so many functions that you can used for your needs, The available functions was the common functions that may be usable for installations, but not supported very complex things. AROMA Installer support simple comparison, math, system partition information, and simple set and get variables.

Here the list of functions that you can used:
  • setcolor – Set UI Color Scheme
  • ini_set – Set Aroma Configuration settings
  • calibrate – Calibrating Touch Screen
  • getvar – Get Variable
  • setvar – Set Variable
  • appendvar – Append string into variable
  • prependvar – Prepend string into variable
  • file_getprop – Get prop value of some key from prop file.
  • readfile – Read text file from zip content
  • readfile_aroma – Read text file from zip content relatively from aroma META-INF folder.
  • getdisksize – Get partition total size
  • getdiskfree – Get partition free size
  • getdiskusedpercent – Get partition used size in percentage
  • cmp – Simple integer comparison ( >, <, ==, >=, <=, != )
  • cal – Simple math calculator ( +, -, /, * )
  • iif – Inline if
  • if else – If and Else Statement
  • pleasewait – Show please wait/loading progress when calculating/doing hard process that took a lot of time.
  • writetmpfile – Write/create temporary file with text contents
  • exit – terminate installation.

Custom Fonts
You can customize your AROMA Installer Fonts. The AROMA Installer use 2 type of fonts "Big" and "Small", the Big font used in Title and the Small Font used in almost any controls. To use the custom fonts, copy the big.png or small.png into META-INF/com/google/android/aroma/fonts.

List of Custom Fonts Currently Available to Download - by amarullz
attachment.php

Create Your Own Font
You can also create your own fonts, it was plain png (32 bit color depth). All letter was arranged in ASCII order Start from ASCII 32 (space) to ASCII 95 ( ~ char) then ( © - Copyright ) character.

Here the letter list:
Code:
 !”#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHI JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~©

In the first row picture, there is pixel to seperate one letter to next letter, because AROMA Installer didn't use fixed size fonts ( console fonts like courier ). The fonts will rendering from 2nd row into end of rows. Here the example:

attachment.php

NOTE: AROMA Installer only need alpha channel for this, the color of fonts will using the AROMA color scheme defined in aroma-config. The width separator (in first row pixel) should be full opaque (alpha=100% or 255).

If you make your own fonts, please fell free to post here...
Other Custom Fonts
You can also use third party custom fonts created by other xda-developers users. Here some custom font list:
 
Last edited:

amarullz

Inactive Recognized Developer
Jan 16, 2007
1,066
7,272
Bandung
amarullz.blog.unikom.ac.id
Functions Reference

CONFIGURATION FUNCTIONS

setcolor

Descriptions:
Set AROMA Installer Color Scheme. It can also defined in themes with theme.prop file
Sintax:

void setcolor(colorname, hexcolor);
Parameters:
  • colorname - Name of color to be set. colorname with "_g" for gradient color.
    • winbg, winbg_g : Main/Top Most Window Backgroud
    • winfg : Main/Top Most Window Text Foreground
    • winfg_gray : Main/Top Most Window Gray Text Foreground
    • dialogbg, dialogbg_g : Popup Window Backgroud (Alert, Confirm, About)
    • dialogfg : Popup Window Text Foreground
    • textbg, textbg_g : Textbox, Checkbox, and any scrollable UI Background
    • textfg : Textbox, Checkbox, and any scrollable UI Text Foreground
    • textfg_gray : Gray Text ( on Optionbox/Checkbox Item Description )
    • controlbg, controlbg_g : Control / Button / Checkbox border - Background Color
    • controlfg : Button Text Color
    • selectbg, selectbg_g : Selected Element Background ( Pushed/focused Button/items, etc )
    • selectfg : Selected Element Text/Foreground Color
    • titlebg, titlebg_g : Window Title Background
    • titlefg : Window Title Text Foreground Color
    • navbg, navbg_g : Bottom Bar (Navigation Bar) Background. Next-Previous Area
    • scrollbar : Scrollbar indicator color
    • border, border_g : Common Border Color
    • progressglow : Progress Animation Color
  • hexcolor - Hexadecimal Color in RGB. it support 3 and 6 characters hexadecimal started with #. example: "#a8e" or "#ff5599".
Return Value: none
Examples:
Code:
# Set Color with 3 chars hexcolor
setcolor("winbg", "#444");
setcolor("winbg_g", "#222");
setcolor("textbg", "#333");
setcolor("textfg", "#fff");

# Set Color with 6 chars hexcolor
setcolor("textfg_gray", "#bbbbbb");
setcolor("controlbg", "#446699");
setcolor("controlbg_g", "#223355");

ini_set

Descriptions:
Sets the value of a AROMA Installer configuration option
Sintax:

void setcolor(configname, newvalue);

Parameters:
  • configname - Configuration name to be set.
    • roundsize : Set Corner size of rounded rectangle for common controls (default:"3")
    • button_roundsize: Set Corner size of rounded rectangle for button controls (default:"2")
    • window_roundsize : Set Corner size of rounded rectangle for main window (default:"4")
    • transition_frame : Set number of frames for transition (default:"5")
    • text_ok : Set text for common OK text (default:"OK")
    • text_next : Set text for wizard next button (default:"Next >")
    • text_back : Set text for wizard back button (default:"< Back")
    • text_yes : Set text for default yes button (default:"Yes")
    • text_no : Set text for default no button (default:"No")
    • text_about : Set text for About menu (default:"About & Informations")
    • text_calibrating : Set text for Calibration Menu (default:"Calibrating Tools")
    • text_quit : Set text for Quit Menu (default:"Quit Installation")
    • text_quit_msg : Set text for Quit Confirmation Message (default:"Are you sure to quit the Installer?")
    • rom_name : Set ROM Name Information
    • rom_version : Set ROM Version Information
    • rom_author : Set ROM Author Information
    • rom_device : Set ROM Device Information
    • customkeycode_up : Set Alternative keycode for up key (navigate up)
    • customkeycode_down : Set Alternative keycode for down key (navigate down)
    • customkeycode_select : Set Alternative keycode for select key (select an item)
    • customkeycode_back : Set Alternative keycode for back key
    • customkeycode_menu : Set Alternative keycode for menu key
  • newvalue - New value to be set for configname
Return Value: none
Examples:
Code:
# Set ROM Informations
ini_set("rom_name", "AROMA ROM");
ini_set("rom_version", "1.0");
ini_set("rom_author", "amarullz");
ini_set("rom_device", "HTC Desire (bravo)");

# Set Custom Text
ini_set("text_ok", "OK Man");
ini_set("text_next", ">>");
ini_set("text_back", "<<");

# Set Alternative Key Code - You can use keycapture tool
# to capture your device keycode
ini_set("customkeycode_up", "115");
ini_set("customkeycode_down", "114");
ini_set("customkeycode_select", "116");
ini_set("customkeycode_menu", "229");
ini_set("customkeycode_back", "158");

calibrate

Descriptions:
Set Touch Screen Calibration Data. Different device may had different touch screen calibration data. To get calibration data, press menu, select calibration tools then follow the intructions.
Sintax:

void calibrate(divx, addx, divy, addy [, alternative_method]);
Parameters:
  • divx - Division value for horizontal touchscreen to display resolution.
  • addx - Add value for horizontal alignment.
  • divy - Division value for vertical touchscreen to display resolution.
  • addy - Add value for vertical alignment.
  • alternative_method [Optional] - Use alternative method for touch screen handling if normal method not works in your device (default:"no")
Return Value: none
Examples:
Code:
# HTC Desire Calibrated Data
calibrate("7.90","20","7.90","20");

# Alternative method Calibrated Data
calibration("1.8447", "37", "1.2158", "27", "yes");


calibtool

Descriptions:
Start calibration tool.
Sintax:

void calibtool(dummy_arguments);
Parameters:
  • dummy_arguments - Edify should pass at least 1 arguments. Just Pass "" for it
Return Value: none
Examples:
Code:
# Start Calibrating Tools
calibtool("");

theme

Descriptions:
Set AROMA Installer Theme will be used in next display.
Sintax:

void theme(theme_name);
Parameters:
  • theme_name - Theme Name will be used. It was theme directory name located in "META-INF/com/google/android/aroma/themes"
Return Value: none
Examples:
Code:
# Use ICS Theme located at:
# META-INF/com/google/android/aroma/themes/ics
theme("ics");

VARIABLE FUNCTIONS

getvar

Descriptions:
Get Variable
Sintax:

variable_value getvar(varname);
Parameters:
  • varname - Variable Name
Return Value: Variable Value
Examples:
Code:
# Show "testvar" value in alert
alert(
 "Value of testvar",
 getvar("testvar")
);

setvar

Descriptions:
Set Variable
Sintax:

void setvar(varname, value);
Parameters:
  • varname - Variable Name to be set
  • value - New Value for Variable
Return Value: none
Examples:
Code:
# Set new value for "testvar"
setvar("testvar", "This is only test!!");

# Now Show the "testvar" value in alert
alert(
 "Value of testvar",
 getvar("testvar")
);

appendvar

Descriptions:
Append new value after previous value, it's like concating strings ( previous_value + newvalue )
Sintax:

void appendvar(varname, value);
Parameters:
  • varname - Variable Name to be set
  • value - New Value to be appended in variable
Return Value: none
Examples:
Code:
# Set new value for "testvar"
setvar("testvar", "This is only test!!");

# Append new value
appendvar("testvar", "Add String");

# "testvar" now will contain "This is only test!!Add String"

prependvar

Descriptions:
Prepend new value before previous value, it's like concating strings ( newvalue + previous_value )
Sintax:

void prependvar(varname, value);
Parameters:
  • varname - Variable Name to be set
  • value - New Value to be prepended in variable
Return Value: none
Examples:
Code:
# Set new value for "testvar"
setvar("testvar", "This is only test!!");

# Prepend new value
prependvar("testvar", "Add String!! ");

# "testvar" now will contain "Add String!! This is only test!!"

PROP FILE HANDLER FUNCTIONS

file_getprop

Descriptions:
Read prop file value for given keyname
Sintax:

prop_value file_getprop(filename, keyname);
Parameters:
  • filename - Absolute path of prop file in filesystem
  • keyname - Prop Key Name
Return Value: Value of prop for given keyname
Examples:
Code:
# Get value of "item.1.1" from /tmp/aroma-data/custom.prop
alert(
 "Value of Prop",
 file_getprop("/tmp/aroma-data/custom.prop", "item.1.1")
);

prop

Descriptions:
Same with file_getprop, but will read relatively from AROMA Temporary Directory "/tmp/aroma-data/"
Sintax:

prop_value prop(filename, keyname);
Parameters:
  • filename - Relative path of prop file in AROMA Temporary Directory "/tmp/aroma-data/"
  • keyname - Prop Key Name
Return Value: Value of prop for given keyname
Examples:
Code:
# Get value of "item.1.1" from /tmp/aroma-data/custom.prop
alert(
 "Value of Prop",
 prop("custom.prop", "item.1.1")
);

zipprop

Descriptions:
Same with file_getprop, but will read the prop file from Zip
Sintax:

prop_value zipprop(zip_path, keyname);
Parameters:
  • zip_path - Absolute path of prop file in Zip ( don't add "/" in first character )
  • keyname - Prop Key Name
Return Value: Value of prop for given keyname
Examples:
Code:
# Get value of "item.1.1" from META-INF/com/google/android/aroma/custom.prop
alert(
 "Value of Prop",
 zipprop("META-INF/com/google/android/aroma/custom.prop", "item.1.1")
);

resprop

Descriptions:
Same with zipprop, but will read the prop file from Zip relatively from AROMA Resource Directory "META-INF/com/google/android/aroma/"
Sintax:

prop_value resprop(zip_path, keyname);
Parameters:
  • zip_path - Relative path of prop file in Zip from AROMA Resource Directory "META-INF/com/google/android/aroma/"
  • keyname - Prop Key Name
Return Value: Value of prop for given keyname
Examples:
Code:
# Get value of "item.1.1" from META-INF/com/google/android/aroma/custom.prop
alert(
 "Value of Prop",
 resprop("custom.prop", "item.1.1")
);

sysprop, property_get

Descriptions:
Read system property value for given keyname
Sintax:

prop_value property_get(keyname);

prop_value sysprop(keyname);
Parameters:
  • keyname - Prop Key Name
Return Value: Value of prop for given keyname
Examples:
Code:
# Get Device Board Name
alert(
 "Device Board Name",
 sysprop("ro.product.board")
);

# Get Board Platform
alert(
 "Device Board Name",
 property_get("ro.board.platform")
);

FILESYSTEM FUNCTIONS

writetmpfile

Descriptions:
Write string into file in AROMA temporary
Sintax:

void writetmpfile(filename, value);
Parameters:
  • filename - Destination file in AROMA temporary directory
  • value - String that will be write into the file
Return Value: none
Examples:
Code:
# It will saved in from /tmp/aroma-data/test.txt
writetmpfile("test.txt", "This is test text");

# Show the content in alert with readtmpfile
alert(
 "Value of test.txt",
 readtmpfile("test.txt")
);

# Show the content in alert with read
alert(
 "Value of test.txt",
 read("/tmp/aroma-data/test.txt")
);

write

Descriptions:
Write string into file in filesystem
Sintax:

void write(filename, value);
Parameters:
  • filename - Absolute path to Destination file
  • value - String that will be write into the file
Return Value: none
Examples:
Code:
# It will saved in from /sdcard/test.txt
writetmpfile("/sdcard/test.txt", "This is test text");

# Show the content in alert with read
alert(
 "Value of test.txt",
 read("/sdcard/test.txt")
);

readtmpfile

Descriptions:
Read string from file in AROMA temporary directory
Sintax:

content_of_file readtmpfile(filename);
Parameters:
  • filename - File in AROMA temporary directory that will be readed
Return Value: Content of file in String
Examples:
Code:
# It will read data from /tmp/aroma-data/test.txt
# then save it in variable
setvar(
 "testvar",
 readtmpfile("test.txt")
);

read

Descriptions:
Read string from file in filesysten
Sintax:

content_of_file read(filename);
Parameters:
  • filename - Absolute path to Destination file that will be readed
Return Value: Content of file in String
Examples:
Code:
# It will read data from /sdcard/test.txt
# then save it in variable
setvar(
 "testvar",
 read("/sdcard/test.txt")
);

ZIP CONTENT HANDLING FUNCTIONS

readfile

DEPRECATED!!! - Identical with zipread. Will be deleted soon.

readfile_aroma

DEPRECATED!!! - Identical with resread. Will be deleted soon.

zipread

Descriptions:
Read string from file in zip
Sintax:

content_of_file zipread(zip_path);
Parameters:
  • zip_path - Absolute path to Destination file in zip that will be readed
Return Value: Content of file in String
Examples:
Code:
# It will read data from zip content "META-INF/com/google/android/aroma/text.txt"
# then save it in variable
setvar(
 "testvar",
 zipread("META-INF/com/google/android/aroma/text.txt")
);

# It will read data from zip content "tmp/text.txt"
# then save it in variable
setvar(
 "testvar2",
 zipread("tmp/text.txt")
);

resread

Descriptions:
Read string from file in zip relatively from AROMA Resource Directory "META-INF/com/google/android/aroma/"
Sintax:

content_of_file resread(zip_path);
Parameters:
  • zip_path - Relative path of file in Zip from AROMA Resource Directory "META-INF/com/google/android/aroma/" that will be readed
Return Value: Content of file in String
Examples:
Code:
# It will read data from zip content "META-INF/com/google/android/aroma/text.txt"
# then save it in variable
setvar(
 "testvar",
 resread("text.txt")
);


ZIP EXTRACT FUNCTIONS

ziptotmp

Descriptions:
Extract file from zip content into AROMA Temporary directory, and automatically chmod it for executable.
Sintax:

void ziptotmp(zip_path, destination_name);
Parameters:
  • zip_path - Absolute path to Destination file in zip that will be extracted
  • destination_name - Extracted target filename
Return Value: none
Examples:
Code:
# It will extract "tmp/busybox" into "/tmp/aroma-data/busybox"
ziptotmp("tmp/busybox", "busybox");

# Now we can execute it
exec("/tmp/aroma-data/busybox","ls","-l");

restotmp

Descriptions:
Extract file from zip content in AROMA Resource Directory "META-INF/com/google/android/aroma/" into AROMA Temporary directory, and automatically chmod it for executable.
Sintax:

void restotmp(zip_path, destination_name);
Parameters:
  • zip_path - Relative path of file in Zip from AROMA Resource Directory "META-INF/com/google/android/aroma/" that will be extracted
  • destination_name - Extracted target filename
Return Value: none
Examples:
Code:
# It will extract "META-INF/com/google/android/aroma/busybox" into "/tmp/aroma-data/busybox"
restotmp("busybox", "busybox");

# Now we can execute it
exec("/tmp/aroma-data/busybox","ls","-l");

EXEC FUNCTIONS

zipexec

Descriptions:
Extract file from zip into AROMA temporary, chmod it, and execute it.
Sintax:

exit_status zipexec(zip_path [, argument1, argument2, ... ]);
Parameters:
  • zip_path - Absolute path of zip content that will be executed
  • arguments [Optional] - Command line Arguments
Return Value: Return exit status. "0" for common success status
The output buffer/stdout will be automatically saved into "exec_buffer"
Examples:
Code:
# It will extract and run "META-INF/com/google/android/aroma/test.sh"
zipexec("META-INF/com/google/android/aroma/test.sh");

# With Arguments
zipexec("META-INF/com/google/android/aroma/test.sh", "argument1", "argument2");

# Get Return Status
if
 zipexec("META-INF/com/google/android/aroma/test.sh") == "0"
then
 alert(
 "Exec Status",
 "Shell was executed successfully"
 );
endif;

# Get STDOUT
zipexec("META-INF/com/google/android/aroma/test.sh");
alert(
 "Exec STDOUT",
 getvar("exec_buffer")
 );

resexec

Descriptions:
Same as zipexec, but it will extract and run the file from zip relatively from AROMA Resource Directory "META-INF/com/google/android/aroma"
Sintax:

exit_status resexec(zip_path [, argument1, argument2, ... ]);
Parameters:
  • zip_path - Relative path of zip content from AROMA Resource Directory "META-INF/com/google/android/aroma/" that will be executed
  • arguments [Optional] - Command line Arguments
Return Value: Return exit status. "0" for common success status
The output buffer/stdout will be automatically saved into "exec_buffer"
Examples:
Code:
# It will extract and run "META-INF/com/google/android/aroma/test.sh"
resexec("test.sh");

# With Arguments
resexec("test.sh", "argument1", "argument2");

# Get Return Status
if
 resexec("test.sh") == "0"
then
 alert(
 "Exec Status",
 "Shell was executed successfully"
 );
endif;

# Get STDOUT
resexec("test.sh");
alert(
 "Exec STDOUT",
 getvar("exec_buffer")
 );


run_program, exec

Descriptions:
Run executable from filesystem
Sintax:

exit_status run_program(path [, argument1, argument2, ... ]);
exit_status exec(path [, argument1, argument2, ... ]);
Parameters:
  • zip_path - Absolute path to executable
  • arguments [Optional] - Command line Arguments
Return Value: Return exit status. "0" for common success status
The output buffer/stdout will be automatically saved into "exec_buffer"
Examples:
Code:
# It will run "ls" command
run_program("/sbin/ls");

# or
exec("/sbin/ls");

# With some Arguments
run_program("/sbin/ls", "-l", "/sdcard");

# Mounting Device
exec("/sbin/mount", "-t", "auto", "/system");

# Get Return Status
if
 exec("/sbin/mount", "-t", "auto", "/system") == "0"
then
 alert(
 "Exec Status",
 "Mount was executed successfully"
 );
endif;

# Get STDOUT
exec("/sbin/ls", "-l", "/sdcard/*.zip");
alert(
 "List of Zip in SDCARD",
 getvar("exec_buffer")
 );
 
Last edited:

hrcell

Member
Dec 2, 2010
24
3
Download
Version 1.00 - ANGGREK [2012/01/24][DOWNLOAD]
  • Initial Release
  • Customizable
  • Optimized Build


Signing Your Script
AROMA Installer need Signing Their script to be able to pass Installer UI.

Select your aroma-config script and updater-script script in File Input below, then click Generate Signature, to download your Installer Sign File (CERT.SA). Place it in your META-INF folder, then pack your ROM.

Why I need Sign My Installer?
I Hate someone who use other works but don't know who actually created it... But I love someone use my works without even pay anything or buy anything for me. So This method is the best way to notice all users that the AROMA Installer was created by me. If you don't like the method, I can't force you to use my works...


Customizing Your Script
AROMA Installer can be configured and customized as you like, there is so many features and functions you can used to implemented many things. In this manual, we will learn all the features and functions in technical ways and can be implemented directly in configuration for practice, or production.


hi
this need s-off for htc sensations?
 

amarullz

Inactive Recognized Developer
Jan 16, 2007
1,066
7,272
Bandung
amarullz.blog.unikom.ac.id
What about those in which the touch screen doesn't work in recovery?

It still works with volume keys or trackpad/navigation... The generic CWM include Touch Driver. so It will works in almost all recoveries (ofcourse except the recovery with trimmed kernel). But the devices had different calibrating data, so ROM Chef should try to calibrate the device use "menu"->Calibrating Tools in Installer...
 

Faryaab

Senior Member
Jun 11, 2009
2,987
14,207
London, UK
It still works with volume keys or trackpad/navigation... The generic CWM include Touch Driver. so It will works. But the devices had different calibrating data, so ROM Chef should try to calibrate the device use "menu"->Calibrating Tools in Installer...

I have tried this on my Galaxy S and the touch screen doesn't work but Menu button does work but i can't select anything with any key.
 
Last edited:

amarullz

Inactive Recognized Developer
Jan 16, 2007
1,066
7,272
Bandung
amarullz.blog.unikom.ac.id
I have tried this on my Galaxy S and the touch screen doesn't work but Menu button does work but i can't select anything with any key.

Can You navigate trough the items??
What default keys you used in recovery to select items?

Currently the selection keys was:
BTN_MOUSE, KEY_ENTER, KEY_CENTER, KEY_CAMERA, KEY_F21, KEY_SEND
Maybe I should include POWER Button to select something.

Navigation can be used with:
KEY_DOWN, KEY_UP, KEY_VOLUMEDOWN, KEY_VOLUMEUP

I will rebuild it now...

Try attached file: To Make the touch screen works, run the Calibrating Tools, then edit aroma-config file in "META-INF\com\google\android"

NOTE: Calibrating data included in the binary was for HTC Desire, to change it, check this line in aroma-config:


Code:
##
# Calibrate Touchscreen
#  defaut: HTC Desire Touch Screen Calibrate Data 8,-20,8,-20
#
# For other device, run the installer, then press "menu"
# and select Calibrating Tools. Follow Instructions, and make
# sure the touch screen has been valid in the testing step.
#
# In the end, there will be alert dialog with calibration data
# ( green ), replace this calibrate() function with that data.
#
calibrate("8","-20","8","-20");
 
Last edited:
  • Like
Reactions: Yokie Andrean

Faryaab

Senior Member
Jun 11, 2009
2,987
14,207
London, UK
Can You navigate trough the items??
What default keys you used in recovery to select items?

Currently the selection keys was:
BTN_MOUSE, KEY_ENTER, KEY_CENTER, KEY_CAMERA, KEY_F21, KEY_SEND
Maybe I should include POWER Button to select something.

Navigation can be used with:
KEY_DOWN, KEY_UP, KEY_VOLUMEDOWN, KEY_VOLUMEUP

I will rebuild it now...

Try attached file: To Make the touch screen works, run the Calibrating Tools, then edit aroma-config file in "META-INF\com\google\android"

NOTE: Calibrating data included in the binary was for HTC Desire, to change it, check this line in aroma-config:


Code:
##
# Calibrate Touchscreen
#  defaut: HTC Desire Touch Screen Calibrate Data 8,-20,8,-20
#
# For other device, run the installer, then press "menu"
# and select Calibrating Tools. Follow Instructions, and make
# sure the touch screen has been valid in the testing step.
#
# In the end, there will be alert dialog with calibration data
# ( green ), replace this calibrate() function with that data.
#
calibrate("8","-20","8","-20");
Assign the power button to select option as we use our home and power button to select. If you assign the power button then we can calibrate our touch screen.
 

amarullz

Inactive Recognized Developer
Jan 16, 2007
1,066
7,272
Bandung
amarullz.blog.unikom.ac.id

amarullz

Inactive Recognized Developer
Jan 16, 2007
1,066
7,272
Bandung
amarullz.blog.unikom.ac.id
Now keys are working but even after calibrating the touch screen it doesn't work.

can you move the circle in the end of calibrating?.. In alert Dialog, there is script data like this: calibrate("8","-20","8","-20");

The code should be included in aroma-cofig

##
# Calibrate Touchscreen
# defaut: HTC Desire Touch Screen Calibrate Data 8,-20,8,-20
#
# For other device, run the installer, then press "menu"
# and select Calibrating Tools. Follow Instructions, and make
# sure the touch screen has been valid in the testing step.
#
# In the end, there will be alert dialog with calibration data
# ( green ), replace this calibrate() function with that data.
#
calibrate("8","-20","8","-20");

#
#

you should unzip the file, and edit the aroma-config, then re-zip it again....
 

Top Liked Posts

  • There are no posts matching your filters.
  • 1437
    logo.png

    The World's First ANDROID Touch And Customizable ROM Installer


    DEVELOPMENT AND UPDATE NOW ON XDA-DEVDB
    AROMA INSTALLER THREAD


    Don't Forget To Donate To Me:



    When you install Linux, Windows, Mac or applications on the PC
    You can always customize your installation as you want.


    WHY CAN'T WE DO THE SAME INSTALLING AN ANDROID ROM?

    BECAUSE NOW
    AROMA Installer
    GIVES YOU THIS POSSIBILITY!




    For Questions and Answer about scripting and customizing your Installer, please post your problems in Q&A Thread below:
    AROMA Installer & Edify
    Q & A THREAD



    Need stunning AROMA Installer Package Creator in GUI:
    Aroma App Package Creator

    by commandersafi​
    YOU DON'T NEED TO USE TOUCH RECOVERY TO MAKE THE TOUCH SCREEN WORKS
    If your Recovery Kernel include Touch Screen Driver, even if the recovery not supported touch screen, it will works.
    And Almost any recovery included touch screen driver in its kernel (Except some trimmed versions)


    -------------------------A-R-O-M-A---I-n-s-t-a-l-l-e-r-------------------------



    Benefits For Users
    AROMA Installer gives users the possibility to choose which mods and applications they want to Install on to their device. Sometimes we want the clean install, without bloatware; and sometimes we want the full set of applications on our device. With AROMA Installer, you are your phone's master!



    Benefits For Chefs/Developers
    AROMA Installer gives chefs many benefits:

    You don't ever again have to hear someone ask to remove or include something they like into your ROM, just for you to yell "Hey, that is only your opinion! Only you and some other people like it; most people don't! Go remove the apps on your own with WINRAR, you ^$#&*&#$", remember they are still a customer :cool:, and with AROMA Installer, this problem can be solved.

    If you are good at customizing the AROMA Installer it was possible to make your ROM compatible with many devices using just one ROM File. You save your time, bandwith and hosting maintanance.

    With the great user interface in your ROM installation, users will be very happy with it.

    With AROMA Installer, You Are The Greatest ROM Developer


    -------------------------A-R-O-M-A---I-n-s-t-a-l-l-e-r-------------------------




    -------------------------A-R-O-M-A---I-n-s-t-a-l-l-e-r-------------------------


    Videos
    Watch this video to learn about AROMA Installer. Thanks to XsMagical for creating this awesome video...





    426
    Downloads & Resources

    FOR ROM CHEFS ONLY

    ROM CHEF? WHAT IS THAT? ... HERE IS A VIDEO


    DON'T ASK ABOUT HOW TO INSTALL IT, BECAUSE IT MEANS YOU DON'T KNOW WHAT IT IS FOR

    IT ISN'T AN APPLICATION YOU CAN USE OR INSTALL ON TO YOUR PHONE LIKE ANGRY BIRDS OR FACEBOOK

    IF YOU JUST A USER, THEN FIND A ROM THAT ALREADY USES THIS INSTALLER

    MOST IMPORTANT THING BEFORE CUSTOMIZING IT

    Make sure You took an update-binary from a working ROM,
    renamed it to update-binary-installer and overwrote the one in my AROMA Installer zip

    Download Binary

    Version 3.00b1 - MELATI
    BUILD:15022833

    NOTE WILL ONLY WORKS ON DEVICE WITH ARM NEON SUPPORT
    Recent Changelogs:
    • FLAMBOYAN MELATI- 3.00b1
    • new engine fb & input driver
    • support msmfb overlay
    • more neon improve
    • tweaks some ui
    • graphics processing

    Download Binary

    Version 2.70 RC2 - FLAMBOYAN
    BUILD:130903

    NOTE WILL ONLY WORKS ON DEVICE WITH ARM NEON SUPPORT

    Recent Changelogs (FLAMBOYAN BETA):
    • FLAMBOYAN BETA - 2.70B1-B6
    • -
    • BETA-6
    • Fix some back sequence (thanks Electronic Punk) - Small but Important fix aparse_current_position++ to ++aparse_current_position. ( https://github.com/amarullz/AROMA-In...1bba2d02988c60 )
    • -
    • BETA-5
    • Fix Commented NEON - Now Fast Again
    • New Themes
    • New Stack Transition, and smoother dialog transitions
    • Add ini_set("transition","stack");
    • Add Screenshoot (Volume Down+Power Button) - Image Format BMP-565 16 bit
    • fix ini_get function
    • Whole new input driver
    • Optimize alphablend processes
    • Optimize and Add Drawing Scale Nearest Neighbor
    • Add drawing functions for alphablend
    • Dialog In & Out Transition
    • Cache recovery display for exit transition
    • Add Exit transition
    • fix force_colorspace issue
    • add colorspace change demo
    • remove unneeded sleep for faster start and exit
    • -
    • BETA-4
    • Fix Icon Themes Error
    • Change Transition Animation - Slides for next/back - Smoother than alpha blend animation
    • Remove any transition effect for Dialog Window
    • Use Bold Text for Navigation Button
    • Fix Installer UI for text log position
    • Add ini_set/ini_get for Vibrate Intensity (0-10). ini_set("vibrate","5") = Half Intensity, ini_set("vibrate","0") = No Vibrate At All
    • Add ini_set/ini_get for icon_back and icon_next. ini_set("icon_next","@install"), ini_set("icon_back","icons/back")
    • Fix Installer Freeze on (pthread_detach) - Compileable for Android Build Environment
    • BUILD WITH ANDROID BUILD ENVIRONMENT - Binary Size Reduce By ~60% - BUILD COMMAND: make aroma_installer; make aroma_installer.zip
    • Add zip build command in building the source
    • Rewrite building script for windows and linux with Android Build Environment
    • Modify aroma-config in demo zip to includes some new features
    • Change update-binary-installer from Galaxy Nexus binary. Sensation user should replace it binary with sensation binary
    • Beautifier Source Code. Add beautifier tools in source code tree
    • -
    • BETA-3
    • Fix Include Back Error
    • Improve Back Sequence Capability
    • ADD EVAL Function to execute the script inline from string
    • ADD GOTO Function to jump back into GOTO Label. gotolabel(), goto().
    • Update More Demo in Example Zip
    • Improving Efficiency processes when loading and reloading themes
    • -
    • BETA-2
    • Fix color handling on themes
    • Using bilinear scaling in png.9p
    • Re-add hebrew support
    • Add Italic Support with tag \<i>Italic\</i>
    • ADD include function, to include script from different file. look at new aroma-config file and language_select.edify file
    • -
    • BETA-1
    • reboot("now","recovery"); and reboot("now","fastbot");
    • Refresh look and feel
    • Remove RTL and Arabic Support (For faster and freeing resource, because the features still unusable)
    • Subpixel rendering for Fonts (Clear Type Like)
    • Improve performance with NEON here and there.
    • Tweaks some input driver
    • May fix some colorspace issue
    • Bilinear scaling for png icons, Now it look smooth even if it resized
    • FIX MANY BACK SEQUENCE BUGS
    • Font will only loaded if the font is really changed - Faster-faster performance improvement
    • Change Navigation Bar Buttons. Now next and back can be using Icons
    • Add Menu Button for buttonless devices.


    • EDELWEIS - 2.56 - BUILD 121004-031
    • Fix capacitive button
    • Remove calibration tools

    • EDELWEIS - 2.55 - BUILD 121003-030
    • Completely new Input/Touchscreen Handler - Thanks to agrabren from TWRP
    • Remove all calibration need. calibtool(), calibrate() and calibrate_matrix() won't do anything now. :)

    • EDELWEIS - 2.51 - BUILD 120810-026
    • Supported Galaxy Nexus Touch Screen - And maybe other devices now supported

    • EDELWEIS - 2.50 - BUILD 120716-025
    • Add Calibration Matrix for More Accurate Touch screen calibration
    • Set ROBOTO as Default True Type Font

    • DAHLIA - 2.00 - BUILD 120425-020
    • Fix Installation Save Logs
    • Fix framebuffer mmap size
    • Fix status 0 error
    • Add Multilanguage functions
    • Change list bullet drawing method
    • Add support for kerning font when use TrueType/OpenType
    • Add AROMA Memory management and memory debuging build (COMPILE FROM SOURCE ONLY)
    • Add more limit size for AROMA texts
    • Add font glyph cache for faster freetype drawing & processing
    • Add support for Modern Standard Arabic
    • Add support for RTL
    • Add support for TrueType and OpenType fonts
    • Add support for UTF8 encoding in aroma-config and all AMS text. For updater-script use NO-BOM UTF8
    • Fix Memory leaks
    • Add ini_set("force_colorspace","rgba");
    • Add support for atmel_maxtouch - Asus Transformer Touch Screen

    • CEMPAKA- 1.64 - BUILD 120414-040
    • Fix framebuffer mmap size
    • Fix status 0 error


    Previous Changelogs:
    Code:
    [LEFT]
    * [B]CEMPAKA- 1.63 - BUILD 120306-032[/B]
    * Add support for atmel_maxtouch (Down Event SYN) - Asus Transformer Prime Touch Screen
    
    * [B]CEMPAKA- 1.62 - BUILD 120303-030[/B]
    * Fix some memory leaks ([COLOR="Red"]Important[/COLOR]).
    * Add ini_set("[COLOR="Green"]force_colorspace[/COLOR]","rgba");
    
    * [B]CEMPAKA- 1.60 - BUILD 120227-026[/B]
    * Add msb_right check for Endianess video memory
    * Fix Installer text log drawing
    * Add ini_get
    * Add rom_date in ini_get
    * Fix reboot and back function
    * Add more and recreate Icons for themes and generic
    * Rewrite text handler
    * Add alignment, indentation and list in AROMA Markup String
    * Change temp directory to /tmp/aroma, /tmp/aroma-data stil works
    * Add Theme Support
    * Add AROMA Markup for <b> Bold
    * Add More Colorset
    * Add More Text to Customize
    * Add PNG Icon Load From Theme (Default Icons)
    * Add Tab support in AROMA Markup String
    * Change int to long for partition info, now support big storage information
    * Config Init All/Theme Only
    * Recreate new example (release) for binary release
    * Customizable Font Runtime
    * Reformat About Dialog
    * Add show progress per time in installer (now support by files and by time).
    * Themeable Progressbar
    * Enhance Exec Functions to return exit status and autosave buffer into variable
    * Fix glibc error in ag_close - Need workaround
    * Move ai_trim to system libs
    * Add Stretch function for png
    * Add 9 Patch drawing function for png
    * Fix Reboot Function
    * Add Alternative Touch Method
    * Add ziptotmp & restotmp
    * Add support for mxt224 touch screen (SYN_MT_REPORT event)
    * [B]BOUGENVILLE - 1.10 - BUILD 120208-13[/B]
    * Add Alternative Touch Method
    * Added New Functions
      - anisplash - ANIMATED SPLASH SCREEN
      - prop - GET PROP FROM AROMA TMP
      - zipprop - GET PROP FROM ZIP
      - resprop - GET PROP FROM AROMA RESOURCE ZIP
      - sysprop - GET RECOVERY PROP
      - property_get - GET RECOVERY PROP
      - write - WRITE STRING INTO FILESYSTEM
      - readtmpfile - READ TEMPORARY FILE AS STRINF
      - read - READ FILESYSTEM AS STRING
      - zipread - Read String From Zip
      - resread - Read Strinf From Resource
      - zipexec - Exec Program From Zip
      - resexec - Exec Program From Resource
      - run_program - Run Program/Exec
      - exec - Run Prohram/Exec
      - back - BACK TO PREVIOUS WIZARD
      - reboot - REBOOT DEVICE
    * Deprecated Funcrions
      - readfile - Will Renamed to zipread
      - readfile_aroma - Will Renamed to resread
    * Add Some Fix in Touch Up Handler
    * Prop parsing, File Handling & Zip Handling has been managed in efficient functions
    * Remove CERT.SA - Not Needed
    * Add Licence Headers in all aroma source code Apache 2.0
    * Add More Comments & Documentation in Souce Code
    * Renamed functions for fit needs
    
    * [B]ANGGREK -1.00 - BUILD:120204-011[/B]
    * Fix calibrating function not working when set in aroma-config
    * Update and fix firmware command from update-binary-installer into recovery.
    
    * [B]ANGGREK -1.00 - BUILD:120202-10[/B]
    * Improve touch handler compatibility. Now more accurate in every devices
    * Add more chars into ROM Infos from only 31 to 63max
    * Detail changelog from commit: [URL="https://github.com/amarullz/AROMA-Installer/commit/f49e2969e3b3514e180dcb15bed5a48298b19046"]10[/URL]
    
    * [B]ANGGREK -1.00 - BUILD:120201-009[/B]
    * Stride/Pitch/Padding Framebuffer support for non multiply 8 screen size like qhd on sensation and evo3d
    * Rewrite input handler, better keys & touch screen compatibility.
    * Change calibration division data from integer to float, more accurate calibrating
    * Improve fling and scrolling engine
    * Add support for all possible screen bit depth 32/24/16bit. ARGB, ABGR, RGBA, BGRA. No problem now.
    * Detail changelog from commit: [URL="https://github.com/amarullz/AROMA-Installer/commit/b9daae9151e6ec4e1054725722b6f507f621f065"]006[/URL], [URL="https://github.com/amarullz/AROMA-Installer/commit/65fdbb9a2f7c12a799f320b3759ab60d6b00d3b1"]007[/URL], [URL="https://github.com/amarullz/AROMA-Installer/commit/f49e2969e3b3514e180dcb15bed5a48298b19046"]009[/URL]
    
    [B]ANGGREK -1.00 - BUILD:120129-005[/B]
    * Remove Signature Check - Now You don't need to sign aroma-config and updater-script
    * Calibration Tool now show before anything, so you can directly do calibration. you can disabled it in aroma-config by deleting [B]calibtool("");[/B] command.
    * Fix some touch screen input handler
    * Add 229 in menu keycode (F2 used in emulator as menu key)
    
    [B]ANGGREK -1.00 - BUILD:120128-004[/B]
    * Open Source - Binary No Released
    
    [B]ANGGREK -1.00 - BUILD:120126-003[/B]
    * Refer to defy recovery source code found [URL="https://github.com/CyanogenDefy/android_device_motorola_jordan/blob/gingerbread/recovery_ui.c"]HERE[/URL] (Thanks [URL="http://xdaforums.com/showthread.php?t=1356767"]walter79[/URL] for github source code) I add some keycode into input reader : [URL="http://xdaforums.com/showpost.php?p=21826756&postcount=32"]Read Here[/URL]
    * Add confirmation if calibrated data will be used in current process (After Calibrating) - So you can try touchscreen without editing [COLOR="Green"]aroma-config[/COLOR] after you calibrate it.
    * Remove precision calculation in scrolling thread (Natural calculation but less fluid)... Feel faster now.
    * Add function for [COLOR="Green"]aroma-config[/COLOR] to define custom key code for up/down/select/back/menu, just like [COLOR="Green"]calibrate()[/COLOR] function. with format like this: [COLOR="DarkRed"]ini_set("customkeycode_up",130);[/COLOR] or [COLOR="DarkRed"]ini_set("customkeycode_select",13);[/COLOR], the keycode can be capture by [URL="http://xdaforums.com/attachment.php?attachmentid=872892&d=1327550395"]aroma-keycapture-flashable.zip[/URL]
    
    [B]ANGGREK -1.00 - BUILD:120125-002[/B]
    * Add Home & Power Button To Select Items
    * Unsigned Script Now Not Terminated Installer, but just show Alert That the script should be signed to pass install ui
    * Add More Documentation in aroma-config
    
    [B]ANGGREK -1.00 - BUILD:120124-001[/B]
    * Initial Release ( AROMA UI, AROMA Touch Handler, AROMA Markup String )
    * Customizable ( Custom Theme Colors, Customizable Fonts and Images )
    * Optimized Build ( Static, -o2, remove unused functions, remove png-write and zlib deflate functions )
    [/LEFT]

    Open Source?
    There may be some people who will ask if the project is Open Source, and the quick answer is YES. It is an Open Source Project Now.

    Why Release The Source?
    • I used some other work (modified) from the Open Source Community, especially Koush's recovery source code for getting the input mode, PNG, ZLIB, and some Framebuffer programming samples.
    • I want to make all chefs feel safe, so I guarantee that I won't make this into a money making program.
    • I got something from the community, and I want to give something back to it.

    What Benefits?
    • Rapid development
    • I can get code review & patches - Not just bug reports
    • There are many innovations that I wrote in the program that may be useful for other needs, like the AROMA Graphic Framebuffer, the AROMA UI, the Amarullz Dithering Method, and the AROMA Simple PNG Fonts. It may be used in recovery, so recovery can use the AROMA Installer Interface
    • :cool: I can learn more about Open Sourcing programs (especially the CVS and licensing things - that always drive me to the question - what is it?)

    I Need Help
    As I said before, I am just a newbie at Android Development, or even as a user. I need someone who has a lot of knowledge about Open Sourcing the software, and a lot of knowledge about licencing (I don't know much, I just tried to make my software compatible with them: GPL, Apache, etc.)...

    Thanks.
    Source Code


    TOOLS: AROMA Key Capture
    I also created "aroma-keycapture-flashable.zip" to capture the keycodes of your device (flashable in recovery - won't flash anything :cool:). And in case the keys don't work, report the keycodes in this thread, with information like this example:


    Code:
    Prev Item/Up Key = 120
    Next Item/Up Key = 110
    Select Item/Enter/Select Key = 13
    Back Key = 200
    Menu Key = 193

    To customize keycodes, open aroma-config and modify this code:
    Code:
    ##
    # Custom Key Code - Usefull For Some Device which not used
    #                   Standard key code for up/down/select/back/menu
    #
    # You can capture the keycode in
    # recovery using "aroma-keycapture-flashable.zip" Available in
    # AROMA Installer Thread.
    #
    # Press some key when it run, it will return key code,
    # that key can override up/down/select/back/menu actions in
    # AROMA Installer, you can even set your home key for up, or
    # volume down for select item
    #
    #-------- Uncomment & Modify this Code:
    #
    # ini_set("customkeycode_up",     "115");
    # ini_set("customkeycode_down",   "114");
    # ini_set("customkeycode_select", "116");
    # ini_set("customkeycode_menu",   "139");
    # ini_set("customkeycode_back",   "158");
    #
    260
    AROMA Installer Resources

    The Codenames
    AROMA Installer codename based on Alphabetical Indonesian Flower Names. Here the list of already used codename:

    ANGGREK - 1.00
    anggrek.jpg


    BOUGENVILLE - 1.10
    bougenville.jpg


    CEMPAKA - 1.60 - 1.64
    cempaka.jpg


    DAHLIA - 2.00
    dahlia.jpg


    EDELWEIS - 2.50
    edeilweis.jpg


    FLAMBOYAN - 2.70
    flamboyan.jpg



    Programming Language
    It was application which runs on Android device but not on Android OS Environment that the native applications usually use Java. AROMA Installer use C (Pure C, not C++), so it may run on another platform like x86 with small modifications ofcourse.​


    Used Libraries
    • ZLIB - ofcourse, it was the most awesome thing in computer world :good:
    • PNG
    • MinZIP
    • Freetype
    All library need to compiled as static to make sure it runs without any dependency issue in any devices.​


    Official Binary
    I Only support ARM device, but it was opensourced, so anyone can play with the source and compiled it for they own devices.


    ROM That Already Uses AROMA Installer

    MOD/THEMES Uses AROMA Installer
    3rd Party AROMA Installer Resources



    If you release the ROM with AROMA Installer, please inform me here, I will add your ROM in this post.​

    Thanks for Donators


    Thanks To
    • Sebastiaan15 - For using and test it for the first time
    • avss - For helping me to make it works in sgs2 and many samsung devices
    • DemonWav - For helping grammar in the thread, Testing and give many great ideas.
    • -viperboy- - For intensively testing & feedback the touch screen in EVO3D CDMA
    • baadnwz - For Testing the touch input in sensation
    • capychimp - For Testing Display
    • Prof Peach - For helping and testing
    • V6-Maniac - Creating Video
    208
    About AROMA Installer

    Background
    Android has an advanced system for installing the OS and updates, unlike other mobile OS's that distribute the contents of the OS in static ROM image(s), Android distributes the OS and updates in a plain .zip file that contains all of the packages, files, and the updater for processing the installation.

    The updater splits in 2 types, the binary (update-binary) and script (updater-script), while the binary is an executable file, and the script was a configuration script that tells the binary executable what to do.

    But this advanced technology never expanded into its highest potential ability. The update-binary was simply the linux executable wrote in C that runs in root mode, and can do anything to your system; including accessing the Display FrameBuffer, accessing keys and the touch screen, set vibrate, run programs, parse files, load png(s) and .zip's, and read and write to the filesystem.

    The old update-binary only supported a few functions that can controlled only by the updater-script to instal the files. It didn't have a single function that allowed the installer to interact with the user. There is a program called "yesno" that shows a "Yes" or "No" interface, but it wasn't enough to create a more customizable updater.

    Now with AROMA Installer update-binary, all of this limitation is gone, and this advanced technology is expanded to the highest level of its pontential.


    What is AROMA Installer
    "AROMA" was taken from Bahasa Indonesia (Indonesian Language) and it means "Scent", but it is also an abbreviation of "AMARULLZ ANDROID ROM MANIFESTATION". It is an advanced update-binary for Android that contains many features like Wizard Installation, Touch User Interface (AROMA UI), Customizable Packages, System Inspecting, Themeable, and User Interactive. All release versions will have "flower" codenames, for example, the 1st version is codenamed "Anggrek", which mean "Orchid".​


    How AROMA Installer Works
    How can it work in recovery mode, and how can it so smooth when it scrolls? It works because I hired Chuck Norris to force the recovery to run the installer, and the phone is too afraid to show any lag :cool:.

    No, seriously, when the user selects the .zip file to install it, the recovery will extract the update-binary and run it with a few arguments. All processes are handled by the update-binary, and the recovery will only show the information passed by update-binary via a custom pipe. The great thing is that the update-binary can do anything if we can code it in C/C++, but not all people can easily play with C/C++. Its also not very effective or fun to compile it every time we need to change the process. That's why the custom script is used in AROMA Installer, it is simply edify scripting that is used as the normal updater-script, but with expanded functions available.

    It wasn't a simple thing to archive something like this, because the update-binary is simply the "linux executable" that doesn't even support dynamic links of libraries, basic drawing functions like drawrect, drawline, and I don't think it OpenGL can be included in it's binary. It runs on it's own. Even User Interface was wrote from scratch to manipulate directly into the display framebuffer, user input was read directly from the raw kernel input device, png and .zip was read with a static link library, and the configuration was parsed in it's own program. It is the result of one full month of developing, but you can learn it instantly, without any need to know how to manage memory usage and pointers.

    The AROMA Installer will read, parse, and run the script commands to show it's UI, calculate partition sizes, create, read, and write temporary prop files, set & get variables, do simple integer comparisons and math sequences, do the if else or inline if conditions, configure the UI color scheme, configure rom information, and much more.

    Because it was very complicated and needed a lot of time to develope, did I earn some reason to get donations?.​

    Flowchart How It Works

    more at amarullz.com [+]​
    164
    Functions Reference

    CONFIGURATION FUNCTIONS

    setcolor

    Descriptions:
    Set AROMA Installer Color Scheme. It can also defined in themes with theme.prop file
    Sintax:

    void setcolor(colorname, hexcolor);
    Parameters:
    • colorname - Name of color to be set. colorname with "_g" for gradient color.
      • winbg, winbg_g : Main/Top Most Window Backgroud
      • winfg : Main/Top Most Window Text Foreground
      • winfg_gray : Main/Top Most Window Gray Text Foreground
      • dialogbg, dialogbg_g : Popup Window Backgroud (Alert, Confirm, About)
      • dialogfg : Popup Window Text Foreground
      • textbg, textbg_g : Textbox, Checkbox, and any scrollable UI Background
      • textfg : Textbox, Checkbox, and any scrollable UI Text Foreground
      • textfg_gray : Gray Text ( on Optionbox/Checkbox Item Description )
      • controlbg, controlbg_g : Control / Button / Checkbox border - Background Color
      • controlfg : Button Text Color
      • selectbg, selectbg_g : Selected Element Background ( Pushed/focused Button/items, etc )
      • selectfg : Selected Element Text/Foreground Color
      • titlebg, titlebg_g : Window Title Background
      • titlefg : Window Title Text Foreground Color
      • navbg, navbg_g : Bottom Bar (Navigation Bar) Background. Next-Previous Area
      • scrollbar : Scrollbar indicator color
      • border, border_g : Common Border Color
      • progressglow : Progress Animation Color
    • hexcolor - Hexadecimal Color in RGB. it support 3 and 6 characters hexadecimal started with #. example: "#a8e" or "#ff5599".
    Return Value: none
    Examples:
    Code:
    # Set Color with 3 chars hexcolor
    setcolor("winbg", "#444");
    setcolor("winbg_g", "#222");
    setcolor("textbg", "#333");
    setcolor("textfg", "#fff");
    
    # Set Color with 6 chars hexcolor
    setcolor("textfg_gray", "#bbbbbb");
    setcolor("controlbg", "#446699");
    setcolor("controlbg_g", "#223355");

    ini_set

    Descriptions:
    Sets the value of a AROMA Installer configuration option
    Sintax:

    void setcolor(configname, newvalue);

    Parameters:
    • configname - Configuration name to be set.
      • roundsize : Set Corner size of rounded rectangle for common controls (default:"3")
      • button_roundsize: Set Corner size of rounded rectangle for button controls (default:"2")
      • window_roundsize : Set Corner size of rounded rectangle for main window (default:"4")
      • transition_frame : Set number of frames for transition (default:"5")
      • text_ok : Set text for common OK text (default:"OK")
      • text_next : Set text for wizard next button (default:"Next >")
      • text_back : Set text for wizard back button (default:"< Back")
      • text_yes : Set text for default yes button (default:"Yes")
      • text_no : Set text for default no button (default:"No")
      • text_about : Set text for About menu (default:"About & Informations")
      • text_calibrating : Set text for Calibration Menu (default:"Calibrating Tools")
      • text_quit : Set text for Quit Menu (default:"Quit Installation")
      • text_quit_msg : Set text for Quit Confirmation Message (default:"Are you sure to quit the Installer?")
      • rom_name : Set ROM Name Information
      • rom_version : Set ROM Version Information
      • rom_author : Set ROM Author Information
      • rom_device : Set ROM Device Information
      • customkeycode_up : Set Alternative keycode for up key (navigate up)
      • customkeycode_down : Set Alternative keycode for down key (navigate down)
      • customkeycode_select : Set Alternative keycode for select key (select an item)
      • customkeycode_back : Set Alternative keycode for back key
      • customkeycode_menu : Set Alternative keycode for menu key
    • newvalue - New value to be set for configname
    Return Value: none
    Examples:
    Code:
    # Set ROM Informations
    ini_set("rom_name", "AROMA ROM");
    ini_set("rom_version", "1.0");
    ini_set("rom_author", "amarullz");
    ini_set("rom_device", "HTC Desire (bravo)");
    
    # Set Custom Text
    ini_set("text_ok", "OK Man");
    ini_set("text_next", ">>");
    ini_set("text_back", "<<");
    
    # Set Alternative Key Code - You can use keycapture tool
    # to capture your device keycode
    ini_set("customkeycode_up", "115");
    ini_set("customkeycode_down", "114");
    ini_set("customkeycode_select", "116");
    ini_set("customkeycode_menu", "229");
    ini_set("customkeycode_back", "158");

    calibrate

    Descriptions:
    Set Touch Screen Calibration Data. Different device may had different touch screen calibration data. To get calibration data, press menu, select calibration tools then follow the intructions.
    Sintax:

    void calibrate(divx, addx, divy, addy [, alternative_method]);
    Parameters:
    • divx - Division value for horizontal touchscreen to display resolution.
    • addx - Add value for horizontal alignment.
    • divy - Division value for vertical touchscreen to display resolution.
    • addy - Add value for vertical alignment.
    • alternative_method [Optional] - Use alternative method for touch screen handling if normal method not works in your device (default:"no")
    Return Value: none
    Examples:
    Code:
    # HTC Desire Calibrated Data
    calibrate("7.90","20","7.90","20");
    
    # Alternative method Calibrated Data
    calibration("1.8447", "37", "1.2158", "27", "yes");


    calibtool

    Descriptions:
    Start calibration tool.
    Sintax:

    void calibtool(dummy_arguments);
    Parameters:
    • dummy_arguments - Edify should pass at least 1 arguments. Just Pass "" for it
    Return Value: none
    Examples:
    Code:
    # Start Calibrating Tools
    calibtool("");

    theme

    Descriptions:
    Set AROMA Installer Theme will be used in next display.
    Sintax:

    void theme(theme_name);
    Parameters:
    • theme_name - Theme Name will be used. It was theme directory name located in "META-INF/com/google/android/aroma/themes"
    Return Value: none
    Examples:
    Code:
    # Use ICS Theme located at:
    # META-INF/com/google/android/aroma/themes/ics
    theme("ics");

    VARIABLE FUNCTIONS

    getvar

    Descriptions:
    Get Variable
    Sintax:

    variable_value getvar(varname);
    Parameters:
    • varname - Variable Name
    Return Value: Variable Value
    Examples:
    Code:
    # Show "testvar" value in alert
    alert(
     "Value of testvar",
     getvar("testvar")
    );

    setvar

    Descriptions:
    Set Variable
    Sintax:

    void setvar(varname, value);
    Parameters:
    • varname - Variable Name to be set
    • value - New Value for Variable
    Return Value: none
    Examples:
    Code:
    # Set new value for "testvar"
    setvar("testvar", "This is only test!!");
    
    # Now Show the "testvar" value in alert
    alert(
     "Value of testvar",
     getvar("testvar")
    );

    appendvar

    Descriptions:
    Append new value after previous value, it's like concating strings ( previous_value + newvalue )
    Sintax:

    void appendvar(varname, value);
    Parameters:
    • varname - Variable Name to be set
    • value - New Value to be appended in variable
    Return Value: none
    Examples:
    Code:
    # Set new value for "testvar"
    setvar("testvar", "This is only test!!");
    
    # Append new value
    appendvar("testvar", "Add String");
    
    # "testvar" now will contain "This is only test!!Add String"

    prependvar

    Descriptions:
    Prepend new value before previous value, it's like concating strings ( newvalue + previous_value )
    Sintax:

    void prependvar(varname, value);
    Parameters:
    • varname - Variable Name to be set
    • value - New Value to be prepended in variable
    Return Value: none
    Examples:
    Code:
    # Set new value for "testvar"
    setvar("testvar", "This is only test!!");
    
    # Prepend new value
    prependvar("testvar", "Add String!! ");
    
    # "testvar" now will contain "Add String!! This is only test!!"

    PROP FILE HANDLER FUNCTIONS

    file_getprop

    Descriptions:
    Read prop file value for given keyname
    Sintax:

    prop_value file_getprop(filename, keyname);
    Parameters:
    • filename - Absolute path of prop file in filesystem
    • keyname - Prop Key Name
    Return Value: Value of prop for given keyname
    Examples:
    Code:
    # Get value of "item.1.1" from /tmp/aroma-data/custom.prop
    alert(
     "Value of Prop",
     file_getprop("/tmp/aroma-data/custom.prop", "item.1.1")
    );

    prop

    Descriptions:
    Same with file_getprop, but will read relatively from AROMA Temporary Directory "/tmp/aroma-data/"
    Sintax:

    prop_value prop(filename, keyname);
    Parameters:
    • filename - Relative path of prop file in AROMA Temporary Directory "/tmp/aroma-data/"
    • keyname - Prop Key Name
    Return Value: Value of prop for given keyname
    Examples:
    Code:
    # Get value of "item.1.1" from /tmp/aroma-data/custom.prop
    alert(
     "Value of Prop",
     prop("custom.prop", "item.1.1")
    );

    zipprop

    Descriptions:
    Same with file_getprop, but will read the prop file from Zip
    Sintax:

    prop_value zipprop(zip_path, keyname);
    Parameters:
    • zip_path - Absolute path of prop file in Zip ( don't add "/" in first character )
    • keyname - Prop Key Name
    Return Value: Value of prop for given keyname
    Examples:
    Code:
    # Get value of "item.1.1" from META-INF/com/google/android/aroma/custom.prop
    alert(
     "Value of Prop",
     zipprop("META-INF/com/google/android/aroma/custom.prop", "item.1.1")
    );

    resprop

    Descriptions:
    Same with zipprop, but will read the prop file from Zip relatively from AROMA Resource Directory "META-INF/com/google/android/aroma/"
    Sintax:

    prop_value resprop(zip_path, keyname);
    Parameters:
    • zip_path - Relative path of prop file in Zip from AROMA Resource Directory "META-INF/com/google/android/aroma/"
    • keyname - Prop Key Name
    Return Value: Value of prop for given keyname
    Examples:
    Code:
    # Get value of "item.1.1" from META-INF/com/google/android/aroma/custom.prop
    alert(
     "Value of Prop",
     resprop("custom.prop", "item.1.1")
    );

    sysprop, property_get

    Descriptions:
    Read system property value for given keyname
    Sintax:

    prop_value property_get(keyname);

    prop_value sysprop(keyname);
    Parameters:
    • keyname - Prop Key Name
    Return Value: Value of prop for given keyname
    Examples:
    Code:
    # Get Device Board Name
    alert(
     "Device Board Name",
     sysprop("ro.product.board")
    );
    
    # Get Board Platform
    alert(
     "Device Board Name",
     property_get("ro.board.platform")
    );

    FILESYSTEM FUNCTIONS

    writetmpfile

    Descriptions:
    Write string into file in AROMA temporary
    Sintax:

    void writetmpfile(filename, value);
    Parameters:
    • filename - Destination file in AROMA temporary directory
    • value - String that will be write into the file
    Return Value: none
    Examples:
    Code:
    # It will saved in from /tmp/aroma-data/test.txt
    writetmpfile("test.txt", "This is test text");
    
    # Show the content in alert with readtmpfile
    alert(
     "Value of test.txt",
     readtmpfile("test.txt")
    );
    
    # Show the content in alert with read
    alert(
     "Value of test.txt",
     read("/tmp/aroma-data/test.txt")
    );

    write

    Descriptions:
    Write string into file in filesystem
    Sintax:

    void write(filename, value);
    Parameters:
    • filename - Absolute path to Destination file
    • value - String that will be write into the file
    Return Value: none
    Examples:
    Code:
    # It will saved in from /sdcard/test.txt
    writetmpfile("/sdcard/test.txt", "This is test text");
    
    # Show the content in alert with read
    alert(
     "Value of test.txt",
     read("/sdcard/test.txt")
    );

    readtmpfile

    Descriptions:
    Read string from file in AROMA temporary directory
    Sintax:

    content_of_file readtmpfile(filename);
    Parameters:
    • filename - File in AROMA temporary directory that will be readed
    Return Value: Content of file in String
    Examples:
    Code:
    # It will read data from /tmp/aroma-data/test.txt
    # then save it in variable
    setvar(
     "testvar",
     readtmpfile("test.txt")
    );

    read

    Descriptions:
    Read string from file in filesysten
    Sintax:

    content_of_file read(filename);
    Parameters:
    • filename - Absolute path to Destination file that will be readed
    Return Value: Content of file in String
    Examples:
    Code:
    # It will read data from /sdcard/test.txt
    # then save it in variable
    setvar(
     "testvar",
     read("/sdcard/test.txt")
    );

    ZIP CONTENT HANDLING FUNCTIONS

    readfile

    DEPRECATED!!! - Identical with zipread. Will be deleted soon.

    readfile_aroma

    DEPRECATED!!! - Identical with resread. Will be deleted soon.

    zipread

    Descriptions:
    Read string from file in zip
    Sintax:

    content_of_file zipread(zip_path);
    Parameters:
    • zip_path - Absolute path to Destination file in zip that will be readed
    Return Value: Content of file in String
    Examples:
    Code:
    # It will read data from zip content "META-INF/com/google/android/aroma/text.txt"
    # then save it in variable
    setvar(
     "testvar",
     zipread("META-INF/com/google/android/aroma/text.txt")
    );
    
    # It will read data from zip content "tmp/text.txt"
    # then save it in variable
    setvar(
     "testvar2",
     zipread("tmp/text.txt")
    );

    resread

    Descriptions:
    Read string from file in zip relatively from AROMA Resource Directory "META-INF/com/google/android/aroma/"
    Sintax:

    content_of_file resread(zip_path);
    Parameters:
    • zip_path - Relative path of file in Zip from AROMA Resource Directory "META-INF/com/google/android/aroma/" that will be readed
    Return Value: Content of file in String
    Examples:
    Code:
    # It will read data from zip content "META-INF/com/google/android/aroma/text.txt"
    # then save it in variable
    setvar(
     "testvar",
     resread("text.txt")
    );


    ZIP EXTRACT FUNCTIONS

    ziptotmp

    Descriptions:
    Extract file from zip content into AROMA Temporary directory, and automatically chmod it for executable.
    Sintax:

    void ziptotmp(zip_path, destination_name);
    Parameters:
    • zip_path - Absolute path to Destination file in zip that will be extracted
    • destination_name - Extracted target filename
    Return Value: none
    Examples:
    Code:
    # It will extract "tmp/busybox" into "/tmp/aroma-data/busybox"
    ziptotmp("tmp/busybox", "busybox");
    
    # Now we can execute it
    exec("/tmp/aroma-data/busybox","ls","-l");

    restotmp

    Descriptions:
    Extract file from zip content in AROMA Resource Directory "META-INF/com/google/android/aroma/" into AROMA Temporary directory, and automatically chmod it for executable.
    Sintax:

    void restotmp(zip_path, destination_name);
    Parameters:
    • zip_path - Relative path of file in Zip from AROMA Resource Directory "META-INF/com/google/android/aroma/" that will be extracted
    • destination_name - Extracted target filename
    Return Value: none
    Examples:
    Code:
    # It will extract "META-INF/com/google/android/aroma/busybox" into "/tmp/aroma-data/busybox"
    restotmp("busybox", "busybox");
    
    # Now we can execute it
    exec("/tmp/aroma-data/busybox","ls","-l");

    EXEC FUNCTIONS

    zipexec

    Descriptions:
    Extract file from zip into AROMA temporary, chmod it, and execute it.
    Sintax:

    exit_status zipexec(zip_path [, argument1, argument2, ... ]);
    Parameters:
    • zip_path - Absolute path of zip content that will be executed
    • arguments [Optional] - Command line Arguments
    Return Value: Return exit status. "0" for common success status
    The output buffer/stdout will be automatically saved into "exec_buffer"
    Examples:
    Code:
    # It will extract and run "META-INF/com/google/android/aroma/test.sh"
    zipexec("META-INF/com/google/android/aroma/test.sh");
    
    # With Arguments
    zipexec("META-INF/com/google/android/aroma/test.sh", "argument1", "argument2");
    
    # Get Return Status
    if
     zipexec("META-INF/com/google/android/aroma/test.sh") == "0"
    then
     alert(
     "Exec Status",
     "Shell was executed successfully"
     );
    endif;
    
    # Get STDOUT
    zipexec("META-INF/com/google/android/aroma/test.sh");
    alert(
     "Exec STDOUT",
     getvar("exec_buffer")
     );

    resexec

    Descriptions:
    Same as zipexec, but it will extract and run the file from zip relatively from AROMA Resource Directory "META-INF/com/google/android/aroma"
    Sintax:

    exit_status resexec(zip_path [, argument1, argument2, ... ]);
    Parameters:
    • zip_path - Relative path of zip content from AROMA Resource Directory "META-INF/com/google/android/aroma/" that will be executed
    • arguments [Optional] - Command line Arguments
    Return Value: Return exit status. "0" for common success status
    The output buffer/stdout will be automatically saved into "exec_buffer"
    Examples:
    Code:
    # It will extract and run "META-INF/com/google/android/aroma/test.sh"
    resexec("test.sh");
    
    # With Arguments
    resexec("test.sh", "argument1", "argument2");
    
    # Get Return Status
    if
     resexec("test.sh") == "0"
    then
     alert(
     "Exec Status",
     "Shell was executed successfully"
     );
    endif;
    
    # Get STDOUT
    resexec("test.sh");
    alert(
     "Exec STDOUT",
     getvar("exec_buffer")
     );


    run_program, exec

    Descriptions:
    Run executable from filesystem
    Sintax:

    exit_status run_program(path [, argument1, argument2, ... ]);
    exit_status exec(path [, argument1, argument2, ... ]);
    Parameters:
    • zip_path - Absolute path to executable
    • arguments [Optional] - Command line Arguments
    Return Value: Return exit status. "0" for common success status
    The output buffer/stdout will be automatically saved into "exec_buffer"
    Examples:
    Code:
    # It will run "ls" command
    run_program("/sbin/ls");
    
    # or
    exec("/sbin/ls");
    
    # With some Arguments
    run_program("/sbin/ls", "-l", "/sdcard");
    
    # Mounting Device
    exec("/sbin/mount", "-t", "auto", "/system");
    
    # Get Return Status
    if
     exec("/sbin/mount", "-t", "auto", "/system") == "0"
    then
     alert(
     "Exec Status",
     "Mount was executed successfully"
     );
    endif;
    
    # Get STDOUT
    exec("/sbin/ls", "-l", "/sdcard/*.zip");
    alert(
     "List of Zip in SDCARD",
     getvar("exec_buffer")
     );