Android联机或者模拟器单独测试Activity的辅助Activity示例开发

简介:

   想起写个单独测试Activity的辅助Activity的原因是在联机测试的时候IDEA或者Android Studio中的指定运行Activity功能没法使用了。

 

   下面付IDE中指定运行Activity的界面截图:

    wKiom1ZId3ezyUiNAAEPbwkDMQM234.png



    辅助Activity要做的事情是将辅助Activity作为启动的默认Activity,其主界面中以ListView的形式展示所有Activity,通过单击ListView的Item项来启动要测试的Activity。


   1. 辅助Activity代码示例:

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package  secondriver.app;
 
import  android.app.Activity;
import  android.content.Context;
import  android.content.Intent;
import  android.content.pm.ActivityInfo;
import  android.content.pm.PackageInfo;
import  android.content.pm.PackageManager;
import  android.os.Bundle;
import  android.util.Log;
import  android.view.View;
import  android.view.ViewGroup;
import  android.widget.AdapterView;
import  android.widget.ArrayAdapter;
import  android.widget.LinearLayout;
import  android.widget.ListView;
 
import  java.util.ArrayList;
import  java.util.Arrays;
import  java.util.List;
 
/**
  * Created by Broncho on 2015/11/15.
  */
public  class  TestActivitiesActivity  extends  Activity  implements  AdapterView.OnItemClickListener {
 
