如何在Android Studio中安装自定义APK并创建对应测试、获取AndroidManifest.xml?
解决Android UI自动化中APK导入、Manifest获取及测试关联问题
一、在Android Studio中安装自定义APK
- 直接通过ADB命令安装:连接设备后,打开Android Studio的Terminal,执行
adb install /本地APK文件路径/your-app.apk,无需通过Analyze APK功能导入 - 若已将APK传到设备,可执行
adb install /sdcard/your-app.apk(需先把APK拖到设备的/sdcard/目录,可通过Device File Explorer操作)
二、获取APK对应的AndroidManifest.xml文件
方式1:通过Android Studio的APK分析工具
- 打开
Build > Analyze APK,选择目标APK - 在左侧面板的根目录下找到
AndroidManifest.xml(AS会自动反编译为可读格式) - 右键该文件,选择
Save As即可导出到本地
方式2:通过AAPT命令
打开Terminal,执行以下命令直接导出Manifest内容到文件:
aapt dump xmltree your-app.apk AndroidManifest.xml > manifest.xml
注:需确保AAPT工具在系统环境变量中,或使用Android SDK路径下的build-tools/版本号/aapt执行命令
三、关联APK与UI测试代码
1. 配置测试模块的build.gradle
在测试模块(通常是app模块)的build.gradle(Module级)中添加以下配置:
android { defaultConfig { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // 替换为被测APK的包名(从Manifest的package属性获取) testApplicationId "com.your.target.app.package" } } dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation 'androidx.test.ext:junit:1.1.5' }
2. 指定被测APK并运行测试
- 通过Android Studio界面配置:
- 打开Run Configuration,选择你的测试类
- 在
Deployment选项中,选择APK from app bundle or APK,然后选中目标被测APK - 点击运行按钮即可启动测试
- 通过ADB命令运行:
先确保被测APK和测试APK都已安装到设备,然后执行:
替换adb shell am instrument -w com.your.test.package/androidx.test.runner.AndroidJUnitRunnercom.your.test.package为你的测试模块包名
3. 基础测试代码示例
以Espresso测试为例,需替换为被测应用的实际Activity和控件ID:
import androidx.test.espresso.Espresso; import androidx.test.espresso.matcher.ViewMatchers; import androidx.test.ext.junit.rules.ActivityScenarioRule; import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class AppUITest { // 替换为被测应用主Activity的全类名(从Manifest的activity标签获取) @Rule public ActivityScenarioRule<MainActivity> activityRule = new ActivityScenarioRule<>(MainActivity.class); @Test public void verifyMainPageDisplayed() { // 验证主页面目标控件是否显示 Espresso.onView(ViewMatchers.withId(R.id.main_content)).check(ViewMatchers.isDisplayed()); } }
内容的提问来源于stack exchange,提问作者Priya
相关产品推荐
相关产品推荐

