[APP][DEV][4.0+][V1.3]ROM Mart Customizable HUB for ROM Developers

Search This thread

xcesco89

Senior Member
Dec 7, 2010
687
1,384
ROM Mart is an app that let you provide add-ons to custom ROM users, such as wallpapers, apps and mods.
The app is really flexible and the developer can set categories, sub-categories and some layout parameters.
The only thing developer needs to do is create a simple XML file and upload it on his server, then add some strings to the build.prop file :)

Special Thanks to @maximo76 for the app icon :)

Features:

  • Flexible UI : App UI can be customized by modifying xml parameters
  • Categorized: All the content can be categorized in categories and sub-categories
  • Notifications: When developer add/remove content from the remote file a notification will be prompted to the user
  • Updates check frequency: set when the app must check for updates
  • Set/Download wallpapers
  • Install apps
  • Install mods
  • updates checker service will automatically start/stop based on connection status! (WiFi, mobile data)
  • Should work with any device running Android 4.0+
  • No need to subscribe to any site, just put the link to the remote xml file and you are done!
  • Will always be free!
  • More will come in future based also on devs requests :)

Permissions explanation:
android.permission.WRITE_EXTERNAL_STORAGE" ==> Save content to SD-card
android.permission.SET_WALLPAPER" ==> permission to set device wallpaper
android.permission.INTERNET" ==> Download manifest and content
android.permission.ACCESS_NETWORK_STATE" ==> get network state to start/stop updates service


How To :

Add these lines to the build prop:
Code:
hub.pub.url= public url to the xml file
hub.ab.name=App ActionBar title
hub.dl.folder=complete path to your download folder (ex: /sdcard/hub-downloads). Folder will be automatically created by the app
hub.sched.time= Time in minutes for udates check

XML Syntax:
HTML:
<?xml version="1.0" encoding="utf-8"?>
<items>
<category name="your category name">
<sub-category name="your sub-category name" 
                      images ="true | false" 
                      apps="true | false "
                      mods="true | false"
                      use-grid="true | false" 
                      use-cards="true | false">
<item url="URL to the content (images, apps, zips)"
                  thumbUrl="optional for images, required for apps and mods"
                  name="App/image/mod name"
                  author="author"
                  description="required for Apps and Mods, not used for images"
                  preview-images="Images Link separated by a semicolon (;). Required only for apps and mods"/>
</sub-category>
</category>
</items>

Tags explanation:

<category> :
This tag inside inside the app will be a ViewPager Tab

Attributes:
name="" ==> this will be the Tab name

<sub-category>
Every Sub-Category will be a list item inside the menu.

Attributes:
name="" ==> The sub-category name user will display inside the app
images="true|false" ==> needed to tell to the app if this sub-category contains images on not
apps="true|false" ==> Same as for images attribute.
mods="true|false" ==> Same as images and apps.
use-grid="true|false" ==> This will tell the app to use a ListView instead of GridView. default is false so it will use a listview.
use-cards="true|false" ==> This one will tell to the app if you want to use google cards look or not. Default is false.

<item>
This is one of the downloadable contents you want provide to your users (an image, and app or a mod).

Attributes:
url="" ==> URL of the content
thumbUrl="" ==> unused for images, used by apps and mods to provide the image you'll see inside the list or gridview
name="" ==> image, app or mod name
author="" => image, app or mod author
description="" ==> Content description used only by apps and mods. Not required for images.
preview-images="" ==> Link or links to preview images separated by a semicolon ;. These images will be displayed on the detailed view when user clicks on a list/gridView item. Used for apps and mods, unused for images.

Note that Not required fields can be omitted in XML!
thumbUrl and name for images can be omitted! The app will generate a name automatically ("Item #xxyy")

A simple XML example, can be found here: manifest.xml
(It's based on DirtyUnicorns wallpapers xml)

Put the app in /data/app or in /system/app, as you wish ;)

:::In case of Force Close:::

- Read this post and check Build.prop permissions ==> http://forum.xda-developers.com/showpost.php?p=52404174&postcount=13
- if it's not file's permissions related take a logcat and post the log ;)

Warnings:
- all links must be publicly accessible and must be direct links to the content (check the example xml!!)
- of course, also the xml link must be publicly accessible!
- use an editor that provides also code highlighting and errors check (i use Komodo Edit)

Sharing policy:
- Let me know if you include it in your rom!
- Add credits to your thread! (me and DSHT, my team)
- Add a link to this thread in yours!
- You are not allowed to change app icon or any other resource inside the package.
- You are not allowed to change the app code
- Any violation will be reported to xda moderators!


