10

私は2つのプログラムを持っています。1 つはデスクトップ アプリ (C#) で、もう 1 つは Android アプリです。

C# はいくつかのテキスト ファイルを作成し、いくつかの Android アプリ フォルダーに配置します。したがって、コンテンツの異なる複数の Android アプリを使用できます。Android アプリはプリコンパイルされています。c# アプリは、テスト ファイルを (7za で) 配置し、(zipalign で) 再パッケージ化します。

問題は、これらすべてのアプリのソースが 1 つしかないことです。同じパッケージ名と同じアプリ名を意味します!

ご存知のように、Android は同じパッケージ名を同じアプリと見なします。どうすればこの問題を解決できますか? 単一の Android アプリから、異なるテキスト ファイル (コンテンツ) を使用して個別のアプリを作成します。

詳細: 1 つの Android アプリ (test.apk) があります。私の C# アプリは、この zip ファイルを編集して再パッケージ化する必要があります。テキストファイルをassetsフォルダーに入れるとうまくいきます。しかし、この方法では、C# アプリ出力の apk はすべて同じです。Android OSはそれらを互いに置き換えているため、モバイルに個別にインストールすることはできません。

4

4 に答える 4

8

私も同じような状況に陥りました。

私は単一のアプリを持っていましたが、さまざまな顧客向けに構築しました (リソース、プロパティなどの特定のカスタマイズがあります...)。最終的には、maven を使用してすべてを管理することにしました。

私が行ったことは、コードベースに「config」フォルダーを作成し、その中にプロの顧客に関連するプロパティ、文字列、写真を含むフォルダーを追加しました。

私の構造は次のようなものです:

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は大きすぎました)。

最終的に、ビルド用の正しいリソースを基本的にコピーし、各 apk でパッケージが更新されるようにソースを前処理する「ビルド前」の AntTask を挿入するカスタム ビルド プロセスを作成しました。

公式ドキュメントは見つかりませんが、これは良いスタートになるはずです.. 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 に答える