7

最初に、私は英語があまり得意ではないと言わざるを得ないので、私の言いたいことをうまく説明できれば申し訳ありません:)

n 回複製する必要がある 1 つのプロジェクトがあります。すべての新しいプロジェクトは同じソース コードを持つ必要がありますが、異なるリソース (例: 画像、html ファイル、サウンド、pdf など) と異なるクラス/パッケージ名が必要です。

私のプロジェクトは標準の Java ではなく、Android + phonegap です。空の phonegap プロジェクトを作成する Eclipse プラグインがあります...このプラグインを変更して標準プロジェクトを作成する方法はありますか?

出来ますか?最良の方法は、ソースの変更をメイン プロジェクトから子プロジェクトにコミットするシステムも持つことですが、必須ではありません。

私の英語でもう一度ごめんなさい。

編集:

この質問をもう一度編集して申し訳ありませんが、実際には問題の解決策が見つかりません。

例と統合したいのですが、必要なものを説明できるかもしれません。

たとえば、バルセロナのサッカー チームのために、Eclipse と phonegap を使用して Android アプリケーションを開発したとします。

アプリは主に html + jquerymobile にありますが、アクティビティ、Android マニフェストを変更し、いくつかの phonegap プラグイン、いくつかのメディア リソースなどを追加しました。

今度は、このアプリをより多くのチーム、多くのチームに複製する必要があります。新しい phonegap プロジェクトを作成し、すべてのファイルを変更し、プラグインを追加し、アセットを追加する必要があるすべての人にとって、これらのタスクにエラーがないわけではありません。

しかし、非常に大きな問題は、コードにほんの少しの更新しかない場合、それを 10/20/50/100/1000 プロジェクトに複製するにはどうすればよいかということです。

より具体的にするために、android、phonegap、および cordova タグも投稿に追加しました。

私の英語でもう一度ごめんなさい。

編集番号 2

Maven android プラグインで 1 週間以上プレイしましたが、成功しませんでした。私が必要としているのは、アプリとパッケージ名、アイコン、およびほんの少しの構成ファイルを切り替えることができる一元化されたコードです。

Android ライブラリは、アセット ファイルをエクスポートできないため、ソリューションではありません。