Changelog:

V1.0:
- initial release

V1.1:
- fixed zip flash (SU required)
- new App icon by maximo76

V1.2:
- fixed API level issue

V1.3
- fixed NumberFormatException


Screenshots:

Screenshot_2014-05-03-11-50-46.png

Screenshot_2014-05-03-11-39-43.png

Screenshot_2014-05-03-11-45-50.png

Screenshot_2014-05-03-11-48-35.png

Screenshot_2014-05-03-11-50-53.png

Screenshot_2014-05-03-11-52-57.png




XDA:DevDB Information
ROM Mart, App for all devices (see above for details)

Contributors
xcesco89

Version Information
Status: Stable
Current Stable Version: 1.3
Stable Release Date: 2014-05-04

Created 2014-05-03
Last Updated 2014-05-09
 

Attachments

  • Screenshot_2014-05-03-11-50-46.png
    Screenshot_2014-05-03-11-50-46.png
    202.7 KB · Views: 746

zelendel

Senior Member
Aug 11, 2008
23,370
20,594
OnePlus 6T
This looks great for start up ROM devs

You can either find a good or a free. Almost impossible to find both. Let alone one that will handle that kind of traffic reliably.

Bat cave One
 
  • Like
Reactions: bri315317

xcesco89

Senior Member
Dec 7, 2010
687
1,384
That's strange, on my N5 and G2 all works without issue, anyway I'll change some lines of code and upload a new version. As I see, seems there are problems with build.prop file permissions. (Usually these are rwxr-xr-x and all works)

Thanks for these reports

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
Last edited:

broodplank1337

Inactive Recognized Developer
Nov 24, 2011
4,992
10,153
Nijmegen
www.broodplank.net
FC on open.

Code:
E/AndroidRuntime(18968): FATAL EXCEPTION: main
E/AndroidRuntime(18968): Process: com.dsht.center, PID: 18968
E/AndroidRuntime(18968): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dsht.center/com.dsht.center.MainActivity}: java.lang.NumberFormatException: [B]Invalid int: "disable"[/B]
E/AndroidRuntime(18968): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
E/AndroidRuntime(18968): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
E/AndroidRuntime(18968): 	at android.app.ActivityThread.access$800(ActivityThread.java:135)
E/AndroidRuntime(18968): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
E/AndroidRuntime(18968): 	at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(18968): 	at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(18968): 	at android.app.ActivityThread.main(ActivityThread.java:5017)
E/AndroidRuntime(18968): 	at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(18968): 	at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(18968): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
E/AndroidRuntime(18968): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
E/AndroidRuntime(18968): 	at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(18968): Caused by: java.lang.NumberFormatException: Invalid int: "disable"
E/AndroidRuntime(18968): 	at java.lang.Integer.invalidInt(Integer.java:137)
E/AndroidRuntime(18968): 	at java.lang.Integer.parse(Integer.java:374)
E/AndroidRuntime(18968): 	at java.lang.Integer.parseInt(Integer.java:365)
E/AndroidRuntime(18968): 	at java.lang.Integer.parseInt(Integer.java:331)
E/AndroidRuntime(18968): 	at com.dsht.center.MainActivity.onCreate(MainActivity.java:92)
E/AndroidRuntime(18968): 	at android.app.Activity.performCreate(Activity.java:5231)
E/AndroidRuntime(18968): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
E/AndroidRuntime(18968): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
E/AndroidRuntime(18968): 	... 11 more
W/ActivityManager( 3398):   Force finishing activity com.dsht.center/.MainActivity


That's strange, on my N5 and G2 all works without issue, anyway I'll change some lines of code and upload a new version. As I see, seems there are problems with build.prop file permissions. (Usually these are rwxr-xr-x and all works)

Thanks for these reports

Inviato dal mio Nexus 5 utilizzando Tapatalk

build.prop should never be any other mode then 644. on legacy roms setting build.prop to 755 may cause bootloop (because of primitive system), I have had this on my old phone (i9001)
 
Last edited:

xcesco89

Senior Member
Dec 7, 2010
687
1,384
FC on open.

