web-dev-qa-db-ja.com

複数のAndroid単一のソースコードからのアプリケーションパッケージ.apkファイル

Androidビルドシステムプロシージャ、コマンドライン、またはEclipseを使用して、単一のソースコードベースから複数の.apkファイルを生成します。このためのいくつかの一般的な理由-要件が異なる市場向けに特定のバージョンがあるか、無料と有料のバージョン。

この質問IS[〜#〜]ではない[〜#〜]について:

Google says "おそらく、公開するAPKごとに個別にAndroidプロジェクトを作成して、適切に個別に開発できるようにする必要があります。これを行うには、単にあなたの既存のプロジェクトに新しい名前を付けます。」そして、彼らは私が理解しているライブラリの使用を親切に提案します。そして、彼らは私が望むことを正確に渡すことで言及します:「ビルド構成に基づいて異なるリソースを出力できるビルドシステム」

  • Javaで条件付きコンパイルを実行するために、「public static final」変数をキーオフできることを知っています。 build.xmlには 微調整の例 のような値があります。 AndroidのAntビルド構成またはこれを実行しているOSSプロジェクトへのリンクの完全な例はありますか?BTW、build.xmlは自動生成されますが、人々がハッキングするのを見てきましたそれはどうですか?

  • パッケージ名がManifest.xmlでpackage = "com.example.appname"として宣言されている場合、その名前が異なる複数の.apksを発行する必要がある場合、それぞれに個別のプロジェクトが残っていますか?

49
Walter K

1つの単一のソースツリーから3つの小さな変更を加えて、2つの異なるAPK(デモと製品)を生成しています。

1)public static final DEMO=true; //false;Applicationクラスに追加し、その値に応じて、デモ/製品機能間でコードを切り替えるために使用しました

2)次のような2つの主要なアクティビティがあります。

package mypackage;
public class MyProduction extends Activity 
{
    //blah-blah
}

package mypackage.demo;
public class MyDemoActivity extends mypackage.MyProductionActivity
{
    //blah-blah
}

3)そして最後に2つの独立したAndroidManifest.xmlデモ/プロダクションスイッチに応じて異なるランチャーアクティビティを指すファイル

2つのAPKを手動で切り替えていますが、小さなANTタスクを作成してそれらを自動的に切り替えるのは難しいことは何もありません。

11
barmaley

これを行う1つの方法は、2つの個別のAndroidManifest.xmlをそれぞれの構成に1つずつ維持することです。手動(コピー)または自動(ビルドスクリプト)のいずれかで、2つの間を切り替えることができます。

[編集]ここにいる人はこのようなことをするシステムを持っています: http://blog.elsdoerfer.name/2010/04/29/Android-build-multiple-versions-of-a-project/

10
Emmanuel

説明されているように、これに対する答えscreamsGradleこれで website 。これは公式にAndroid Studioに組み込まれており、推奨されています。

すごい;私は同じソースコードを使用して、カスタマイズされたテキストとグラフィックスを使用して、特別なコーディングを一切行わずに3つの個別のアプリを作成しました。いくつかのディレクトリとGradleの設定が必要です。他の私の投稿は両方に対する回答で見つけることができます。

それはすべての基本を本当によく説明しているようです。特定の質問に対する回答については、Product Flavorsの下のセクションBuild Variantsを探してください。ここでは、さまざまなフレーバーの指定について説明しています。

ウェブサイトが説明するように、この設計の背後にある目的の1つは、それをより動的にし、基本的に同じコードで複数のAPKを簡単に作成できるようにすることでした。

私はおそらくそれを最もよく説明しなかったでしょう、しかしそのウェブサイトはかなり良い仕事をします。

5
craned

これは共有コードをAndroidライブラリにパッケージ化することではないという主張ですが、それは一種のことです。市場には異なる要件があるか、無料版と有料版があるかもしれません。それぞれのこれらの例では、2つの最終出力APKの動作やリソースが異なります。コードの大部分を共有Androidライブラリに配置して、実際のプロジェクトの違いを維持できます。

たとえば、Android MarketとAmazon AppStoreの両方にリリースする必要があるアプリに取り組みました。AmazonAppStoreでは、アプリのマーケットページにリンクする場合、 (Androidマーケットページではなく)Amazonである必要があります。URLをライブラリのリソースに保存してコードで使用できますが、Amazonプロジェクトでそのリソースをオーバーライドできます適切なAmazon URLを指すようにします。

正しく構成すると、サブクラス化してさまざまなことを実行できるApplicationオブジェクトが開始点になるため、コードで同様のことができます。

とはいえ、マニフェストのパッケージ名を変更するAntステップを追加する場合、それはisだけのXMLです。プリコンパイル手順として変更するのは難しくありません。

3
kabuko

この記事 は、ビルド時に構成ファイルを修正する方法の例を含む、適切なウォークスルーを備えています。特に、ビルドのカスタマイズおよびJava構成ファイルの使用セクション。build.xmlおよびantに関する情報の一部は少し今は時代遅れです。

2
Graham Borland

私は同じ問題を抱えていましたが、フラグを使用して1つのプロジェクトにすべてを詰め込むことは私にとって解決策ではありません。私はMavenでそれを行う方法の例を書きました:

複数のAndroid avenファイルをMavenマルチモジュールプロジェクトによって編成された1つのコードベースから作成する方法

2
Bevor

私のチームは、単一のコードベースと追加のコードを使用して、2つの異なるビルドをビルドします。 AndroidビルドはAntスクリプトに基づいているため、私はAntスクリプトを使用してこの作業を行っています。

私は xmltask を使用してマニフェストxmlファイルを操作し、多くのantタスク(regexp、copy ..)を使用してソースコードを編集しました。

テンプレートプロジェクトテンプレート(build.xml、default.properties、local.propertiesを含む)を準備し、それらのプロジェクトテンプレートに新しいソースコードをコピーしました。コピーが完了したら、build.xmlを並列実行してビルド時間を短縮します。ビルドが完了すると、複数のapkファイルが表示されます。

1
kingori

Androidビルドシステムとしてgraddleを使用するStudioビルドバリアントを使用することで、目標を簡単に達成できます。

詳細については here を確認してください。

1
alijandro

これが私たちの状況です:私たちはいくつかのクライアントのためにリリースする単一のコードベースを持っています。それぞれに、アプリケーションのタイトル、背景、その他のリソース(パッケージ名はもちろん)に関するさまざまな要件があります。

ビルドは、Ruby AndroidManifestを変更するスクリプトによって処理され、クライアント固有のフォルダーから特定のリソースをコピー/置換してから、Androidの標準ビルドルーチンに移動します。ビルドが完了したら、 、スクリプトは変更されたファイルを元の「デフォルト」の状態にリセットします。

ええと...多分それは最適ではなく、間違いなくAndroid固有ではありませんが、それが私たちのやり方です。

1
Ash

Librayを一般的なソースと2つの異なるAndroidプロジェクト)に使用する最善の方法が残っていると思います。これはJava apkからソースへのリバースエンジニアリングを作成します。デモとプロダクションに同じソースを使用している場合、誰かがapkをハッキングして、デモパッケージをダウンロードし、Javaソースを抽出して、ソースをロック解除して、本番バージョンとして使用する変数。ライブラリを使用すると、本番パッケージのソースの一部を保持できるため、デモパッケージを本番パッケージとして使用することはできません。

0
Enrico Serretti