5

我想为我的 android 项目设计两个自定义应用程序。自定义应用程序是扩展应用程序的应用程序。我希望我的发布版本有一个自定义应用程序,而调试版本有另一个。LeakCanary 站点在标记为“自定义和使用无操作依赖项”的部分中讨论了一点。

我似乎无法弄清楚如何在 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

如果您需要使用两个不同的类,您总是可以利用清单合并。在调试文件夹中,添加您的第二个应用程序类和仅包含新应用程序名称的清单

<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 中声明另一个应用程序。

清单中只有一个。

因此,如果我正确理解 buildTypes,那么如果我只有一个用于发布和调试的主文件夹(它是默认/回退),但是如果我指定一个调试文件夹,那么如果我运行任何调试风格,我可能会有 mockDebug、qaDebug等然后它会首先在调试文件夹中查找文件,然后如果找不到则转到主目录,对吗?

假设这mockDebug是一种mock风味和debug构建类型(同样适用于qaDebug),那么是的。

因此,您的Application类在debugrelease构建类型中的同一个 Java 包中。清单和使用您的Application类的 Java 代码将在该 Java 包中引用它。您获得哪个版本的Application课程取决于您是进行debug构建还是release构建。

另外,那么我将如何在我的清单中声明要使用哪一个?

和平常一样。

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 回答