Creating a learning package
After preparing your app as described in sections 1 and 2, you are now ready to create a learning package.
Download the quickstart learning package to get an overview of all the files and information your learning package must contain.
To see what a complete learning package looks like, take a look at the sample learning package.
Your learning package must contain the following:
The APK file of your adapted app, named app.apk.
A units.json file containing a list of individually launchable learning units, each identified by its unique ID, along with references to its icon and its required assets.
A folder called icons that contains the icons referenced by the entries in units.json. EIDU uses them to display previews of the learning units to the user.
A folder called assets with any assets required by the learning units. The EIDU app will make them available to your app on the device - your app will not have access to the Internet.
Your app's APK. It will be distributed automatically to the EIDU users’ devices. Note that, when submitting an update of your learning package and your APK has changed, the APK needs to have a higher version number than the one in the previous version of the learning package. Also, your APKs must always be signed with the same key.
The learning package needs to contain a units.json file containing a list of all learning units provided by your app. Each unit is described by the following pieces of information:
id: A unique identifier which will be provided to your app when EIDU wants to launch this unit; it needs to be unique within your learning package. Note that, when updating your learning package, each unit’s ID needs to remain unchanged in order to ensure a consistent user experience.
icon: A relative path which must be present in the icons folder.
fields: Optionally, an object with various properties describing the unit in human-readable language. You can include any fields you like, but are encouraged to include the fields title and description.
tags: Optionally, an object containing namespaced tags that describe the unit in machine-readable terms. Each property's name denotes the namespace and the value must be a list of strings denoting the tags that are present for the unit in the namespace. See below example to clarify the idea. You can include any namespaces and tags you like; as of now, they are not standardised.
assets: Optionally, a list of relative paths to any assets the unit requires. Those assets must be present in the assets folder.
We recommend you to order the learning units in the order you present it in your app. We will use the order to as an initial indication of difficulty when we integrate your learning units. From there on, optimizations based on automated learning assessments will take place.
Place your icons in the icons folder. Icons should be of the following format:
A size between 100x100 and 400x400 pixels
No alpha channel
Due to network restrictions, your app cannot connect to the Internet directly. Also, the low-end hardware with limited device storage requires a more sophisticated management of content assets and possibly appropriate asset compression.
To address this problem, the EIDU platform can manage assets for you. By adding your asset files to the content package and associating them with the units that need them, EIDU will optimise resource usage on the device. Your assets will be made available to your app on the device.
To do so, you must place all required asset files in the assets folder in your content package. The folder structure inside the assets folder is up to you. For example, your asset structure might look as follows:
In your learning-units.json file, you can then refer to individual asset files or whole folders. If unit-01 requires all files inside the unit-01 folder but only requires background-a.png file in shared it may use the following definition:
This may be necessary when you don’t know exactly which files are used by which learning unit. However, in the above example we do know exactly, so the following definition would be preferred, since it allows us to optimize downloads and disk usage better: