10

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

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

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

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

更多详细信息: 我有一个 android 应用程序 (test.apk)。我的 C# 应用程序应该编辑这个 zip 文件并重新打包它。将文本文件放在资产文件夹中效果很好。但是通过这种方法,C# app 输出的 apk 都是一样的!我不能将它们单独安装在移动设备上,因为 android OS 会相互替换它们。

4

4 回答 4

8

我发现自己处于类似的境地。

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

我所做的是在我的代码库中创建一个“配置”文件夹,并在其中添加了专业客户一个文件夹,其中包含与他相关的属性、字符串、图片。

我的结构是这样的:

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

希望这可以给你一些意见。

于 2013-03-24T21:39:43.583 回答
3

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

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

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

于 2013-03-19T21:02:34.303 回答
2

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

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

有关更多信息,请参见以下几行:

如何签署 APK Zip 文件

Windows 上没有 Eclipse 的 Android 应用程序代码签名

于 2013-03-28T20:16:17.493 回答
1

How to support multiple android version in your code?对此有很好的讨论?,它着眼于创建应用程序的多个版本。答案包含执行此操作的明确策略以及所涉及过程的详细信息。

于 2013-03-24T21:44:37.230 回答