Code:
E/AndroidRuntime(18968): FATAL EXCEPTION: main
E/AndroidRuntime(18968): Process: com.dsht.center, PID: 18968
E/AndroidRuntime(18968): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dsht.center/com.dsht.center.MainActivity}: java.lang.NumberFormatException: [B]Invalid int: "disable"[/B]
E/AndroidRuntime(18968): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
E/AndroidRuntime(18968): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
E/AndroidRuntime(18968): 	at android.app.ActivityThread.access$800(ActivityThread.java:135)
E/AndroidRuntime(18968): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
E/AndroidRuntime(18968): 	at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(18968): 	at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(18968): 	at android.app.ActivityThread.main(ActivityThread.java:5017)
E/AndroidRuntime(18968): 	at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(18968): 	at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(18968): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
E/AndroidRuntime(18968): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
E/AndroidRuntime(18968): 	at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(18968): Caused by: java.lang.NumberFormatException: Invalid int: "disable"
E/AndroidRuntime(18968): 	at java.lang.Integer.invalidInt(Integer.java:137)
E/AndroidRuntime(18968): 	at java.lang.Integer.parse(Integer.java:374)
E/AndroidRuntime(18968): 	at java.lang.Integer.parseInt(Integer.java:365)
E/AndroidRuntime(18968): 	at java.lang.Integer.parseInt(Integer.java:331)
E/AndroidRuntime(18968): 	at com.dsht.center.MainActivity.onCreate(MainActivity.java:92)
E/AndroidRuntime(18968): 	at android.app.Activity.performCreate(Activity.java:5231)
E/AndroidRuntime(18968): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
E/AndroidRuntime(18968): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
E/AndroidRuntime(18968): 	... 11 more
W/ActivityManager( 3398):   Force finishing activity com.dsht.center/.MainActivity




build.prop should never be any other mode then 644. on legacy roms setting build.prop to 755 may cause bootloop (because of primitive system), I have had this on my old phone (i9001)

i know. You'll probably get error when the file is 700 (rwx------). With 644 (rw-r--r--) | 744 (rwxr--r--) and 755(rwxr-xr-x) App works without issues (already tested).

I prefer avoid the use of su to read build.prop file because will cause the prompt of annoying toasts telling you "garanted superuser permissions". I can also copy the build.prop to the app files dir, but in case you change something in the prop the app will not recognize it.

I don't have devices with internal and external SDcard, so, try to use /mnt/extsd or whatever the path is instead of /data/media

EDIT:
You can also make a simple init.d script that changes permissions, or check your updater-script and change the permissions setting here :p

EDIT2:
Version 1.1 ready. Fixed some stuff related to zip flashing and new app icon by @maximo76 :)
 
Last edited:
  • Like
Reactions: broodplank1337

TheHaso

Senior Member
Feb 18, 2012
1,847
589
ROM Mart is an app that let you provide add-ons to custom ROM users, such as wallpapers, apps and mods.
The app is really flexible and the developer can set categories, sub-categories and some layout parameters............

isnt it possible to make this a stand alone app ?
 

skeleton1911

Senior Member
May 4, 2012
10,488
14,762
münster
great work confirm that
v1.1 works now with SUpermissions when you try to flash a zip via recovery.
only thing left is that it dont read the build.prop and FC's
rwx---- permission :silly: all others like rw-r-r work fine

edit: question: why not use a manifest.xml in /system/ folder? its similar to the build.prop lines but then it dont matter what permission the build.prop has...
just an idea :)
 
Last edited:

xcesco89

Senior Member
Dec 7, 2010
687
1,384
great work confirm that
v1.1 works now with SUpermissions when you try to flash a zip via recovery.
only thing left is that it dont read the build.prop and FC's
rwx---- permission :silly: all others like rw-r-r work fine

edit: question: why not use a manifest.xml in /system/ folder? its similar to the build.prop lines but then it dont matter what permission the build.prop has...
just an idea :)

Rwx------ equals 700 and only root can read write and execute. So it's normal that app FC's when it tries to read the file: it doesn't have permissions :p
Just change file permissions to rwxr--r-- (744) or rw-r--r-- (644) and the app will not Force close. Check other files in /system, I doubt they all have 700 permission.
You can also try to make a simple init.d script that changes build.prop permissions (busybox chmod 644 /system/build.prop) :)

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
  • Like
Reactions: skeleton1911

skeleton1911

Senior Member
May 4, 2012
10,488
14,762
münster
Rwx------ equals 700 and only root can read write and execute. So it's normal that app FC's when it tries to read the file: it doesn't have permissions :p
Just change file permissions to rwxr--r-- (744) or rw-r--r-- (644) and the app will not Force close. Check other files in /system, I doubt they all have 700 permission.
You can also try to make a simple init.d script that changes build.prop permissions (busybox chmod 644 /system/build.prop) :)

