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

本文关键字:应用程序 Android 创建 一个 | 更新日期: 2023-09-27 18:04:39

我有两个程序。第一个是桌面应用程序(c#),另一个是android应用程序。

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

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

如你所知,android将相同的包名视为相同的应用程序!我怎样才能解决这个问题?和创建独立的应用程序从一个android应用程序不同的文本文件(内容)

更多细节:我有一个单一的android应用程序(test.apk)。我的c#应用程序应该编辑这个zip文件并重新打包它。将文本文件放在资产文件夹中工作良好。但是通过这种方法,c#应用程序输出的apks都是相同的!我不能单独在手机上安装它们,因为android操作系统会替换它们。

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

我发现自己也有类似的情况。

我有一个单一的应用程序,但为不同的客户(有特定的自定义,如资源,属性…)。我最终决定使用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>

重命名包和导入

<!-- 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)替换"Template" 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) Building APK 7)删除临时客户文件夹

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

mvn install -Dcustomer=customerA -P release

我有一个类似的问题,我想要多个apk不同分辨率的图形在每个(一个单一的apk与所有的图像显示尺寸太大)。

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

找不到任何官方文档,但这应该是一个好的开始。

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

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

更多信息请参见以下行:

如何签名APK Zip文件

Android App Code Signing without Eclipse on Windows

关于如何在代码中支持多个android版本有很好的讨论?,该问题着眼于创建一个应用程序的多个版本。答案包含一个明确的策略,以及所涉及的过程的细节。