     private  LinearLayout mRootView;
     private  ListView mListView;
     private  ArrayAdapter mAdapter;
     private  List<Class> mAllActivities;
 
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         initView();
         mAllActivities = getActivities( this this .getPackageName(), Arrays.<Class>asList( this .getClass()));
         mAdapter =  new  ArrayAdapter( this , android.R.layout.simple_list_item_1, android.R.id.text1, mAllActivities);
         mListView.setAdapter(mAdapter);
         mListView.setOnItemClickListener( this );
     }
 
     private  void  initView() {
         mRootView =  new  LinearLayout( this );
         mListView =  new  ListView( this );
         mListView.setId(android.R.id.list);
         mRootView.addView(mListView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
         setContentView(mRootView);
     }
 
     @Override
     public  void  onItemClick(AdapterView<?> parent, View view,  int  position,  long  id) {
         Class activity = mAllActivities.get(position);
         //启动指定的Activity
         startActivity( new  Intent( this , activity));
     }
 
     /**
      * 获取所有要测试的Activity Class
      *
      * @param context
      * @param packageName
      * @param excludeActivities
      * @return
      */
     public  static  List<Class> getActivities(Context context, String packageName, List<Class> excludeActivities) {
         final  String TAG =  "GET_ACTIVITY" ;
         List<Class> includeActivities =  new  ArrayList<>();
         try  {
             PackageInfo packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
             if  (packageInfo.activities !=  null ) {
                 ActivityInfo[] activityInfos = packageInfo.activities;
                 Log.d(TAG,  "Find "  + activityInfos.length +  " activity in AndroidManifest.xml." );
                 for  (ActivityInfo activityInfo : activityInfos) {
                     Class activityClass;
                     String activityName = activityInfo.name;
                     try  {
                         activityClass = Class.forName(activityName);
                         if  (Activity. class .isAssignableFrom(activityClass)) {
                             includeActivities.add(activityClass);
                         }
                     catch  (ClassNotFoundException e) {
                         Log.d(TAG,  "Class not found activity "  + activityName +  " in package "  + packageName);
                     }
                 }
             }
             Log.d(TAG,  "Found  "  + includeActivities.size() +  " activity list is :"  + Arrays.toString(includeActivities.toArray()));
             if  ( null  != excludeActivities) {
                 includeActivities.removeAll(excludeActivities);
             }
             Log.d(TAG,  "Last  "  + includeActivities.size() +  " activity  list is :"  + Arrays.toString(includeActivities.toArray()));
         catch  (PackageManager.NameNotFoundException e) {
             Log.d(TAG,  "Android system not found package "  + packageName);
         }
         return  includeActivities;
     }
}


   在AndroidManifest.xml中讲辅助Activity设置为默认启动的Activity,之后就可以通过选择点击要启动的Activity来进行测试。该示例还可以通过添加一些代码来增强,比如启动Activity的时候可以通过输入对话框的方式携带数据至启动的Activity。测试完成后删除或者充足默认启动的Activity即可。


  2.  配置AndroidManifest.xml :

  

1
2
3
4
5
6
7
8
< activity  android:name = ".TestActivitiesActivity" >
     < intent-filter >
         < action  android:name = "android.intent.action.MAIN" />
         < category  android:name = "android.intent.category.LAUNCHER" />
     </ intent-filter >
</ activity >
< activity  android:name = ".OneActivity" />
< activity  android:name = ".TwoActivity" />


    3. 调试日志:

    

1
2
3
11 - 15  20 : 07 : 31.899  10665 - 10665 /secondriver.app D/GET_ACTIVITY: Find  3  activity in AndroidManifest.xml.
11 - 15  20 : 07 : 31.899  10665 - 10665 /secondriver.app D/GET_ACTIVITY: Found activity have  3  list is :[ class  secondriver.app.TestActivitiesActivity,  class  secondriver.app.OneActivity,  class  secondriver.app.TwoActivity]
11 - 15  20 : 07 : 31.899  10665 - 10665 /secondriver.app D/GET_ACTIVITY: Last activity have  2  list is :[ class  secondriver.app.OneActivity,  class  secondriver.app.TwoActivity]


   从日志中可以看到一共发现了3个Activity类,去除辅助的Activity,在ListView中讲显示2个Item项。

   

   


        后期追加内容:

    4. 结果效果图

      

      wKiom1Z9CICQdz3EAADuSj8GZYI065.png


    新源码参见附件:TestActivitiesActivity.java.txt

       Item状态变化Drawable文件内容如下:

    wKioL1Z9ClrwclwZAABCZpQXEH0764.png



本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1712943,如需转载请自行联系原作者

相关文章
|
25天前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
161 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
2月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
44 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
5月前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
67 1
|
6月前
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
368 4
Android性能测试——发现和定位内存泄露和卡顿
|
6月前
|
测试技术 Shell Android开发
Android 性能测试初探 (六)
本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试,但本系列文章都不去一一探讨了。
98 6
|
6月前
|
JavaScript 测试技术 Android开发
Android 性能测试初探 (四)
本文介绍了GPU在移动端性能测试中的重要性,并详细解释了过度绘制、帧率和帧方差的概念。针对GPU测试,文章列举了三项主要测试内容:界面过度绘制、屏幕滑动帧速率和平滑度。其中,过度绘制测试需遵循特定标准,而帧速率和平滑度测试则可通过软件或硬件方法实现。在软件测试中,使用Systrace插件和高速相机是两种常用手段。对于不同机型,帧率及帧方差的测试标准也需相应调整。
84 5
|
6月前
|
测试技术 Shell Android开发
Android 性能测试初探 (三)
本文承接《Android性能测试初探(二)》,深入探讨CPU与内存测试。介绍了移动端内存测试的重要性及其测试目标,并详细列举了不同状态下应用内存消耗情况的测试项目。此外,还提供了多种内存测试方法,包括使用`procrank`等工具的具体操作步骤。最后,文章也简要提及了CPU测试的相关内容,帮助读者更好地理解Android性能测试的关键要素。
79 5
|
6月前
|
测试技术 Shell 定位技术
Android 性能测试初探 (五)
聊聊大家不常关注的测试项- 功耗
79 3
|
6月前
|
算法 测试技术 Android开发
Android 性能测试初探 (二)
上回大体介绍了下在 android 端的性能测试项,现在我们就细节测试项做一些阐述(包括如何自己 DIY 测试)
87 4
|
6月前
|
测试技术 API Android开发
Android 性能测试初探 (一)
Android 性能测试,跟pc性能测试一样分为客户端及服务器,但在客户端上的性能测试分为 2 类: 一类为 rom 版本的性能测试;一类为应用的性能测试。
84 3

热门文章

最新文章