Inviato dal mio Nexus 5 utilizzando Tapatalk

Yep. Thank you mate. I Already did it with an init.d script :) thanks

Sent from my HTC One using XDA Premium 4 mobile app
 

Polloos

Senior Member
Sep 19, 2013
126
146
Barcelona
FC when opening, using LG Optimus L9 (p760) with CM9:

Code:
D/TAG     ( 1785): Helpers:findBuildPropValueOf found {hub.pub.url} with the value (https://dl.dropboxusercontent.com/u/13475549/wallpaper_manifest.xml)
D/TAG     ( 1785): Helpers:findBuildPropValueOf found {hub.ab.name} with the value (Pollos)
D/TAG     ( 1785): Helpers:findBuildPropValueOf found {hub.dl.folder} with the value (/mnt/sdcard/)
D/TAG     ( 1785): Helpers:findBuildPropValueOf found {hub.sched.time} with the value (60)
D/dalvikvm(  286): GC_CONCURRENT freed 2794K, 41% free 7998K/13379K, paused 1ms+6ms
D/OpenGLRenderer(  527): Flushing caches (mode 1)
D/OpenGLRenderer( 1785): Enabling debug mode 0
I/ActivityManager(  286): Displayed com.dsht.center/.MainActivity: +677ms
D/OpenGLRenderer(  527): Flushing caches (mode 0)
D/AndroidRuntime( 1785): Shutting down VM
W/dalvikvm( 1785): threadid=1: thread exiting with uncaught exception (group=0x40a451f8)
E/AndroidRuntime( 1785): FATAL EXCEPTION: main
E/AndroidRuntime( 1785): java.lang.NoSuchMethodError: com.astuetz.viewpager.extensions.PagerSlidingTabStrip.setBackground
E/AndroidRuntime( 1785): 	at com.dsht.center.MainActivity.loadPreviewFragment(MainActivity.java:229)
E/AndroidRuntime( 1785): 	at com.dsht.center.MainActivity$LoadManifest.onPostExecute(MainActivity.java:206)
E/AndroidRuntime( 1785): 	at com.dsht.center.MainActivity$LoadManifest.onPostExecute(MainActivity.java:1)
E/AndroidRuntime( 1785): 	at android.os.AsyncTask.finish(AsyncTask.java:602)
E/AndroidRuntime( 1785): 	at android.os.AsyncTask.access$600(AsyncTask.java:156)
E/AndroidRuntime( 1785): 	at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
E/AndroidRuntime( 1785): 	at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 1785): 	at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 1785): 	at android.app.ActivityThread.main(ActivityThread.java:4575)
E/AndroidRuntime( 1785): 	at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1785): 	at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 1785): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
E/AndroidRuntime( 1785): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
E/AndroidRuntime( 1785): 	at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager(  286):   Force finishing activity com.dsht.center/.MainActivity
 

