How to Create Multiple App from a single Android app with different contents
android, c#, content-management-system
Solution
I found myself in a similar situation.
I had a single app but built for different customers (having specific customization like resources, properties...). I eventually decided to manage the whole thing using maven.
What I've done is creating a "config" folder in my codebase and inside it I've added pro customer a folder containing the properties, string, pictures related to him.
My structure is something like this:
MyAppBase
src/
build/
BaseAndroidManifest.xml
...
config/
customerA/
logo.png
customerA.xml
customerA.properties
customerB/
customerC/
...
Using maven artifacts for copying, move, replace I've then managed to build customer specific apk in the following way:
1) Create a temporary customer specific source folder where all code is copied to
<copy todir="src_${customer}">
<fileset dir="src"/>
</copy>
2) Rename packages and imports
<!-- Rename main package -->
<move file="src_${customer}/ch/wizche/myapp" tofile="src_${customer}/ch/wizche/${customer}"/>
<!-- Replace package imports with the newly one -->
<replace dir="src_${customer}/" value="ch.wizche.${customer}">
<include name="**/*.java"/>
<replacetoken>ch.wizche.myapp</replacetoken>
</replace>
3) Replace specific resources based on the customer
<!-- Copy images icon to the drawable folder -->
<copy file="./configs/${customer}/ic_launcher_l.png" tofile="./res/drawable-ldpi/ic_launcher.png" overwrite="true" verbose="true"/>
<copy file="./configs/${customer}/ic_launcher_m.png" tofile="./res/drawable-mdpi/ic_launcher.png" overwrite="true" verbose="true"/>
4) Replace "Template" AndroidManifest and injecting customer versions, names, ...
<copy file="./BaseAndroidManifest.xml" tofile="./AndroidManifest.xml" overwrite="true" verbose="true"/>
<replace file="./AndroidManifest.xml" value="ch.wizche.${customer}" token="ch.wizche.myapp"/>
<replace file="./AndroidManifest.xml" value="android:versionCode="${versionCode}" token="android:versionCode="1"/>
5) Signing using customer alias
6) Building APK
7) Deleting temporary customer folder
So, to build a customer specific app, I just need to:
mvn install -Dcustomer=customerA -P release
Hope this may give you some inputs.
Problem
I have two programs. First is a desktop app (C#) and the other is an android app. The C# one makes some text files and puts them in some of android app folders. So we can have multiple android apps with different contents. the android app is pre-compiled. and the c# app just puts the test files in (with 7za) and repackages it (with zipalign). The problem is, All of these apps have a single source! means same package name and same app name! And as you know, android considers same package names as same apps! How can i solve this problem? and create separate apps from a single android app with different text files (contents) More details: I have a single android app (test.apk). My C# app should edit this zip file and repackage it. putting text files in assets folder is working good. But by this method, the C# app output's apks all are the same! i can't install them on mobile separately, because android OS replaces them on each other.