在Android Studio之前,测试和Android应用程序涉及一个单独的Android项目,在为生产而构建时将被忽略。使用Android Studio,生产代码和测试代码存在于同一项目中,该项目本身只有一组其他任何项目( list , Assets ,资源)。
在这种情况下,如何定义仅用于测试的自定义 Activity ?为了让Android允许启动任何Activity,必须在 list 中声明它。有没有办法解决这个限制?如何指示Android加载仅测试的 Activity 而不污染项目的生产方面?
最佳答案
这是操作方法。
1.在build.gradle中定义一个新的构建类型:
buildTypes {
extraActivity {
signingConfig signingConfigs.debug
debuggable true
}
}
在我的系统中,我给了它调试签名配置并将其设置为可调试;按您认为合适的方式进行配置。
2.单击使用Gradle文件同步项目按钮。
3.从“构建变体”窗口中选择新的构建类型。
4.为新的构建类型设置源目录
在我的示例中,我的文件位于
com.example.myapplication3.app
Java包中。src/extraActivity/java/com/example/myapplication3/app
src/extraActivity/res
5.在文件夹中为您的构建类型创建新 Activity
请注意,如果右键单击该程序包并选择“新建”>“ Activity ”,则存在一个错误,它将不会将用于 Activity 的文件放入新的构建类型的文件夹中,而是会将其放入src / main中。如果这样做,则必须手动将文件管理器移至正确的文件夹。
6.在src / extraActivity中创建一个AndroidManifest.xml文件
该 list 与src / main中的版本合并,因此仅在原始文件的顶部添加需要覆盖的位:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication3.app" >
<application>
<activity
android:name=".ExtraActivity"
android:label="Extra Activity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
在我的示例中,我将新 Activity 设置为启动器 Activity ,以便可以在“应用程序”屏幕中看到它并确认它正在运行。您可能不需要这样做。由于我为应用程序提供了两个启动器图标,因此我还需要遵循Two launcher activities上的建议,并将其添加到我的主要 Activity 的
intent-filter
中(在src / main / AndroidManifest.xml中);您可能也不需要这样做:<category android:name="android.intent.category.DEFAULT"/>
完成所有这些后,这是我的项目布局的屏幕截图:
这对我有用。我可以在Build Variants窗口中来回切换构建类型(您可以在上面的屏幕快照的左侧看到其选项卡);构建debug变量只会给我一个 Activity ,而构建extraActivity变量会给我两个 Activity 。