Top Liked Posts

  • There are no posts matching your filters.
  • 31
    ROM Mart is an app that let you provide add-ons to custom ROM users, such as wallpapers, apps and mods.
    The app is really flexible and the developer can set categories, sub-categories and some layout parameters.
    The only thing developer needs to do is create a simple XML file and upload it on his server, then add some strings to the build.prop file :)

    Special Thanks to @maximo76 for the app icon :)

    Features:

    • Flexible UI : App UI can be customized by modifying xml parameters
    • Categorized: All the content can be categorized in categories and sub-categories
    • Notifications: When developer add/remove content from the remote file a notification will be prompted to the user
    • Updates check frequency: set when the app must check for updates
    • Set/Download wallpapers
    • Install apps
    • Install mods
    • updates checker service will automatically start/stop based on connection status! (WiFi, mobile data)
    • Should work with any device running Android 4.0+
    • No need to subscribe to any site, just put the link to the remote xml file and you are done!
    • Will always be free!
    • More will come in future based also on devs requests :)

    Permissions explanation:
    android.permission.WRITE_EXTERNAL_STORAGE" ==> Save content to SD-card
    android.permission.SET_WALLPAPER" ==> permission to set device wallpaper
    android.permission.INTERNET" ==> Download manifest and content
    android.permission.ACCESS_NETWORK_STATE" ==> get network state to start/stop updates service


    How To :

    Add these lines to the build prop:
    Code:
    hub.pub.url= public url to the xml file
    hub.ab.name=App ActionBar title
    hub.dl.folder=complete path to your download folder (ex: /sdcard/hub-downloads). Folder will be automatically created by the app
    hub.sched.time= Time in minutes for udates check

    XML Syntax:
    HTML:
    <?xml version="1.0" encoding="utf-8"?>
    <items>
    <category name="your category name">
    <sub-category name="your sub-category name" 
                          images ="true | false" 
                          apps="true | false "
                          mods="true | false"
                          use-grid="true | false" 
                          use-cards="true | false">
    <item url="URL to the content (images, apps, zips)"
                      thumbUrl="optional for images, required for apps and mods"
                      name="App/image/mod name"
                      author="author"
                      description="required for Apps and Mods, not used for images"
                      preview-images="Images Link separated by a semicolon (;). Required only for apps and mods"/>
    </sub-category>
    </category>
    </items>

    Tags explanation:

    <category> :
    This tag inside inside the app will be a ViewPager Tab

    Attributes:
    name="" ==> this will be the Tab name

    <sub-category>
    Every Sub-Category will be a list item inside the menu.

    Attributes:
    name="" ==> The sub-category name user will display inside the app
    images="true|false" ==> needed to tell to the app if this sub-category contains images on not
    apps="true|false" ==> Same as for images attribute.
    mods="true|false" ==> Same as images and apps.
    use-grid="true|false" ==> This will tell the app to use a ListView instead of GridView. default is false so it will use a listview.
    use-cards="true|false" ==> This one will tell to the app if you want to use google cards look or not. Default is false.

    <item>
    This is one of the downloadable contents you want provide to your users (an image, and app or a mod).

    Attributes:
    url="" ==> URL of the content
    thumbUrl="" ==> unused for images, used by apps and mods to provide the image you'll see inside the list or gridview
    name="" ==> image, app or mod name
    author="" => image, app or mod author
    description="" ==> Content description used only by apps and mods. Not required for images.
    preview-images="" ==> Link or links to preview images separated by a semicolon ;. These images will be displayed on the detailed view when user clicks on a list/gridView item. Used for apps and mods, unused for images.

    Note that Not required fields can be omitted in XML!
    thumbUrl and name for images can be omitted! The app will generate a name automatically ("Item #xxyy")

    A simple XML example, can be found here: manifest.xml
    (It's based on DirtyUnicorns wallpapers xml)

    Put the app in /data/app or in /system/app, as you wish ;)

    :::In case of Force Close:::

    - Read this post and check Build.prop permissions ==> http://forum.xda-developers.com/showpost.php?p=52404174&postcount=13
    - if it's not file's permissions related take a logcat and post the log ;)

    Warnings:
    - all links must be publicly accessible and must be direct links to the content (check the example xml!!)
    - of course, also the xml link must be publicly accessible!
    - use an editor that provides also code highlighting and errors check (i use Komodo Edit)

    Sharing policy:
    - Let me know if you include it in your rom!
    - Add credits to your thread! (me and DSHT, my team)
    - Add a link to this thread in yours!
    - You are not allowed to change app icon or any other resource inside the package.
    - You are not allowed to change the app code
    - Any violation will be reported to xda moderators!


    Changelog:

    V1.0:
    - initial release

    V1.1:
    - fixed zip flash (SU required)
    - new App icon by maximo76

    V1.2:
    - fixed API level issue

    V1.3
    - fixed NumberFormatException


    Screenshots:

    Screenshot_2014-05-03-11-50-46.png

    Screenshot_2014-05-03-11-39-43.png

    Screenshot_2014-05-03-11-45-50.png

    Screenshot_2014-05-03-11-48-35.png

    Screenshot_2014-05-03-11-50-53.png

    Screenshot_2014-05-03-11-52-57.png




    XDA:DevDB Information
    ROM Mart, App for all devices (see above for details)

    Contributors
    xcesco89

    Version Information
    Status: Stable
    Current Stable Version: 1.3
    Stable Release Date: 2014-05-04

    Created 2014-05-03
    Last Updated 2014-05-09
    1
    Great cesco my rom will have this

    Inviato dal mio unknown utilizzando Tapatalk
    1
    What an awesome app :)
    Good job cescuz :p
    1
    Ehehe,another Great work thanks Cesco :)
    1
    This looks great for start up ROM devs

    You can either find a good or a free. Almost impossible to find both. Let alone one that will handle that kind of traffic reliably.

    Bat cave One
Our Apps
Get our official app!
The best way to access XDA on your phone
Nav Gestures
Add swipe gestures to any Android
One Handed Mode
Eases uses one hand with your phone