5

Android プロジェクト用に 2 つのカスタム アプリケーションを設計したいと考えています。カスタム アプリケーションは、アプリケーションを拡張するアプリケーションです。リリース ビルドにカスタム アプリケーションを追加し、デバッグ ビルドに別のアプリケーションを追加したいと考えています。LeakCanary サイトでは、「 no-op 依存関係のカスタマイズと使用」というラベルの付いたセクションでこれについて説明しています

AndroidManifestで別のアプリケーションを宣言する方法がわかりません。現在、次のような単一のカスタム アプリケーションを使用するように設定しています。

public class MyFirstCustomApplication extends Application {

@Override public void onCreate() {
    super.onCreate();
    LeakCanary.install(this);
}
}

上記のコードをデバッグ専用にするにはどうすればよいですか?

androidManifest オーバーライドは次のようになります。

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:name="org.somesite.cool.MyFirstCustomApplication">

別の MySecondCustomApplication をリリースするにはどうすればよいですか?

更新:gradleでbulidTypesを調べるという提案について、デバッグアプリケーションのオーバーライドのために次の構造を作成したと想像してください:

[Project Root]
  -[Module]
    -src
      -main
        -ExampleApplication 
        -res

      -debug
        -DebugExampleApplication
        -res

したがって、buildTypes を正しく理解していれば、リリースとデバッグの両方に使用されるメイン フォルダー (デフォルト/フォールバック) しかない場合でも、デバッグ フォルダーを指定すると、デバッグ フレーバーを実行すると、mockDebug、qaDebug のようになる可能性があります。などの場合、最初にファイルのデバッグ フォルダーを検索し、見つからない場合はメインに移動しますが、それは正しいですか?

また、マニフェストでどちらを使用するかをどのように宣言しますか? gradle ファイルはどのようになりますか?

4

2 に答える 2

7

2 つの異なるクラスを使用する必要がある場合は、いつでもマニフェストのマージを利用できます。デバッグ フォルダーに、2 番目のアプリケーション クラスと、新しいアプリ名のみを含むマニフェストを追加します。

<manifest package="your.package"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <application
        android:name=".DebugExampleApplication"
        tools:replace="android:name"/>
</manifest>
于 2015-12-10T06:06:43.500 に答える
3

AndroidManifestで別のアプリケーションを宣言する方法がわかりません。

マニフェストには 1 つしかありません。

したがって、buildTypes を正しく理解していれば、リリースとデバッグの両方に使用されるメイン フォルダー (デフォルト/フォールバック) しかない場合でも、デバッグ フォルダーを指定すると、デバッグ フレーバーを実行すると、mockDebug、qaDebug のようになる可能性があります。などの場合、最初にファイルのデバッグ フォルダーを検索し、見つからない場合はメインに移動しますが、それは正しいですか?

mockDebugそれがmockフレーバーとdebugビルドタイプであると仮定すると(および同様にqaDebug)、はい.

したがって、およびビルド タイプApplicationの同じ Java パッケージにクラスがあります。マニフェスト、およびクラスを使用する Java コードは、その 1 つの Java パッケージでそれを参照します。取得するクラスのエディションは、ビルドを行っているかビルドを行っているかによって異なります。debugreleaseApplicationApplicationdebugrelease

また、マニフェストでどちらを使用するかをどのように宣言しますか?

通常と同じです。

gradle ファイルはどのようになりますか?

このための Gradle ビルド ファイルを変更する必要はありません。

GradleでbulidTypesを調べるという提案について、デバッグアプリケーションのオーバーライドのために次の構造を作成したと想像してください

いいえ、少なくともプロジェクト ツリーの見方としては。次のようになります。

[Project Root]
  -[Module]
    -src
      -main
        -java
          - your.package.here
            - Things.java
            - ThatAre.java
            - NotYourCustomApplication.java
            - ButOtherwiseAreCommon.java
            - ForAllBuildTypes.java
        -res

      -debug
        -java
          - your.package.here
            - YourCustomApplication.java
        -res

      -release
        -java
          - your.package.here
            - YourCustomApplication.java
        -res

ビルドタイプ固有のソースセットのそれぞれでyour.package.here同じであることに注意してください。YourCustomApplication.java

于 2015-08-01T23:23:59.050 に答える