script mistake HELP - HD2 Android Q&A, Help & Troubleshooting and Genera

what is the mistake. after install is mistake in aroma-config line 245
Code:
calibrate("1.1041","26","1.1616","16","yes");
ini_set("customkeycode_up", "115");
ini_set("customkeycode_down", "114");
ini_set("customkeycode_select", "231");
ini_set("customkeycode_menu", "139");
ini_set("customkeycode_back", "158");
setcolor("winbg", "#444");
setcolor("winbg_g", "#222");
setcolor("textbg", "#333");
setcolor("textfg", "#fff");
setcolor("textfg_gray", "#bbb");
setcolor("controlbg", "#444");
setcolor("controlbg_g", "#222");
setcolor("controlfg", "#fff");
setcolor("selectbg", "#653");
setcolor("selectbg_g", "#542");
setcolor("selectfg", "#ffd");
setcolor("titlebg", "#333");
setcolor("titlebg_g", "#000");
setcolor("titlefg", "#fff");
setcolor("navbg", "#333");
setcolor("navbg_g", "#222");
setcolor("border", "#666");
setcolor("border_g", "#444");
ini_set("rom_name", "Pixeldroid Navigation Install");
ini_set("rom_version", "copilot/iGO8");
ini_set("rom_author", "Pixelfreak");
ini_set("rom_device", "HTC HD2");
ini_set("rom_date", "July 2012");
splash(5000, "sample");
anisplash(5, "splash/a1", 30, "splash/a2", 30, "splash/a3", 30, "splash/a4", 30, "splash/a5", 30, "splash/a6", 30, "splash/a7", 30, "splash/a8", 30, "splash/a9", 30, "splash/a10", 30, "splash/a11", 30, "splash/a12", 30, "splash/a13", 30, "splash/a14", 30, "splash/a15", 30, "splash/a16", 30, "splash/a17", 30, "splash/a18", 30, "splash/a19", 30, "splash/a20", 30, "splash/a21", 30, "splash/a22", 30);
setvar("sdextsize", getdisksize("/sd-ext","m"));
fontresload( "0", "ttf/DroidSans.ttf;ttf/DroidSansArabic.ttf;ttf/DroidSansFallback.ttf;", "12" ); #-- Use sets of font (Font Family)
if prop("lang.prop","selected.0")=="1" then
loadlang("langs/en.lang");
fontresload( "0", "ttf/DroidSans.ttf", "12" ); #-- "0" = Small Font ( Look at Fonts & UNICODE Demo Below )
fontresload( "1", "ttf/DroidSans.ttf", "18" ); #-- "1" = Big Font
endif;
if prop("lang.prop","selected.0")=="2" then
loadlang("langs/de.lang");
fontresload( "0", "ttf/DroidSans.ttf", "12" );
fontresload( "1", "ttf/DroidSans.ttf", "18" );
endif;
selectbox(
#-- Title
"<~themes.title>",
#-- Sub Title
"<~themes.desc>",
#-- Icon: <AROMA Resource Dir>/icons/personalize.png or <ThemeDir>/icon.personalize.png
"@personalize",
#-- Will be saved in /tmp/aroma/theme.prop
"theme.prop",
"Generic", "<~uaromai>", 0, #-- selected.0 = 1
"MIUI Theme", "<~mtbmaz>", 0, #-- selected.0 = 2
"ICS Theme", "<~icsbdaz>", 1, #-- selected.0 = 3
"MIUI 4 Theme", "<~m4icstbazl>", 0, #-- selected.0 = 4
"Sense Theme", "<~htcstbaz>", 0 #-- selected.0 = 5
);
if prop("theme.prop","selected.0")=="2" then
theme("miui");
endif;
if prop("theme.prop","selected.0")=="3" then
theme("ics");
endif;
if prop("theme.prop","selected.0")=="4" then
theme("miui4");
endif;
if prop("theme.prop","selected.0")=="5" then
theme("sense");
endif;
#-- Show Textbox
textbox(
#-- Title
"<~ssi>",
#-- Subtitle
"<~csinfo>",
#-- Icon
"@info",
#-- Text
getvar("sysinfo")
);
selectbox(
"<~selectromsetup>",
"<~pleaseselectromsetupbelow>",
"icons/install",
"rom.prop",
"<~pleasepickyourrom>","",2,
"Tmous ROM Install",
"1024 MB",0,
"EU ROM Install",
"512 MB",1
);
checkbox(
"<~chooselastminuteaddons>",
"<~stoywi>",
"icons/apps",
"lastminute.prop",
"<~copilot>","<~copilotinfo>",0,
"<~igo>","<~igoinfo>",0
);
ini_set("text_next", "<~installnow>");
viewbox(
#-- Title
"<~rti>",
#-- Text
"<~twirtbi> \n\n"+
"<~press> <b><~installnow></b> <~romnameirti> \n\n"+
"<~iywtrocaoyisp><b><~back></b>. <~pmk> -> <~qitetw>",
#-- Icon
"@install"
);
ini_set("text_next", "<~nnext>");
restotmp("exec_demo/sleep","sleep");
setvar("retstatus",
install(
#-- Title
"<~installing>",
#-- Installation Process message
"<~pwwiwi><b>"+ini_get("rom_name")+
"</b>. <~tmtsm> <~pntc>",
#-- Installation Icon
"@install",
#-- Installation Finish Message
"<~tiwhsi><b>"+ini_get("rom_name")+
"</b>. <~pntc>"
)
);
ini_set("text_next", "<~finish>");
checkviewbox(
#-- Title
"<~installationcompleted>",
#-- Text
"<#selectbg_g><b><~congratulations></b></#>\n\n"+
"<b>"+ini_get("rom_name")+"</b><~hbioyd>\n\n"+
"<~installerstatus>"+getvar("retstatus")+"\n\n",
#-- Icon
"@welcome",
#-- Checkbox Text
"<~rydn>",
#-- Initial Checkbox value ( 0=unchecked, 1=checked ) - (Optional, default:0)
"1",
#-- Save checked value in variable "reboot_it" (Optional)
"reboot_it"
);
if
getvar("reboot_it")=="1"
then
reboot("disable");
endif;

Related

lineSetAppPriority doesn't seem to work...