詳細な回答を探して、この質問の報奨金を開始しました...助けてください:(

4

5 に答える 5

7

メンテナンスの観点から、同じコードベースで1000のプロジェクトを複製することは検討しません。私は単一のプロジェクトを使用して顧客固有のリソースを管理し、プロジェクトの構築段階で必要なリソースを交換します。言い換えれば、1000apkを構築するための1000プロジェクトではなく、1000apkを構築するための1つのプロジェクトです。

質問で与えた詳細に基づいて、この種の使用シナリオ(単一のソースベースから複数のアプリケーションをビルドする)を解決するための正しい方向(私が見る限り)は、AntやMavenがビルドを支配するような外部ビルドツールを採用することですプロセス(両方とも、ビルドのライフサイクル全体でコンパイル、デックス、パッケージなどのすべてのステップを微調整する機能を提供します)、必要に応じてバッチビルド用のシェルスクリプトを作成します。

私はPhoneGapを楽しんでいませんが、Get Started Guideをざっと見て、私の理解に基づいています。これは、Android SDKの上にあるもう1つのプログラミングレイヤースタックであり、主にWebプログラミング言語を使用してモバイルアプリを作成する機能を提供します( HTML、CSS、Javascript)、アプリケーションは元のプロジェクトスケルトンを保持しているので、PhoneGapアプリをビルドするためのAnt/Mavenスクリプトを作成するのにそれほど問題はないと思います。

MavenによるPhoneGapアプリの構築に成功したら。あなたはあなたのシナリオを解決する方法を調査し始めることができます、私は以前にStackOverflowで同様の種類のシナリオを見ました、いくつかのケーススタディのためにこのスレッドこのスレッドをチェックしてください。実現可能性調査のための概念実証プロジェクトを開始できます。

Mavenがこれをどのように達成するかを示すサンプルコードをいくつか投稿しました。以下を参照してください。

サンプルプロジェクトディレクトリ構造:

myApp/
  src/
  res-barcelona/
  assets-barcelona/
  res-realmadrid/
  assets-realmadrid/
  ... ...
  project.properties
  AndroidManifest.xml
  pom.xml

サンプルpom.xmlファイル:

<profiles>
  <profile>
    <id>barcelona</id>
    <properties>
      <app.package.name>com.company.app.barcelona</app.package.name>
      <app.res.dir>${project.basedir}/res-barcelona</app.res.dir>
      <app.assets.dir>${project.basedir}/assets-barcelona</app.assets.dir>
    </properties>
  </profile>
  <profile>
    <id>realmadrid</id>
    <properties>
      <app.package.name>com.company.app.realmadrid</app.package.name>
      <app.res.dir>${project.basedir}/res-realmadrid</app.res.dir>
      <app.assets.dir>${project.basedir}/assets-realmadrid</app.assets.dir>
    </properties>
  </profile>
  ... ...
</profiles>

....

<plugins>
  <plugin>
    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
    <artifactId>android-maven-plugin</artifactId>
    <version>3.1.1</version>
    <extensions>true</extensions>
    <configuration>
      <sdk>
        <platform>13</platform>
      </sdk>
      <undeployBeforeDeploy>true</undeployBeforeDeploy>
      <renameManifestPackage>${app.package.name}</renameManifestPackage>
      <resourceDirectory>${app.res.dir}</resourceDirectory>
      <assetsDirectory>${app.assets.dir}</assetsDirectory>
    </configuration>
  </plugin>
  ... ...
</plugins>

app-barcelona.apkをビルドするには、を実行しmvn clean install -Pbarcelonaます。
app-realmadrid.apkをビルドするには、を実行しmvn clean install -Prealmadridます。
他の1000apkをビルドするには、シェルスクリプトを記述します。

Android Mavenプラグインは多くの構成を提供し、すべての単一フェーズ/目標でビルドプロセスを微調整できます。詳細については、プロジェクトのドキュメントを確認してください。

于 2012-04-20T04:55:19.793 に答える
3

すでにわかっているように、共有Android ライブラリ プロジェクトが必要です。残念ながら(すでに述べたように)Android Maven Pluginassetsを使用してリリースをビルドする場合、依存プロジェクトにのみ継承さ れます。

私たちのプロジェクトでは、Eclipse から ADT を介して開発者ビルド用の Ant タスクを作成しました。これsyncAssets.xmlは、Android ライブラリ プロジェクトのベース フォルダーにあります。

<?xml version="1.0" encoding="UTF-8"?>
<!-- This is an Ant build script to synchronize assets from Android library "pkonvert-base"
    because they are not included automatically by the ADT tools. See discussion
    at http://stackoverflow.com/questions/5889833/android-library-assets-folder-doesnt-get-copied
    and topic "Library projects cannot include raw assets" at http://developer.android.com/guide/developing/projects/index.html#considerations.
    The Maven build through the maven-android-plugin automatically includes dependent
    assets from referenced Android libraries, so this Ant script only has to
    be executed when the build is executed from within eclipse. -->
<project name="syncAssets" default="syncAssets" basedir=".">

    <property name="sync.source.dir" value="${ant.file}/../assets" />
    <property name="sync.target.dir" value="${basedir}/assets" />

    <target name="syncAssets" description="Synchronize assets from Android library pkonvert-base">
            <echo>Synchronizing assets from ${sync.source.dir} to ${sync.target.dir}</echo>
            <sync todir="${sync.target.dir}">
                    <fileset dir="${sync.source.dir}" includes="**" />
            </sync>
    </target>

    <target name="clean" description="Clean up assets">
            <delete dir="${sync.target.dir}" />
    </target>
</project>

この Ant タスクは、ライブラリーの projectsassetsフォルダーのコンテンツを projects フォルダーにassets同期し、Eclipse で新しいビルドがトリガーされるたびにトリガーされます。このスクリプトの実行を Android プロジェクトに追加するには、Properties -> Buildersに移動し、新しいAnt Builderを作成します。この Ant Builder は、呼び出されるすべてのビルダーのチェーンの最初のものでなければなりません ( [へ] ボタンを使用して、Ant ビルダーを上に移動します)。

Tab MainでBuildfile${workspace_loc:/<YOUR_LIBRARY_PROJECT>/syncAssets.xml}と Base directory を選択します${workspace_loc:/<YOUR_PROJECT>}

[タブの更新] で、[完了時にリソースを更新]と[特定のリソース] を選択し、更新するプロジェクト フォルダーを選択します。さらにRecursively include subfoldersを選択します。

Tab Targetsで、 clean の後manual build、およびauto buildでデフォルトのターゲットが実行されるようにします。ターゲット clean は clean 中に実行する必要があります

于 2012-04-22T12:09:44.080 に答える
3

変更する必要があるファイルの実際のリストではなく、一般的な方法を探していると仮定すると、私はあなたの権利を得ることを願っています. これは、おそらく自分で解決することはできないものだからです。res/(Android プロジェクトは適切に構造化されていますが、asserts/フォルダーとファイルを変更するだけで十分かもしれません。Phonegap プロジェクトではandroid.manifestそれ以上のものを使用しただけです。

したがって、私が選んだ武器は git ブランチです。
(git についてまだ聞いたことがない場合は、git についていくつか説明します。)

最後のコミットが完成したアプリケーションを表しているとします。ここから、(Valencia CF などの) リリース用にプロジェクトをフォークできます。リソースのみを変更し、メイン プログラムでは何も変更しないようにしてください。メインの開発ブランチが最も開発されたバージョンのままであることが重要です!

したがって、2 番目と 3 番目のアプリをリリースした後、いくつかのバグ修正を行いたいと思うかもしれません。開発ブランチに戻り、コードをさらに改善し続けます。更新を提供したい他のすべてのチームのブランチを再び作成する次のリリースをヒットします。
したがって、更新されたバージョンのブランチがいくつかありますが、一方で同じリソースがあり、古いバージョンのすべてのアプリが既にスタイル設定されています。

魅力的な git クライアントをお持ちの場合は、変更したいファイルを簡単に選択できます。マージする個々のファイルがたくさんあるが、単純に大きなフォルダー +やのような少数のファイルがある場合、これは簡単なものから「wtf-MOAH-pcCra$hコンピューターを捨てる」ことまでさまざまです。res/android.manifest

別の可能性は、cherry-pickと呼ばれる git 機能を使用することです。私はそれを使用したことはありませんが、説明はあなたが望むものとほとんど同じように聞こえます:

1 つ以上の既存のコミットがある場合、それぞれが導入する変更を適用し、それぞれに新しいコミットを記録します。これには、作業ツリーがクリーンである必要があります (HEAD コミットからの変更はありません)。

(これは、私がそれを取り上げた豊富なSO スレッドです。)

Valencia CF 設計を再適用するために新しいバージョンを分岐したので、クリーンな作業ツリーができました。したがって、HEAD はクリーンであり、設計を既に適用した古いバージョンからコミットを選択できます。
リソースを更新する必要がある古いバージョンから新しいバージョンに何かが変更された可能性があります。(いくつかのビューは行きましたが、他のビューは導入されました)。ただし、先に進んで完了しますが、最終結果をコミットするようにしてください。このコミットは、開発中のブランチで既に作業を開始している、さらに優れたより優れたバージョンのチェリーピックになるためです。

あなたの質問とは直接関係ありませんが、ブランチを有利に使用する方法についての別のアイデアを提供する成功した Git ブランチ モデルも読むことをお勧めします。

とにかく、それが唯一の解決策だとは思いませんが、最も便利な方法のようです。あなたが行うすべての魔法はプロジェクトフォルダーにあるので、それらをコピーして貼り付け、手動または巧妙なプログラムを介して編集することができます. しかし、Eclipse プロジェクト ファイルがどこに保存されているかはわかりません。また、それらをコピーすると、Eclipse が少し混乱する可能性があります。(同じプロジェクト名ですが、プロジェクト パスが間違っているなど)。常に新しい Eclipse プロジェクトを作成することも、私には大変な作業のように思えます。git は IDE とは独立して連携しますが (これはプロジェクト内の余分なフォルダーにすぎません)、Eclipse を閉じて git 経由でブランチを切り替え、プログラムを再度開くだけで、適用した変更を取得できます。(OK、プロジェクトを右クリックして更新を押す必要があるかもしれません...そうです。)

于 2012-04-19T20:17:38.293 に答える
0

PhoneGap用のAppLaudEclipseプラグインのソースは、こちらから入手できます。作成されたプロジェクトの初期コンテンツは、このリソースディレクトリから取得されます。コンテンツを好きなように変更してから、プラグインを再構築できます。コードにはEPLライセンスがあるため、変更したものはすべてオープンソースにする必要があります。

于 2012-04-21T21:35:50.553 に答える
0

コードを 1 つのプロジェクトに配置して、jar ファイルを作成できます。このプロジェクトまたは jar を依存関係として「カスタマイズされたリソース」プロジェクトに追加するよりも。

于 2012-04-13T15:08:07.180 に答える