The My Mods extension

The "My Mods" extension can be used to install (and/or test) your own mods or distribute your mods to other users.

The My Mods option is controlled via an xml file holding one or more apk sections. The file is called "mymods.xml". It needs to be placed in the root of the sdcard, which is called "INTERNAL" in the Joying file manager and which is the same as "internal memory" or "/storage/emulated". (The "real" SD-cards are called like "/storage_external_sd*".)

The Joying Extra Tools apk checks upon startup if the file is available. If it is the "My Mods" pull-down button is activated.

Below you will find an explanation of the necessary variables in the xml file.

description Description in the "My Mods" pull down menu
android The android version; currently 5.1.1, 6.0.1 or universal (apk works on any Android version).
rombuilddate     The date the ROM was built. NOT the release date. This can be found in the unzipped 5009_60.zip under /system/build.prop. For example: The 6.0.1 07 July ROM mentions: "ro.build.date=2017-06-29 11:43:58 Thursday". This means rombuilddate is 20170629. rombuilddate can also be universal (works on any release of the specified android version).
modtype Is it a "radio/videoplayer/musicplayer/bluetooth/sofiaserver/other" mod. This is important. In case of a radio for example, some automatic checks can be done as they are also done now. Same for the other "known" mods. Only "other" will be dealt with in another way.
filename This is the filename how it should be called when installed ON the unit. It doesn't matter how you call it in your weblink or how you store it on the sdcard before installation.
linktype web or file:
  • Web requires in origin something like "http://full_path_to_apk/name_of_apk.apk" (or https://).
  • File requires something like "/full_path_to_apk/name_of_apk.apk". The /full_path... is related from the root of the sdcard, not from the root of the device.
origin The location from where the apk should be downloaded or copied, and then installed, like:
  • "/myFantasticMod/myradiomod.apk"
  • http://www.mywebsite.org/myradiomod.apk
  • or some google drive link like https://drive.google.com/uc?export=download&id=0B4J4kKZoV78-RXRLam9hc01yMmM (note that such a link is the reason why I need the filename).
NOTE:
  • the "/myFantasticMod/myradiomod.apk" means "from the root of the internal sdcard" in the folder "myFantasticMod" containing the "myradiomod.apk" in the root of the internal sdcard.
  • If you want to specify a real, complete path to the file you need to use "file:///mnt/sdcard/myFantasticMod/myradiomod.apk" (That's how it is done in Appinventor)
Pay attention to uppercase/lowercase!!
In case of a web origin: Only directly downloadable links work. Download services like Mega.nz or Yandisk do not work as they require web browser interaction. Attachments in Forums don't work either in 95% of the cases.
installpath Folder location where the apk needs to be pushed to. In case of a "known mod" (radio, videoplayer, musicplayer, bluetooth, sofiaserver), this is actually not necessary
reboot Is a reboot necessary (yes/no)? If yes, a reboot notification will be displayed with the reboot option behind it. For a "known" mod it will be added anyway.

Below you see an example of the mymods.xml file.

  • The first entry contains a radiomod that is being installed from the internal sdcard, which is called "INTERNAL" in the Joying file manager and which is the same as "internal memory" or "/storage/emulated". The "real" SD-cards are called like "/storage_external_sd*".
  • The second entry is the exact same mod but downloaded from a website. In this case my github repository.
  • The 3rd entry is a BT mod downloaded from Google drive when you share it (note: fake link).
<apk>
	<description>BlueWhite Radio (from sdcard)</description>
	<android>6.0.1</android>
	<rombuilddate>universal</rombuilddate>
	<modtype>radio</modtype>
	<filename>JY-1-C9-Radio-V1.0.apk</filename>
	<linktype>file</linktype>
	<origin>/sdcard/myradiomod/JY-1-C9-Radio-V1.0.apk</origin>
	<installpath>/system/app/JY-1-C9-Radio-V1.0</installpath>
	<reboot>yes</reboot>
</apk>
<apk>
	<description>BlueWhite Radio (from web)</description>
	<android>6.0.1</android>
	<rombuilddate>universal</rombuilddate>
	<modtype>radio</modtype>
	<filename>JY-1-C9-Radio-V1.0.apk</filename>
	<linktype>web</linktype>
	<origin>https://github.com/hvdwolf/Joying-RootAssistant/raw/apk/Radio-Mod/6.0.1/BLUE_WHITE/JY-1-C9-Radio-V1.0.apk</origin>
	<installpath>/system/app/JY-1-C9-Radio-V1.0</installpath>
	<reboot>yes</reboot>
</apk>
<apk>
	<description>Smaller Treel Bluetooth app (800x480 version)</description>
	<android>6.0.1</android>
	<rombuilddate>universal</rombuilddate>
	<modtype>bluetooth</modtype>
	<filename>JY-1-C9-BT-V1.0.apk</filename>
	<linktype>web</linktype>
	<origin>https://drive.google.com/uc?export=download&amp;id=0B4J3kKZoV78-RXRLam9hc00yMmM</origin>
	<installpath>/system/app/JY-1-C9-BT-V1.0</installpath>
	<reboot>yes</reboot>
</apk>
                
(More examples at the bottom of the page.)


Note: When creating a mod of type "other", it means that I do not have an Joying original in my apk.
Always!! make sure to pack the original apk in your mymods.xml as well, so that the user using your mod can install the original apk back in case you made an error, or the stupid Joying 6.0.1 doesn't want to install/accept your mod.


Note 2: When sharing from Google drive you have to think of two things. First you will need to get a sharable link for your downloadable apk. This link will look something like:

    https://drive.google.com/open?id=0B4J3kKZoV78-RXRLam9hc00yMmM
(Note that the code behind the "id=" is your actual file/apk).

This is a webbrowser link and can't be used directly. You need to change the
    https://drive.google.com/open?id=0B4J3kKZoV78-RXRLam9hc00yMmM
to
    https://drive.google.com/uc?export=download&id=0B4J3kKZoV78-RXRLam9hc00yMmM
However, as you can't use the & sign in an xml file (or HTML), you need to escape it and change it to &amp;
So your final string will look like
    https://drive.google.com/uc?export=download&amp;id=0B4J3kKZoV78-RXRLam9hc00yMmM
(And don't forget the ; behind &amp;)

This all sounds (reads) complicated, but if you have done it once, it becomes a piece of cake the next time.


Note 3: When sharing from dropbox you also have to make a change to the link. First you have to share your file. This will give you a link like:

    https://www.dropbox.com/s/qq8sh1jzh6sos13/JY-1-C9-Radio-V1.0.apk
Change this link to
    https://dl.dropboxusercontent.com/s/qq8sh1jzh6sos13/JY-1-C9-Radio-V1.0.apk

(Personally I totally dislike dropbox. It theoretically gives you 10.000 downloads or 20GB download per day. I shared in the past from dropbox but after 500 or so downloads it totally blocks with bandwidth errors and keeps on blocking the next days. So be aware of this in case a lot of users are going to download your mod(s).)


As already mentioned above in the xml variables explanation: You can't use a file sharing service like mega.nz or yandisk as they are all webbrowser based services and you simply can't create a direct downloadable link as you are not allowed to.




More examples:
Say you made improvements to the translation of certain settings in the CMSettings apk (because in general the translation to other languages is pretty bad). You need to create the mymods.xml like:

<apk>
	<description>Car Setting app with better translation for English/French/German/Russion (whatever)</description>
	<android>6.0.1</android>
	<rombuilddate>universal</rombuilddate>
	<modtype>other</modtype>
	<filename>SYU-2-C9-CMSettings-V1.0.apk</filename>
	<linktype>web</linktype>
	<origin>https://drive.google.com/uc?export=download&amp;id=0B4J45KZoV78-RXRLam9hc00yMCz</origin>
	<installpath>/system/app/SYU-2-C9-CMSettings-V1.0</installpath>
	<reboot>yes</reboot>
</apk>
<apk>
	<description>Original Joying Car Setting app</description>
	<android>6.0.1</android>
	<rombuilddate>universal</rombuilddate>
	<modtype>other</modtype>
	<filename>SYU-2-C9-CMSettings-V1.0.apk</filename>
	<linktype>web</linktype>
	<origin>https://drive.google.com/uc?export=download&amp;id=0B4J45KZoV78-RXRLam9hc00yMmM</origin>
	<installpath>/system/app/SYU-2-C9-CMSettings-V1.0</installpath>
	<reboot>yes</reboot>
</apk>