For the program I posted here, I want to handle incoming calls before the default popup appears (to replace the ringtone).
Currently, my tool seems to be quick enough without lineSetAppPriority in most cases, but sadly not in all...
I was using the following code: (currently removed again, because it didn't work and even caused some troubles...)
Initialization:
Code:
if ( lineInitialize( &LineApp, theApp.m_hInstance, LineCallback,
theApp.m_pszAppName, &LineHandleCount ) == 0 )
{
LineHandles = new HLINE[LineHandleCount];
for(DWORD i = 0; i < LineHandleCount; i++)
{
if ( lineNegotiateAPIVersion( LineApp, i, 0x00010000, 0x00020000,
&ver, &extensionID ) == 0 )
{
rc = lineOpen( LineApp, i, &LineHandles[i], ver, 0, (DWORD)this,
LINECALLPRIVILEGE_MONITOR|LINECALLPRIVILEGE_OWNER,
LINEMEDIAMODE_INTERACTIVEVOICE, NULL );
if ( rc < 0 )
LineHandles[i] = NULL;
else
if ( LineHandleSignal == NULL )
LineHandleSignal = LineHandles[i];
}
}
HRESULT res = lineSetAppPriority( theApp.m_pszAppName,
LINEMEDIAMODE_INTERACTIVEVOICE,
NULL,
LINEREQUESTMODE_MAKECALL,
NULL, 1 );
}
Callback:
Code:
VOID FAR PASCAL LineCallback( DWORD hDevice,
DWORD dwMsg,
DWORD dwCallbackInstance,
DWORD dwParam1,
DWORD dwParam2,
DWORD dwParam3
)
{
if ( dwMsg == LINE_CALLSTATE )
{
LINECALLINFO *callInfo = (LINECALLINFO *)calloc(sizeof(LINECALLINFO)
+1024, 1);
callInfo->dwTotalSize = sizeof(LINECALLINFO)+1024;
lineGetCallInfo( (HCALL)hDevice, callInfo );
// different stuff...
HRESULT res;
// Remove from priority list, so lineHandoff will run the default
// call window
res = lineSetAppPriority( theApp.m_pszAppName,
LINEMEDIAMODE_INTERACTIVEVOICE, NULL,
LINEREQUESTMODE_MEDIACALL, NULL, 0 );
// Forward event to next instance (usually Windows' phone app)
lineHandoff( (HCALL)hDevice, NULL, callInfo->dwMediaMode );
// Set to top priority again
res = lineSetAppPriority( theApp.m_pszAppName,
LINEMEDIAMODE_INTERACTIVEVOICE, NULL,
LINEREQUESTMODE_MEDIACALL, NULL, 1 );
}
lineSetAppPriorty returns OK in all cases. But when a call comes in, the
default bubble applears simultaneously with the callback function. I
wanted it to be shown when I do the lineHandoff...
What am I doing wrong?
TIA,
Mirko
I used lineSetAppPriority too, with same result....
I think there is one way.....kill cprog

[FYI] [WM5] Undocumented RegQueryValueExW

Try this code without any RegOpenKey/RegCloseKey:
Code:
TCHAR userName[2048];
DWORD aSize = sizeof( userName );
DWORD aType = REG_SZ;
TCHAR *valName = _T( "Username" );
TCHAR *keyName = _T( "Ident" );
if ( RegQueryValueEx( HKEY_LOCAL_MACHINE, valName, (LPDWORD)keyName, &aType, (BYTE*)&userName, &aSize) == ERROR_SUCCESS )
_putws( userName );
Man states:
LONG RegQueryValueEx(
HKEY hKey,
LPCWSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);
[...]
lpReserved: [in] Reserved; set to NULL.
Click to expand...
Click to collapse
Brrrr.

[TOOL]Charged Notifcation Remover (Samsung Based)

Charged Notification Remover​
Description:
Made this little app a while ago but forgot to post it on the forums, basically it removes the battery charged notification from any Samsung based SystemUI.apk (deodexed of course). It may also work on SystemUI.apk files from other vendors, but I'm not sure
Requirements:
- Java (JRE OR JDK)
- SystemUI.apk
Instructions:
1. Unpack
2. Run Charged_Notifcation_Remover.exe
3. Choose the desired SystemUI.apk
4. Wait until the process is complete
5. Copy SystemUI.apk from the finished_apks folder to your sdcard
6. Copy SystemUI.apk from your sdcard to /system/app
7. Set permissions to RW-R-R
8. Reboot
Download:​
Download v1.0
http://www.mediafire.com/?7jahopdtvwnybe1
Since this app is open source, here are the sources:
Charged_Notifcation_Remover.au3
Code:
#include <Process.au3>
#include <File.au3>
$openfile = FileOpenDialog("Charged Notifcation Remover - Please choose a Samsung based SystemUI.apk", @WorkingDir, "APK Files (*.apk)", 1, "SystemUI.apk")
If @error Then
MsgBox(16, "Charged Notifcation Remover", "Aborted..")
Exit
Else
If FileExists(@ScriptDir & "\classes.dex") Then FileDelete(@ScriptDir & "\classes.dex")
If FileExists(@ScriptDir & "\out.dex") Then FileDelete(@ScriptDir & "\out.dex")
If FileExists(@ScriptDir & "\SystemUI.apk") Then FileDelete(@ScriptDir & "\SystemUI.apk")
If FileExists(@ScriptDir & "\SystemUI.zip") Then FileDelete(@ScriptDir & "\SystemUI.zip")
If FileExists(@ScriptDir & "\finished_apks\SystemUI.apk") Then FileDelete(@ScriptDir & "\finished_apks\SystemUI.apk")
If FileExists(@ScriptDir & "\finished_apks\SystemUI.zip") Then FileDelete(@ScriptDir & "\finished_apks\SystemUI.zip")
FileCopy($openfile, @ScriptDir & "\SystemUI.apk")
EndIf
DirRemove(@ScriptDir & "\dexout", 1)
If FileExists(@ScriptDir & "\finished_apks\SystemUI.apk.backup") Then FileDelete(@ScriptDir & "\finished_apks\SystemUI.apk.backup")
FileCopy(@ScriptDir & "\SystemUI.apk", @ScriptDir & "\finished_apks\SystemUI.apk.backup")
SplashTextOn("Charged Notifcation Remover", "Status: Making backup...", 250, 40, -1, -1, 4, "Verdana", 10, 400)
Sleep(100)
FileDelete(@TempDir & "\results.txt")
Func _StringSearchInFile($file, $qry)
_RunDos("find /n /i """ & $qry & """ " & $file & " >> " & @TempDir & "\results.txt")
If Not @error Then
FileSetAttrib(@TempDir & "\results.txt", "-N+H+T", 0)
$CHARS = FileGetSize(@TempDir & "\results.txt")
Return FileRead(@TempDir & "\results.txt", $CHARS) & @CRLF
EndIf
EndFunc ;==>_StringSearchInFile
SplashTextOn("Charged Notifcation Remover", "Status: Extracting...", 250, 40, -1, -1, 4, "Verdana", 10, 400)
Sleep(100)
RunWait(@ScriptDir & "\extract.bat", "", @SW_HIDE)
SplashTextOn("Charged Notifcation Remover", "Status: Deodexing...", 250, 40, -1, -1, 4, "Verdana", 10, 400)
RunWait(@ScriptDir & "\deodex.bat", "", @SW_HIDE)
FileDelete(@TempDir & "\results.txt")
SplashTextOn("Charged Notifcation Remover", "Status: Determine lines...", 250, 40, -1, -1, 4, "Verdana", 10, 400)
$search1 = _StringSearchInFile(@ScriptDir & "\dexout\com\android\systemui\statusbar\policy\StatusBarPolicy.smali", "Landroid/app/NotificationManager;->notify(ILandroid/app/Notification;)V")
$readfirst = FileReadLine(@TempDir & "\results.txt", 3)
$readchars1 = StringLeft($readfirst, 5)
$startline = StringRight($readchars1, 4)
ConsoleWrite($startline & @CRLF)
FileDelete(@TempDir & "\results.txt")
$search2 = _StringSearchInFile(@ScriptDir & "\dexout\com\android\systemui\statusbar\policy\StatusBarPolicy.smali", "Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->turnOnScreenWithForce()V")
$readsecond = FileReadLine(@TempDir & "\results.txt", 3)
$readchars2 = StringLeft($readsecond, 5)
$endline = StringRight($readchars2, 4)
$linecount = $endline - $startline
;~ FileDelete(@TempDir&"\results.txt")
$linecount = $endline - $startline
ConsoleWrite($linecount)
If $linecount > 12 Or $linecount < 8 Then
MsgBox(16, "Error", "Charged Notification lines are not found" & @CRLF & @CRLF & "Possible Reasons:" & @CRLF & "- No Samsung SystemUI.apk" & @CRLF & "- Already removed the charged notification")
Exit
Else
SplashTextOn("Charged Notifcation Remover", "Status: Deleting Line: " & $startline & "...", 250, 40, -1, -1, 4, "Verdana", 10, 400)
_FileWriteToLine(@ScriptDir & "\dexout\com\android\systemui\statusbar\policy\StatusBarPolicy.smali", $startline, " ", 1)
Sleep(500)
SplashTextOn("Charged Notifcation Remover", "Status: Deleting Line: " & $endline - 3 & "...", 250, 40, -1, -1, 4, "Verdana", 10, 400)
_FileWriteToLine(@ScriptDir & "\dexout\com\android\systemui\statusbar\policy\StatusBarPolicy.smali", $endline - 3, " ", 1)
Sleep(500)
SplashTextOn("Charged Notifcation Remover", "Status: Deleting Line: " & $endline & "...", 250, 40, -1, -1, 4, "Verdana", 10, 400)
_FileWriteToLine(@ScriptDir & "\dexout\com\android\systemui\statusbar\policy\StatusBarPolicy.smali", $endline, " ", 1)
Sleep(500)
EndIf
SplashTextOn("Charged Notifcation Remover", "Status: Compiling classes.dex...", 250, 40, -1, -1, 4, "Verdana", 10, 400)
RunWait(@ScriptDir & "\compile.bat", "", @SW_HIDE)
Sleep(100)
DirRemove(@ScriptDir & "\dexout", 1)
SplashTextOn("Charged Notifcation Remover", "Status: Updating SystemUI.apk...", 250, 40, -1, -1, 4, "Verdana", 10, 400)
RunWait(@ScriptDir & "\addfiles.bat", "", @SW_HIDE)
Sleep(100)
SplashTextOn("Charged Notifcation Remover", "Status: Moving..", 250, 40, -1, -1, 4, "Verdana", 10, 400)
Sleep(100)
SplashTextOn("Charged Notifcation Remover", "Status: Done!", 250, 40, -1, -1, 4, "Verdana", 10, 400)
Sleep(500)
SplashOff()
ShellExecute(@ScriptDir & "\finished_apks", "", "", "open", @SW_SHOW)
MsgBox(0, "Removed Charged Notification", "Thanks for using this tool, coded by: broodplank1337 @ XDA")
Exit
extract.bat
Code:
@echo off
cd /d %~dp0
move SystemUI.apk SystemUI.zip
7za.exe x -y SystemUI.zip *.dex
deodex.bat
Code:
@echo off
cd /d %~dp0
java -jar baksmali-1.3.2.jar -o dexout/ classes.dex
addfiles.bat
Code:
@echo off
cd /d %~dp0
move out.dex classes.dex
7za.exe u SystemUI.zip classes.dex
move SystemUI.zip finished_apks/SystemUI.apk
del classes.dex

[TUTORIAL] Comprehensive Guide for AROMA Installer For Beginners!! | 27/08/13

Comprehensive Guide for Beginners to Create AROMA Installer Packages
Hello Friends, We all are aware about the most powerful Android recovery based installer..
Aroma Installer has simplified our ROMs, made them highly customisable n interactive too
This guide will help you to learn to create beautiful, interactive n customisable AROMA Installer Packages for your ROM n Mods
PRE-REQUISITES
A PC for making scripts
A ROM/Mod for which you want to make AROMA Installer
NotePad++ software for editing Installer files
A phone with CWM/TWRP recovery for Testing your AROMA Installer zip
7z or WinRAR or any other compressing tool for making zip
A creative mind n some basic knowledge of using a computer
Click to expand...
Click to collapse
So Lets Start your journey now!
1.) SETTING UP
Download this zip
n extract it in the folder where your ROM or Mod is present
So that it will look like this--
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Click to expand...
Click to collapse
2.) BASIC EDITING
Now lets start, Go to this directory- META-INF\com\google\android\
We are interested in editing "aroma-config" n "updater-script" only
First of all open aroma-config in NotePad++
You will be able to see a window like this--
A. SETTING UP SCREEN RESOLUTION
Now the very first thing we are going to do is to declare our screen resolution for the AROMA Installer
Remove the "# " from the front of the line according to your screen resolution
For Example my device is 320x480, so this is for me--
Code:
# ini_set("dp","1"); #-- LDPI ( 240x320 / QVGA )
ini_set("dp","2"); #-- MDPI ( 320x480 / HVGA )
# ini_set("dp","3"); #-- HDPI ( 480x800 / WVGA )
# ini_set("dp","4"); #-- XHDPI ( 1280x720 / WVGA )
# ini_set("dp","5"); #-- XXHDPI ( 1920x1080 / WVGA )
Optional- You may remove the other unused strings from the above code
-> NOW YOU HAVE SUCCESSFULLY DECLARED YOUR SCREEN RESOLUTION, WHICH CAN BE INTERPRETED BY THE INSTALLER!
Click to expand...
Click to collapse
B. SETTING UP BASIC DETAILS
The next thing we are going to declare is our ROM/Mod name, date, device name and version
You will be able to find this code inside your aroma-config
Code:
ini_set("rom_name", "YOUR ROM NAME HERE™ ");
ini_set("rom_version", "YOUR VERSION");
ini_set("rom_author", "YOUR NAME");
ini_set("rom_device", "YOUR DEVICE NAME");
ini_set("rom_date", "25/8/2013 - DATE OF YOUR MOD");
Edit it according to your ROM/Mod detail, Fill the respective details inside the above " ");
-> NOW YOU HAVE SUCCESSFULLY DECLARED YOUR ROM/MOD NAME N OTHER RELEVANT DETAILS
Click to expand...
Click to collapse
C. SHOWING A DISPLAY IMAGE
Now to make our Installer beautiful we will add a png image which will be displayed when a user will start the installer
You will be able to find this code inside your aroma-config
Code:
# Show Simple Splash
#
splash(
#-- Duration 5000ms / 5 seconds
5000,
#-- <AROMA Resource Dir>/SPLASH.png
"SPLASH"
);
This will display SPLASH.png for 5 seconds, you can edit the no of seconds the image should be displayed
Edit 5000 to the no the seconds you want
For 1 Second- 1000
2 Seconds- 2000
n so on
The image to be displayed is located in the folder- META-INF\com\google\android\aroma
Here you can find the SPLASH.png , replace it with yours, remember that it should be of the same resolution as that of your device
also it must be of .png format only
-> NOW YOU HAVE SUCCESSFULLY ADDED A DISPLAY IMAGE FOR YOUR AROMA INSTALLER MOD
Click to expand...
Click to collapse
D. SHOWING ANIMATION AS AFTER DISPLAY IMAGE (Optional)
You can also add an animation to your AROMA Installer package
You will be able to find this code inside your aroma-config
Code:
##
# Show Animated Splash
#
anisplash(
# #-- Number of Loop
4,
#-- Frame [ Image, duration in millisecond ]
"anim/a1", 30,
"anim/a2", 30,
"anim/a3", 30,
"anim/a4", 30,
"anim/a5", 30,
"anim/a6", 30
);
Here png a1 to a6 will be displayed for 30 millisecond each for 4 times (number of loop is 4)
You can also edit Number of Loop to any desired number
Here it is 4, edit as per your desire
The images which will be displayed are in META-INF\com\google\android\aroma\anim folder
Replace the pngs with your pngs
NOTE: If you dont want animated splash, delete the above code from your aroma-config
-> NOW YOU HAVE SUCCESSFULLY CREATED THE ANIMATION TO BE DISPLAYED BEFORE INSTALLER STARTS
Click to expand...
Click to collapse
E. FONT SELECTION CODE (No need to edit)
This CODE is for language selection dialogue in the installer
Code:
##
# Font Selection
#
endif;
This will look like below in AROMA Installer
Click to expand...
Click to collapse
F. WINDOW FOR SELECTING THE INSTALLER THEME
Now we will create a window to Select theme to be used while installation of the ROM/Mod
Scroll n find this code in aroma-config
Code:
##
# SELECT THEME
#
selectbox(
#-- Title
"<~themes.title>",
#-- Sub Title
"<~themes.desc>",
#-- Icon:
"@personalize",
#-- Will be saved in /tmp/aroma/theme.prop
"theme.prop",
"Generic", "Unthemed AROMA Installer", 0, #-- selected.0 = 1
"MIUI Theme", "MIUI Theme by mickey-r & amarullz", 0, #-- selected.0 = 2
"NXT Theme", "NXT Theme by Pranav Pandey", 0, #-- selected.0 = 3
"NextGen Theme", "NextGen Theme by amarullz edit by Ayush", 0, #-- selected.0 = 4
"Sense Theme", "HTC Sense Theme by amarullz", 0, #-- selected.0 = 5
"Honami Theme", "Xperia i1 Theme by Ayush", 1 #-- selected.0 = 6
);
The type of window used is of selectbox attribute, Which means that only one out of the above Themes can be selected at a time
Here theme.prop is the temporary file in which user selection will be stored
Here Honami Theme has initial value 1 which means that It is selected by default,
(1 stands for Selected n 0 stands for Unselected)
NOTE: The last string has no comma "," after its initial value, Its not a typo
The above themes are already included in the package, you can find the stored themes in the directory- META-INF\com\google\android\aroma\themes
and also edit them as per your desire, edit them only if you have knowledge of .png n .9.png editing
otherwise included themes are perfect according to me
Now scroll n find this CODE in aroma-config
Code:
##
# SET THEME
#
if prop("theme.prop","selected.0")=="2" then
theme("miui");
endif;
if prop("theme.prop","selected.0")=="3" then
theme("xNXT");
endif;
if prop("theme.prop","selected.0")=="4" then
theme("NextGen");
endif;
if prop("theme.prop","selected.0")=="5" then
theme("sense");
endif;
if prop("theme.prop","selected.0")=="6" then
theme("i1");
endif;
No need to edit this, it is already perfect, it declares the Theme selection
This is how it looks like in AROMA Installer
-> NOW YOU HAVE SUCCESSFULLY CREATED A WINDOW TO SHOW AVAILABLE THEME SELECTIONS
Click to expand...
Click to collapse
G. SHOW BASIC INFORMATION
Now we will create a window to display the ROM/Mod information before installation
Scroll n find this code-
Code:
##
# SHOW ROM/Mod INFORMATION
#
viewbox(
#-- Title
"<~welcome.title>",
#-- Text
"<~welcome.text1> <b>"+
#-- Get Config Value
ini_get("rom_name")+
"</b> <~common.for> <b>"+ini_get("rom_device")+"</b>.\n\n"+
"<~welcome.text2>\n\n"+
" <~welcome.version>\t: <b><#selectbg_g>"+ini_get("rom_version")+"</#></b>\n"+
" <~welcome.codename>\t\t: <b><#selectbg_g> </#></b>\n"+
" <~welcome.updated>\t: <b><#selectbg_g>"+ini_get("rom_date")+"</#></b>\n\n\n"+
"<~welcome.next>",
#-- Icon
"@welcome"
);
No need to edit this code, It is already perfect
Here the window is of viewbox attribute, we have just the back and next button in the window
This is how it will look in the installer
-> NOW YOU HAVE SUCCESSFULLY CREATED A WINDOW TO DISPLAY ROM/MOD INFORMATION IN THE INSTALLER
Click to expand...
Click to collapse
H. LICENSE WINDOW (Optional)
Now we will create a window for displaying License/Terms n Conditions of using the ROM/Mod
Scroll n find this Code-
Code:
##
# LICENSE
#
agreebox(
#-- Title
"YOUR ROM/Mod NAME™ T&C",
#-- Subtitle / Description
"Read Carefully",
#-- Icon:
"@license",
#-- Text Content
resread("license.txt"),
#-- Checkbox Text
"Do you agree??",
#-- Unchecked Alert Message
"You've to agree!!"
);
Edit the title "YOUR ROM/Mod NAME™ T&C", to your ROM/Mod name
The license which is displayed is stored in directory- META-INF\com\google\android\aroma
You can edit the license.txt as per your ROM/Mod needs
If you don't want the license window delete the above code
This is how it will look in the installer
-> NOW YOU HAVE SUCCESSFULLY CREATED A WINDOW WHICH WILL DISPLAY LICENSE
Click to expand...
Click to collapse
I. CREATING MAIN MENU
Now we will create a window for menu of options available in our ROM/Mod
Scroll and find this code-
Code:
##
# MAIN MENU- INSTALLER n MISC
#
menubox(
#-- Title
"ROM/MOD NAME™ Menu",
#-- Sub Title
"Please select from the Menu Below to Modify the required features",
#-- Icon
"@apps",
#-- Will be saved in /tmp/aroma/menu.prop
"menu.prop",
#-------------------------+-----------------[ Menubox Items ]-------------------------+---------------#
# TITLE | SUBTITLE | Item Icons #
#-------------------------+-----------------------------------------------------------+---------------#
"Custom Installation", "ROM Installation with Various Features", "@install", #-- selected = 1
"System Info", "Get and show device/partition informations", "@info", #-- selected = 2
"ChangeLog", "ROM/Mod ChangeLog", "@agreement", #-- selected = 3
"Quit Install", "Leave Setup :(", "@install" #-- selected = 4
);
Edit the title above as per your ROM/Mod name
The selection made by user in the above window will be stored in a temporary file- menu.prop
I have added only 4 options in the menu which I Recommend, You may remove any of the above string only if you have proper knowledge
This is how it looks in Installer-
-> NOW YOU HAVE SUCCESSFULLY CREATED THE MAIN MENU OF YOUR INSTALLER
Click to expand...
Click to collapse
I.1-> The first option is for Installer sub window, we will create it later
I.2-> the second option is for Displaying system information,
I.3-> the third option is for Displaying Changelog of Mod/ROM,
I.4-> the fourth option is for Exiting the installer
I.2- SYSTEM INFORMATION
Now lets create the sub window for Displaying system information
Scroll down n find this code in aroma-config-
Code:
##
# System Info
#
if prop("menu.prop","selected")=="2" then
#-- Show Please Wait
pleasewait("Getting System Information...");
#-- Fetch System Information
setvar(
#-- Variable Name
"sysinfo",
#-- Variable Value
"<@center><b>Your Device System Information</b></@>\n\n"+
"Device Name\t\t: <#469>YOUR DEVICE NAME</#>\n"+
"Board Name\t\t: <#469>YOUR MODEL NAME</#>\n"+
"Manufacturer\t\t: <#469>YOUR MANUFACTURER</#>\n"+
"\n"+
"System Size\t\t: <b><#selectbg_g>"+getdisksize("/system","m")+" MB</#></b>\n"+
"\tFree\t\t: <b><#selectbg_g>"+getdiskfree("/system","m")+" MB</#></b>\n\n"+
"Data Size\t\t: <b><#selectbg_g>"+getdisksize("/data","m")+" MB</#></b>\n"+
"\tFree\t\t: <b><#selectbg_g>"+getdiskfree("/data","m")+" MB</#></b>\n\n"+
"SDCard Size\t\t: <b><#selectbg_g>"+getdisksize("/sdcard","m")+" MB</#></b>\n"+
"\tFree\t\t: <b><#selectbg_g>"+getdiskfree("/sdcard","m")+" MB</#></b>\n\n"+
""
);
#-- Show Textbox
textbox(
#-- Title
"System Information",
#-- Subtitle
"Current system Information on your Xperia MDPI",
#-- Icon
"@info",
#-- Text
getvar("sysinfo")
);
#-- Show Alert
alert(
#-- Alert Title
"Finished",
#-- Alert Text
"You will be back to Menu",
#-- Alert Icon
"@alert"
);
#-- Back to Menu ( 2 Wizard UI to Back )
back("2");
endif;
Here the command for displaying system information is under this argument
if prop("menu.prop","selected")=="2" then
..
..
endif;
Since this is the second option in menu window, that's why we have =="2" here
Edit these fields as per your requirements
"Device Name\t\t: <#469>YOUR DEVICE NAME</#>\n"+
"Board Name\t\t: <#469>YOUR MODEL NAME</#>\n"+
"Manufacturer\t\t: <#469>YOUR MANUFACTURER</#>\n"+
Rest of the code is fine, no other editing is required
This is how it looks in Installer
-> NOW YOU HAVE SUCCESSFULLY ADDED A WINDOW FOR DISPLAYING SYSTEM INFORMATION
Click to expand...
Click to collapse
I.3- DISPLAY CHANGELOG
Now we will create a popup for Displaying changelog of the ROM/Mod
Scroll n find this code in aroma-config
Code:
##
# CHANGELOG DISPLAY
#
if prop("menu.prop","selected")=="3" then
#-- TextDialog
textdialog(
#-- Title
"YOUR ROM NAME Changelog",
#-- Text
resread("changelog.txt"),
#-- Custom OK Button Text (Optional)
"Close"
);
#-- Back to Menu ( 2 Wizard UI to Back )
back("1");
endif;
Here the command for displaying system information is under this argument
if prop("menu.prop","selected")=="3" then
..
..
endif;
Since this is the third option in menu window, that's why we have =="3" here
Edit the title as per your ROM/Mod name
The changelog file is stored in the directory- META-INF\com\google\android\aroma
Edit changelog.txt as per your ROM/Mod changelog
This is how it looks in Installer
-> NOW YOU HAVE SUCCESSFULLY CREATED A POPUP FOR DISPLAYING CHANGELOG
Click to expand...
Click to collapse
I.4- EXIT POPUP
Now we will create a dialogue for exiting the installer
Scroll n find this code in aroma-config
Code:
##
# QUIT INSTALLER
#
if prop("menu.prop","selected")=="4" then
#-- Exit
if
confirm(
#-- Title
"Exit",
#-- Text
"Are you sure want to exit the Installer?",
#-- Icon (Optional)
"@alert"
)=="yes"
then
#-- Exit
exit("");
endif;
endif;
Here the command for displaying system information is under this argument
if prop("menu.prop","selected")=="4" then
..
..
endif;
Since this is the fourth option in menu window, that's why we have =="4" here
This is how it looks in Installer
-> NOW YOU HAVE SUCCESSFULLY CREATED A DIALOGUE BOX FOR EXITING THE INSTALLER
Click to expand...
Click to collapse
CONGRATULATIONS! YOU HAVE CREATED ALL BASIC WINDOWS REGARDING THE INSTALLATION PROCESS!
NOW I WILL TEACH YOU TO CREATE THE ADVANCED INSTALLATION SUB WINDOWS (I.1) IN NEXT POST
Click to expand...
Click to collapse
I.1- CREATING DIFFERENT TYPES OF SUB WINDOWS
Now Lets create a sub window to be displayed when the first option of the Menu is selected in the Installer
Scroll n Find this code
Code:
##
# Select Type of Install
#
if prop("menu.prop","selected")=="1" then
Since this is the first option in menu window, that's why we have =="1" here
I.1.1 SELECT BOX SUB WINDOW
Now Scroll down and find this Code-
Code:
##
# Sub Window 1
#
selectbox(
#-- Title
"TITLE 1",
#-- Sub Title
"SUB TITLE 1",
#-- Icon:
"icons/install",
#-- Will be saved in /tmp/aroma/window1.prop
"window1.prop",
#----------------------------------[ Selectbox With Groups ]-----------------------------------#
# TITLE | SUBTITLE | Initial Value #
#------------------+-----------------------------------------------------------+---------------#
"Select One", "", 2, #-- Group 1. key = "selected.1"
"OPTION 1", "OPTION 1 DESCRIPTION", 0, #-- selected.1 = 1
"OPTION 2", "OPTION 2 DESCRIPTION", 1 #-- selected.1 = 2
#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#
);
The type of window used is of selectbox attribute, Which means that only one out of the above Option can be selected at a time
Edit the TITLE, SUBTITLE, OPTION 1 and OPTION 2 as well as their DESCRIPTION as per your requirement
Here OPTION 2 has initial value 1 which means that It is selected by default,
(1 stands for Selected n 0 stands for Unselected)
NOTE: The last string has no comma "," after its initial value, Its not a typo
Method to add new Option--
Add this--
Code:
"OPTION 3", "OPTION 3 DESCRIPTION", 0 #-- selected.1 = 3
Note that if this is your 3rd Option then then in 2nd option add "," after its initial value
So after adding new option this is how it looks on Text Editor
And this is how it looks in Installer
-> SUB WINDOW 1 HAS BEEN SUCCESSFULLY CREATED
So now lets create sub window 2
Now Scroll down and find this Code-
Code:
##
# Sub Window 2
#
selectbox(
#-- Title
"TITLE 2",
#-- Sub Title
"SUB TITLE 2",
#-- Icon:
"@default",
#-- Will be saved in /tmp/aroma/window2.prop
"window2.prop",
#----------------------------------[ Selectbox With Groups ]-----------------------------------#
# TITLE | SUBTITLE | Initial Value #
#------------------+-----------------------------------------------------------+---------------#
"Select One", "", 2, #-- Group 1. key = "selected.1"
"OPTION 1", "OPTION 1 SUBTITLE", 1, #-- selected.1 = 1
"OPTION 2", "OPTION 2 SUBTITLE", 0, #-- selected.1 = 2
"OPTION 3", "OPTION 3 SUBTITLE", 0, #-- selected.1 = 3
"OPTION 4", "OPTION 4 SUBTITLE", 0 #-- selected.1 = 4
#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#
);
The type of window used is of selectbox attribute, Which means that only one out of the above Option can be selected at a time
Edit the TITLE, SUBTITLE, OPTIONS as well as their DESCRIPTION as per your requirement
Here OPTION 1 has initial value 1 which means that It is selected by default,
(1 stands for Selected n 0 stands for Unselected)
NOTE: The last string has no comma "," after its initial value, Its not a typo
NOTE: The same method as described above is to be used to create more options
And this is how it looks in Installer
NOTE: If you just want a single sub window, delete the entire code for sub window 2
NOTE: If you want to add a new sub window, add the above code again but edit some values as listed below-
TITLE, SUBTITLE, OPTIONS as well as their DESCRIPTION as per your requirement
Also edit "window2.prop", to "window3.prop",
NOTE: The same method as described above is to be used to create more options
-> SUB WINDOW 2 HAS BEEN SUCCESSFULLY CREATED
NOW I ASSUME THAT YOU HAVE SUCCESSFULLY LEARNT TO CREATE THE SUB WINDOWS of selectbox attribute,
RE READ THE CODE AGAIN TO DEVELOP MORE UNDERSTANDING,
IF THIS IS YOUR FIRST TIME IT MIGHT TAKE SOME TIME TO FIGURE OUT THINGS, BUT ITS NEITHER TOO DIFFICULT
Click to expand...
Click to collapse
I.1.2- CREATING CHECKBOX SUB WINDOW
NOW WE SHALL LEARN TO CREATE A CHECKBOX BASED SUB WINDOW FROM WHICH WE CAN SELECT MORE THAN ONE OPTION
Scroll and find this code in aroma-config-
Code:
##
# Sub Window with CheckBoxes
#
checkbox(
# Title
"TITLE OF CHECKBOX",
# Sub Title
"SUB TITLE OF CHECKBOX HERE",
# Icon
"@update",
# Will be saved in /tmp/aroma/checkbox1.prop
"checkbox1.prop",
#----------------------------------[ Selectbox With Groups ]-----------------------------------#
# TITLE | SUBTITLE | Initial Value #
#------------------+-----------------------------------------------------------+---------------#
"AVAILABLE OPTIONS", "", 2, #-- group 1
"I AM A REAL DEV", "IF YOU ARE THE REAL DEVELOPER", 1, #-- item.1.1
"I AM A NOOBS", "IF YOU ARE THE REAL NOOBS", 0, #-- item.1.2
"I AM XDA-DEVELOPERS","IF YOU HAVE AN ACCOUNT IN XDA-DEVELOPERS.COM", 0, #-- item.1.3
"YOUR PROJECTS", "", 2, #-- Group 2
"CUSTOM ROM", "IF YOU MADE A CUSTOM ROM", 1, #-- item.2.1
"CUSTOM TROLL", "IF YOU POST MANY TROLLS IN FORUM", 0 #-- item.2.2
#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#
);
The type of window used is of checkbox attribute, Which means that only one out of the above Option can be selected at a time
Edit the TITLE, SUBTITLE, THE OPTIONS VALUE, AND THE OPTIONS' DESCRIPTION as per your requirement
Here item.1.1 and item.2.1 has initial value 1 which means that It is selected by default,
(1 stands for Selected n 0 stands for Unselected)
NOTE: The last string has no comma "," after its initial value, Its not a typo
NOTE: If you want to create a new item add this string
Code:
"CUSTOM TROLL 2", "IF YOU BLAH BLAH", 0 #-- item.2.3
Note that if this is your 3rd item in 2nd Group, so now add "," after item.2.2's initial value
So after adding new option this is how it looks on Text Editor
And this is how it looks in Installer
NOTE: If you dont want a sub window with checkboxes, delete the above code
NOTE: If you want to add a new sub window with checkboxes, add the above code again but edit some values as listed below-
TITLE, SUBTITLE, OPTIONS as well as their DESCRIPTION as per your requirement
Also edit "checkbox1.prop", to "checkbox2.prop",
NOTE: The same method as described above is to be used to create more options
-> SUB WINDOW WITH CHECKBOXES HAS BEEN SUCCESSFULLY CREATED
NOW I ASSUME THAT YOU HAVE SUCCESSFULLY LEARNT TO CREATE THE SUB WINDOWS of checkbox attribute,
RE READ THE CODE AGAIN TO DEVELOP MORE UNDERSTANDING,
IF THIS IS YOUR FIRST TIME IT MIGHT TAKE SOME TIME TO FIGURE OUT THINGS, BUT ITS NEITHER TOO DIFFICULT
Click to expand...
Click to collapse
Click to expand...
Click to collapse
Now I am going to teach you some additional optional commands
1- ALERT BOX
Scroll and Find this Code-
Code:
##
# Alert Window
#
alert( "Attention", "PLACE YOUR TEXT HERE");
This code is for creating additional popup alert
Edit the text to be displayed as per your desire
If you don't want alert popup simply delete the Code above
This is how it looks in Installer
-> NOW YOU HAVE SUCCESSFULLY CREATED A POPUP ALERT BOX
2. PRE INSTALLATION UI
Now scroll and find this code-
Code:
# Installation UI
ini_set("text_next", "Install Now");
ini_set("icon_next", "@installbutton");
viewbox(
#-- Title
"Ready to Install",
#-- Text
"ROM is ready to be installed.\n\n"+
"Press <b>Install</b> to begin the installation.\n\n"+
"To review or change any of your installation settings, press <b>Back</b>.\n\n"+
"Press Menu -> Quit Installation to quit.",
#-- Icon
"@install"
);
This is to create a window just before installation process starts
If you don't want Pre installation window simply delete the Code above,
This is how it looks in Installer
Now you have successfully learnt to create the above Optional windows n popups
These are the two Optional windows which are frequently used in the Installer to make it more Interactive
Click to expand...
Click to collapse
Now scroll and find this code just below the Installation UI Window
Code:
endif;
REMEMER DONT DELETE THE "endif;" It is in the continuation from the above "if prop("menu.prop","selected")=="1" then" code
Now comes the last and Important window for Installer
Scroll and find this code in aroma-config-
Code:
##
# INSTALLATION PROCESS
#
if prop("menu.prop","selected")== "1"
then
ini_set("text_next", "Next");
ini_set("icon_next", "@next");
install(
"YOUR ROM/Mod NAME™ Installation",
getvar("rom_name") + "\n" +
"Please wait while this ROM blows up your device :P" +
"",
"icons/install"
);
ini_set("text_next", "Finish");
ini_set("icon_next", "@finish");
checkviewbox(
#-- Title
"Installation Completed",
#-- Text
"<#selectbg_g><b>Congrats...</b></#>\n\n"+
"<b>"+ini_get("rom_name")+"</b> has been installed into your device.\n\n",
#-- Icon
"@welcome",
#-- Checkbox Text
"Reboot your device now.",
#-- Initial Checkbox value ( 0=unchecked, 1=checked ) - (Optional, default:0)
"1",
#-- Save checked value in variable "reboot_it" (Optional)
"reboot_it"
);
endif;
###
# Check if reboot checkbox was checked
if
getvar("reboot_it")=="1"
then
#
# reboot("onfinish"); - Reboot if anything finished
# reboot("now"); - Reboot Directly
# reboot("disable"); - If you set reboot("onfinish") before, use this command to revert it.
#
reboot("onfinish");
endif;
This is the code for creating an Installation Progress and logs User Interface and the Reboot Now Option
Edit this string in above code to your ROM/Mod name
"YOUR ROM/Mod NAME™ Installation",
Rest of all the code is fine
This is how it looks like in Installer
Click to expand...
Click to collapse
Now save the file aroma-config with Ctrl+S or save button
Click to expand...
Click to collapse
NOW YOU HAVE SUCCESSFULLY CREATED THE AROMA-CONFIG FILE FOR INSTALLER
THIS WAS ALL ABOUT CREATING THE AROMA INSTALLER USER INTERFACE...
I HAVE COVERED ALL THE FREQUENTLY USED COMMANDS IN THE TUTORIAL
THANKS TO @amarullz FOR WONDERFUL AROMA INSTALLER
IF ANY DOUBTS/ERRORS POST THEM HERE
IN THE NEXT POST WE ARE GOING TO LEARN ABOUT UPDATER-SCRIPT CORRESPONDING TO THE AROMA-CONFIG
​
Tutorial for updater-script corresponding to the aroma-config
In this tutorial we are going to learn about creating updater script corresponding to the Aroma config we have created
This part is very easy indeed if you have read all my aroma-config guide
So the very first thing you have to do manually is to take a update-binary from any custom rom/mod from your device forum...
You can find update-binary in this directory- meta-inf\com\google\android\
replace it with custom update-binary so that your installer will not give errors while installing the mod/rom
Click to expand...
Click to collapse
1.) understanding the basics
so now lets start, open the updater-script file located in the directory- meta-inf\com\google\android\ in notepad++
scroll and find this code-
Code:
if
file_getprop("/tmp/aroma-data/menu.prop","selected") == "1"
then
so now you know why "menu.prop" was declared there in aroma-config
the == "1" signifies here that the we are now going to define the sub windows inside the first option of menu.prop
now edit this code to your mod/rom name
Code:
ui_print("-> installing rom/mod name");
scroll and find this code-
Code:
ui_print("-> mounting system...");
run_program("/sbin/busybox", "mount", "/system");
this is for mounting the system partition so that you can add/delete files from system partition
Click to expand...
Click to collapse
2.) Defining the sub windows
Now we will define the coding for working of sub menus we created in aroma-config
2.1.) For sub window 1
Scroll and find this code-
Code:
if
file_getprop("/tmp/aroma/window1.prop","selected.1") == "1"
then
ui_print("-> installing option 1...");
package_extract_dir("aroma/window1/option1", "/system");
endif;
edit the ui_print("-> installing option 1..."); string as per your rom/mod option you defined in aroma-config
now place your option 1 customisation app to the folder aroma\window1\option1\app
if it is a framework folder file, place it to aroma\window1\option1\framework folder
now use have successfully defined option1 for the window 1
repeat the same for option 2, and for 3,4.... If you have created them also
now you might have learnt how to define the corresponding options for mods/rom sub window 1 you created in aroma-config
2.2.) For sub window 2
now scroll and find this code-
Code:
if
file_getprop("/tmp/aroma/window2.prop","selected.1") == "1"
then
ui_print("-> installing option 1...");
package_extract_dir("aroma/window2/option1", "/system");
endif;
edit the ui_print("-> installing option 1..."); string as per your rom/mod option you defined in aroma-config
now place your option 1 customisation app to the folder aroma\window1\option2\app
if it is a framework folder file, place it to aroma\window1\option2\framework folder
now use have successfully defined option1 for the window 2
repeat the same for option 2, and for 3,4.... If you have created them also
now you might have learnt how to define the corresponding options for mods/rom sub window 2 you created in aroma-config
2.3.) for check box sub window
scroll and find this code-
Code:
if
file_getprop("/tmp/aroma/checkbox1.prop","item.1.1") == "1"
then
ui_print("-> installing item 1.1 ");
package_extract_dir("aroma/checkbox1/item-1.1", "/system");
endif;
edit the ui_print("-> installing item 1.1 "); string as per your rom/mod option you defined in aroma-config
now place your item 1.1 customisation app to the folder aroma\checkbox1\item-1.1\app
if it is a framework folder file, place it to aroma\checkbox1\item-1.1\framework folder
now use have successfully defined option1 for the check box window
repeat the same for item 1.2, 1.3 and for 2.1, 2.2 too (and also for additional items if you have created them)
now you might have learnt how to define the corresponding items for mods/rom checkbox window you created in aroma-config
Click to expand...
Click to collapse
3.) Important for rom developers!
Now if you have made this aroma installer for a rom, you have to make aymlinks and fix permissions for your rom binaries
for that open the updater script from any rom from your forum and find the word "symlink" and then copy all the lines to your updater script
if you are not able to find the code, try adding this code to your updater script-
Code:
ui_print("-> making symlinks...");
symlink("toolbox", "/system/bin/start");
symlink("toolbox", "/system/bin/lsmod");
symlink("toolbox", "/system/bin/r");
symlink("toolbox", "/system/bin/vmstat");
symlink("toolbox", "/system/bin/ifconfig");
symlink("toolbox", "/system/bin/ionice");
symlink("toolbox", "/system/bin/schedtop");
symlink("toolbox", "/system/bin/wipe");
symlink("toolbox", "/system/bin/reboot1");
symlink("toolbox", "/system/bin/rmdir");
symlink("toolbox", "/system/bin/route");
symlink("toolbox", "/system/bin/chown");
symlink("toolbox", "/system/bin/lsof");
symlink("toolbox", "/system/bin/getevent");
symlink("toolbox", "/system/bin/mkdir");
symlink("toolbox", "/system/bin/netstat");
symlink("toolbox", "/system/bin/renice");
symlink("toolbox", "/system/bin/uptime");
symlink("mksh", "/system/bin/sh");
symlink("toolbox", "/system/bin/smd");
symlink("toolbox", "/system/bin/sync");
symlink("toolbox", "/system/bin/mount");
symlink("toolbox", "/system/bin/printenv");
symlink("toolbox", "/system/bin/top");
symlink("toolbox", "/system/bin/log");
symlink("toolbox", "/system/bin/sendevent");
symlink("toolbox", "/system/bin/ps");
symlink("toolbox", "/system/bin/dmesg");
symlink("toolbox", "/system/bin/umount");
symlink("toolbox", "/system/bin/kill");
symlink("toolbox", "/system/bin/stop");
symlink("toolbox", "/system/bin/newfs_msdos");
symlink("toolbox", "/system/bin/iftop");
symlink("toolbox", "/system/bin/chmod");
symlink("toolbox", "/system/bin/rmmod");
symlink("toolbox", "/system/bin/setconsole");
symlink("toolbox", "/system/bin/mv");
symlink("toolbox", "/system/bin/rm");
symlink("toolbox", "/system/bin/id");
symlink("toolbox", "/system/bin/watchprops");
symlink("toolbox", "/system/bin/hd");
symlink("toolbox", "/system/bin/ctrlaltdel");
symlink("toolbox", "/system/bin/sleep");
symlink("toolbox", "/system/bin/ls");
symlink("toolbox", "/system/bin/cmp");
symlink("toolbox", "/system/bin/insmod");
symlink("toolbox", "/system/bin/nandread");
symlink("toolbox", "/system/bin/date");
symlink("toolbox", "/system/bin/dd");
symlink("toolbox", "/system/bin/getprop");
symlink("toolbox", "/system/bin/cat");
symlink("toolbox", "/system/bin/df");
symlink("toolbox", "/system/bin/touch");
symlink("toolbox", "/system/bin/ioctl");
symlink("toolbox", "/system/bin/setprop");
symlink("toolbox", "/system/bin/notify");
symlink("toolbox", "/system/bin/ln");
ui_print("-> fixing permissions...");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm(0, 3003, 02750, "/system/bin/netcfg");
set_perm(0, 3004, 02755, "/system/bin/ping");
set_perm(0, 2000, 06750, "/system/bin/run-as");
set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
set_perm(0, 0, 0755, "/system/etc/bluetooth");
set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");
set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
set_perm_recursive(1000, 1000, 0771, 0644, "/data/app");
set_perm_recursive(0 ,0 , 0755, 0755, "/system/etc/init.d");
set_perm(0, 0, 0755, "/system/etc/be_movie");
set_perm(0, 0, 0755, "/system/etc/be_photo");
set_perm(0, 0, 0755, "/system/etc/be_album");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
set_perm(0, 2000, 0755, "/system/bin/sysinit");
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm(0, 0, 04755, "/system/xbin/busybox");
set_perm(0, 0, 06755, "/system/xbin/su");
Click to expand...
Click to collapse
3.) Fixing permissions for both rom and mod users
now scroll and find this code-
Code:
ui_print("-> fixing permits :p");
package_extract_file("fix_permissions", "/tmp/fix_permissions");
set_perm(0, 0, 0777, "/tmp/fix_permissions");
run_program("/tmp/fix_permissions");
ui_print("-> finished installation...!");
ui_print("-> enjoy...");
ui_print("-> ...");
ui_print("-> done....");
endif;
run_program("/sbin/busybox", "umount", "/system");
show_progress(1, 0);
run_program("/tmp/fix_permissions"); is for fixing the permissions
the endif; present here is in the continuation from file_getprop("/tmp/aroma-data/menu.prop","selected") == "1"
the command run_program("/sbin/busybox", "umount", "/system"); is for unmounting system partition as the installation is complete now
Click to expand...
Click to collapse
now save the file updater script with ctrl+s or save button
Click to expand...
Click to collapse
NOW YOU HAVE SUCCESSFULLY CREATED THE UPDATER-SCRIPT FILE FOR INSTALLER
THIS WAS ALL ABOUT CREATING THE CORRESPONDING AROMA INSTALLER UPDATER-SCRIPT...
I HAVE COVERED ALL THE FREQUENTLY USED COMMANDS IN THE TUTORIAL
IF ANY DOUBTS/ERRORS POST THEM HERE​
Liked My Guide?
Press Thanks, Rate my Thread 5 ***** And Thanks for making this thread to portal ​
Click to expand...
Click to collapse
F.A.Q SOON!
Thank you so much man! This came into my mind just today about making/installing aroma to my sola.
And now..i have the whole tutorial!!
I havent tried this yet.. But definately will in 2-3 days..
Thanks!
Sent from my MT27i using xda premium
Thanks a ton. Just gave a jest n it looks interesting. Will respond soon.
Nice work bro, but I already help you upon move this thread to General section cause since this is tutorial but not development
Help!! Error
@Ayush Singh
I am getting error while flashing zip file. The error log is as follows:
Installing update...
-> Initializing...
->Please Wait...
file_getprop: failed to stat "/tmp/aroma-data/menu.prop": No such file or directory
E:Error in /sdcard/aroma-test.zip
(status 7)
Installation aborted
Kaushik.Vapiwala said:
I am getting error while flashing zip file. The error log is as follows:
Installing update...
-> Initializing...
->Please Wait...
file_getprop: failed to stat "/tmp/aroma-data/menu.prop": No such file or directory
E:Error in /sdcard/aroma-test.zip
(status 7)
Installation aborted
Click to expand...
Click to collapse
Make sure that in your aroma config this prop file is defined for menu--
Code:
"menu.prop",
and in updater script, you have defined options like this--
Code:
file_getprop("/tmp/aroma-data/menu.prop","selected") == "1"
Ohk I'll check it.
Edit - The problem is solved. Thank you.
Thanks for the very useful guide. I have a problem, just a strange case (for me), try to edit aroma-config from the zip.
It says lines syntax error on line xxx col xx . I look on that with notepad++ on the line but it just ");" which is needed to close "selectbox(" statement.
I try the demo installer first and it runs fine, then I try to re-replace any value (even with same value) but it has syntax error on line xxx
No changes on value, just open and save.
Thanks in advance.
edit: take your zip (not the original one) and it's fine then . Also mistakes in last line on initial values .. thanks anyway
Your guide is very well detailed. Thank you for doing this.
I will be following your guide to set Aroma up in my rom. I will have to edit the themes tho. What I didnt see was info on kernels. I would like to have my rom for Tmobile and AT&T.
Do you have a guide for that as well?
nice guide
thanks & pressed
i have a question.when i press the "install now" button,nothing display in the field and there is nothing install on my phone
here is my updater-script and aroma-config.would you mind take a look?thx
https://www.dropbox.com/s/wt4ful20tjt8cbd/aroma-config
https://www.dropbox.com/s/rwlxcc189cq4srm/updater-script
the two files are saved in ANSI,is it right code?
btw, i deleted the folder "checkbox1" and "window2" since i don't need them.is it fine?
slsamg7112 said:
nice guide
thanks & pressed
i have a question.when i press the "install now" button,nothing display in the field and there is nothing install on my phone
here is my updater-script and aroma-config.would you mind take a look?thx
https://www.dropbox.com/s/wt4ful20tjt8cbd/aroma-config
https://www.dropbox.com/s/rwlxcc189cq4srm/updater-script
the two files are saved in ANSI,is it right code?
btw, i deleted the folder "checkbox1" and "window2" since i don't need them.is it fine?
Click to expand...
Click to collapse
Your updater-script is correct n the aroma-config as well,
n theres no problem in deleting checkbox n windows if not reqd.
But if installation progress completes on its own with no data installed then this is how to troubleshoot--
-> Have you replaced update-binary-installer from any working mod/rom for your device??
-> Are the mount commands correct for your device?
I hope this will help
alloycowboy said:
Your guide is very well detailed. Thank you for doing this.
I will be following your guide to set Aroma up in my rom. I will have to edit the themes tho. What I didnt see was info on kernels. I would like to have my rom for Tmobile and AT&T.
Do you have a guide for that as well?
Click to expand...
Click to collapse
You mean guide for Flashing kernels??
Sorry I dont have that at this moment, coz I own 2011 Xperia device from which we cannot flash kernels via aroma
-> Have you replaced update-binary-installer from any working mod/rom for your device??
---i replaced the file with working aroma and now it works. thx
-> Are the mount commands correct for your device?
---no lines display when installing.after replacing it works well
I am currently using Aroma in my rom (still editing). Your guide was VERY helpful. I do have a question...
On the main menu (full rom installation, change log, etc) how can I go about "adding" a mods/themes selection that will only flash selected mods without flashing the rom? Is ithere a way to implement this? I know i can add it to the menu, but im not to sure on how to write the script so
It will flash just selected mods, etc.
Any help would be greatly appreciated.
I'll check it ! Nice work!
Excellent work. Good reference for all experienced Aromaholics and not.
Sent from my GT-I9500 using XDA Premium 4 mobile app
Congratulation! You guide is on XDA Portal.:highfive:
http://www.xda-developers.com/android/comprehensive-guide-to-aroma-installer/
I sent the tip to xda portal, Glad to see this in portal

G6 plus blankflash no response error

Hiya
I recently tried to unbrick my G6 plus again and got more progress than I ever had. I found a blankflash from a post on XDA here but I get a "no response" error when I run it. I've ran it 3 times now and each time I've gotten the same error. Now I'm no expert by any means so I don't know if this is just the end of the line for me or if this can be saved. Here's the last log entry It's pretty big but just in case I'll provide everything.
**** Log buffer [000001] 2022-08-16_23:27:40 ****
[ 0.000] Opening device: \\.\COM4
[ 0.002] Detecting device
[ 0.004] ...cpu.id = 172 (0xac)
[ 0.004] ...cpu.sn = 768239553 (0x2dca67c1)
[ 0.005] Opening singleimage
[ 0.005] Loading package
[ 0.007] ...filename = pkg.xml
[ 0.008] Loading programmer
[ 0.008] ...filename = programmer.elf
[ 0.008] Sending programmer
[ 0.198] Handling things over to programmer
[ 0.199] Identifying CPU version
[ 0.199] Waiting for firehose to get ready
[ 61.296] Waiting for firehose to get ready
[122.365] ...SDM630 unknown
[122.365] Determining target secure state
[122.365] Waiting for firehose to get ready
[183.395] ...secure = no
[183.416] Initializing storage
[183.417] Waiting for firehose to get ready
[244.490] Configuring device...
[244.491] Waiting for firehose to get ready
[305.510] Waiting for firehose to get ready
[366.600] Waiting for firehose to get ready
[427.591] Waiting for firehose to get ready
[488.603] Initializing storage
[488.605] Waiting for firehose to get ready
[549.662] Configuring device...
[549.664] Waiting for firehose to get ready
[610.782] Waiting for firehose to get ready
[671.804] Waiting for firehose to get ready
[732.820] Waiting for firehose to get ready
[793.914] Waiting for firehose to get ready
[854.953] Configuring device...
[854.954] Waiting for firehose to get ready
[916.014] Waiting for firehose to get ready
[977.064] Waiting for firehose to get ready
[1038.161] Waiting for firehose to get ready
[1099.235] ERROR: do_package()->do_recipe()->do_configure()->fh_send()->get_fh()->no response
[1099.235] Check qboot_log.txt for more details
[1099.236] Total time: 1099.237s
[1099.237] There were some hiccups in backup and restore.
[1099.237] Please save the following files and see a Bootloader member.
[1099.237] 1) ./qboot_log.txt
[1099.238] 2) ./backup_0x2DCA67C1_2022-08-16_233043.img
[1099.238]
[1099.239]
[1099.239] qboot version 3.86
[1099.239]
[1099.239] DEVICE {
[1099.239] name = "\\.\COM4",
[1099.239] flags = "0x64",
[1099.239] addr = "0x62FD54",
[1099.239] sahara.current_mode = "0",
[1099.239] api.buffer = "0x286F020",
[1099.239] cpu.serial = "768239553",
[1099.239] cpu.id = "172",
[1099.239] cpu.sv_sbl = "1",
[1099.239] cpu.name = "SDM630",
[1099.239] storage.type = "eMMC",
[1099.239] sahara.programmer = "programmer.elf",
[1099.239] module.firehose = "0x1FEA50",
[1099.239] cpu.ver = "0",
[1099.239] cpu.vername = "unknown",
[1099.239] api.bnr = "0x27A7F28",
[1099.239] }
[1099.239]
[1099.239]
[1099.239] Backup & Restore {
[1099.239] num_entries = 32,
[1099.239] restoring = "false",
[1099.239] restore_error = "not started",
[1099.239] entries[00] = { skipped = 0, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="cid"},
[1099.239] entries[01] = { skipped = 0, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="frp"},
[1099.239] entries[02] = { skipped = 0, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="hw"},
[1099.239] entries[03] = { skipped = 0, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="misc"},
[1099.239] entries[04] = { skipped = 0, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="persist"},
[1099.239] entries[05] = { skipped = 0, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="utags"},
[1099.239] entries[06] = { skipped = 0, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="devinfo"},
[1099.239] entries[07] = { skipped = 0, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="sp"},
[1099.239] entries[08] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="abl_a"},
[1099.239] entries[09] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="cmnlib_a"},
[1099.239] entries[10] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="cmnlib64_a"},
[1099.239] entries[11] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="devcfg_a"},
[1099.239] entries[12] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="hyp_a"},
[1099.239] entries[13] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="keymaster_a"},
[1099.239] entries[14] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="storsec_a"},
[1099.239] entries[15] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="tz_a"},
[1099.239] entries[16] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="rpm_a"},
[1099.239] entries[17] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="pmic_a"},
[1099.239] entries[18] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="prov_a"},
[1099.239] entries[19] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="xbl_a"},
[1099.239] entries[20] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="abl_b"},
[1099.239] entries[21] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="cmnlib_b"},
[1099.239] entries[22] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="cmnlib64_b"},
[1099.239] entries[23] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="devcfg_b"},
[1099.239] entries[24] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="hyp_b"},
[1099.239] entries[25] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="keymaster_b"},
[1099.239] entries[26] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="storsec_b"},
[1099.239] entries[27] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="tz_b"},
[1099.239] entries[28] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="rpm_b"},
[1099.239] entries[29] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="pmic_b"},
[1099.239] entries[30] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="prov_b"},
[1099.239] entries[31] = { skipped = 1, backup_tried = 0, backup_failed = 0, restore_tried = 0, restore_failed = 0, name ="xbl_b"},
[1099.239] simg = {
[1099.239] filename = "backup_0x2DCA67C1_2022-08-16_233043.img",
[1099.239] entries[00] = { size = 606912, name = "programmer.elf" },
[1099.239] }
[1099.239] }
[1099.239]
Now, to give you a little bit of background info, I didn't try to root my device or anything One day it just simply rebooted itself when it was just lying on my desk next to me being idle (or whatever android does when it's idling) and it kept rebooting, Every time it restarted and got into android it froze after 10 seconds or so and just rebooted again, until at some point it didn't boot anymore at all. At that point I tried messing with the fastboot menu (I think it's called, volume down + lock) but I couldn't do anything there. After trying that a couple times it just refused to get into that many and now won't turn on anymore at all. It did still show up on my PC as QUSB_BULK, and now after installing the Qloader thing it shows up as qualcom something with no driver errors (I disabled test singing in Windows). But now as mentioned, the blankflash runs for over 1000 seconds and then givers me the no response error. I've attached the latest backup it tried to make just in case that gives any info. Again I'm no expert so I don't know if this can be saved or not. It's not my main phone or anything, it already died in like 2019 or early 2020 or so.
If anyone can offer any help that would be greatly appreciated!
Thanks!

Categories

Resources