android - 混淆 Android 测试项目以及项目(在发布和混淆版本上运行测试)

标签 android testing proguard

假设我有一个带有测试的 Android 应用程序项目。

有什么方法可以针对发布版本运行我们的测试套件(在单独的测试项目中)?

最佳答案

阅读赏金评论后,我意识到 OP 实际上要求的不仅仅是简单的是/否回复,所以我打算将我的评论扩展为答案。一般来说,适当设计的 proguard.cfg 和项目结构足以避免这种困境。

典型的混淆器配置(参见第 7 节。完整的 Android 应用程序部分在 this link 中)保证在混淆过程中保留所有 android 相关的东西,如 Activity、View 等。更改配置没有任何意义,例如混淆 Acticity.onCreate() 方法,因为它显然会在运行时破坏应用程序。换句话说,一个设计良好的 proguard.cfg 将保护底层运行时框架的所有公共(public)接口(interface)并保持它们不变。

... ...

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

... ...

另一方面,Android 测试项目应该专注于测试 Android 组件(在混淆过程中有意保留),即 View 被正确渲染,按钮点击执行正确的任务,并且应该避免为不正确的 POJO 类编写测试依赖于任何 Android API,注意这些 POJO 是我们通常混淆的。最好在应用程序或引用的 java 项目中为这些 POJO 编写纯 junit 测试,以便在创建最终版本(混淆、签名和 zipaligned)之前在 maven 测试阶段涉及这些 junit 测试。另外,一个好的OO设计会屏蔽掉这些中间的POJO依赖,使它们对外透明,即运行时框架。

app/
  src/main/java/
  src/test/java/  <-- intermediate POJO tests put here.
  AndroidManifest.xml
  ... ...
app-test/
  src/main/java  <-- Android component tests put here.
  AndroidManifest.xml
  ... ...

在Android测试项目中编写POJO junit测试是绝对没问题的,但是,如果你仍然想保持测试项目针对混淆后的apk运行的能力,你需要适当调整应用项目的proguard.cfg并保留POJO类在混淆过程中以适应测试代码。

关于android - 混淆 Android 测试项目以及项目(在发布和混淆版本上运行测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14696503/

相关文章:

android - 当我使用 View.GONE 设置可见性时,我包含的布局不会填满整个空间

android - 如何在 Chrome 中获取上次/当前访问的 URL?

testing - 测试 Teamviewer ID 列表中的弱密码

testing - 网页横向滚动测试

java - 在JavaFX应用程序上运行Proguard后出现NoClassDefFoundError

android - Proguard 返回错误代码 1,错误找不到引用的类 android.support.v4.app

android - 在 Android Studio 上添加一个 2d 库(带有预先存在的布局文件)

testing - 通过桌面应用程序加载测试 Web 服务器

java - 使用 Proguard 转换类和资源时出错

android - 当我们滚动时,youtube 视频播放器与其他布局重叠