如何从具有不同内容的单个Android应用程序创建多个应用程序

时间:2013-03-19 19:45:28

标签: c# android content-management-system

我有两个程序。首先是桌面应用程序(C#),另一个是Android应用程序。

C#one生成一些文本文件并将它们放在一些Android应用程序文件夹中。所以我们可以有多个不同内容的Android应用程序。 Android应用程序是预编译的。并且c#app只是将测试文件放入(使用7za)并重新打包(使用zipalign)。

问题是,所有这些应用都只有一个来源!意味着相同的包名称和相同的应用程序名称!

如您所知,android将相同的包名称视为相同的应用程序! 我怎么解决这个问题?并使用不同的文本文件(内容)从单个Android应用程序创建单独的应用程序

更多详情: 我有一个Android应用程序(test.apk)。我的C#应用​​程序应编辑此zip文件并重新打包。将文本文件放在assets文件夹中工作正常。但是通过这种方法,C#app输出的apks都是一样的!我无法单独在移动设备上安装它们,因为Android操作系统会相互替换它们。

4 个答案:

答案 0 :(得分:8)

我发现自己处于类似情况。

我有一个应用程序,但是为不同的客户构建(具有特定的自定义,如资源,属性......)。我最终决定使用maven管理整个事情。

我所做的是在我的代码库中创建一个“config”文件夹,在其中我已经为pro customer添加了一个文件夹,其中包含与他相关的属性,字符串和图片。

我的结构是这样的:

MyAppBase
 src/
 build/
 BaseAndroidManifest.xml
 ...
 config/
   customerA/
      logo.png
      customerA.xml
      customerA.properties
   customerB/
   customerC/
   ...

使用maven工件进行复制,移动,替换我已经设法以下列方式构建客户特定的apk:

1)创建一个临时客户特定源文件夹,其中所有代码都复制到

<copy todir="src_${customer}">
  <fileset dir="src"/>
</copy>

2)重命名包和导入

<!-- 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)根据客户替换特定资源

<!-- 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)替换“模板”AndroidManifest并注入客户版本,名称......

 <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)使用客户别名进行签名

6)建立APK

7)删除临时客户文件夹

因此,要构建一个客户特定的应用程序,我只需要:

mvn install -Dcustomer=customerA -P release

希望这可能会给你一些投入。

答案 1 :(得分:3)

我有一个类似的问题,我希望每个图形中具有不同分辨率的多个apks(单个apk,所有显示尺寸的所有图像都太大)。

我最终创建了一个自定义构建过程,我在其中插入了一个&#39; prebuild&#39; AntTask基本上复制了构建的正确资源并预处理了源代码,以便为每个apk更新包。

无法找到任何官方文档,但这应该是一个好的开始.. using-ant-to-automate-building-android

答案 2 :(得分:2)

您可以尝试分发未签名的.apk,然后使用C#应用程序中的不同密钥对其进行签名。我已经使用signapk.jar从命令行中签名未签名的.apk。

风险在于您正在向客户分发私钥。如果这不是一个问题,从某种意义上说,他们正在使用您的工具构建自己的应用程序,那么它可能值得一试。

有关详细信息,请参阅以下行:

How To Sign APK Zip Files

Android App Code Signing without Eclipse on Windows

答案 3 :(得分:1)

How to support multiple android version in your code?上有很好的讨论,它着眼于创建应用的多个版本。答案包含明确的策略,以及相关流程的详细信息。