Sni*_*las 5 testing android proguard
假设我有一个带有测试的Android应用程序项目.
有没有什么办法可以针对发布版本运行我们的测试套件(在一个单独的测试项目中)?
阅读赏金评论后,我意识到OP实际上问的不仅仅是简单的是/否答复,所以我将把我的评论扩展到答案。一般来说,设计合理的 proguard.cfg 和项目结构足以防止这种困境。
典型的 proguard 配置(请参阅此链接中的第 7 节:完整的 Android 应用程序部分)保证在混淆过程中保留所有与 Android 相关的内容,如 Activity、View 等。改变配置没有任何意义,例如混淆 Acticity.onCreate() 方法,因为它显然会在运行时破坏应用程序。换句话说,设计良好的 proguard.cfg 将保护底层运行时框架的所有公共接口并保持它们不变。
... ...
-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*(...);
}
... ...
Run Code Online (Sandbox Code Playgroud)
另一方面,Android 测试项目应该专注于测试 Android 组件(在混淆过程中有意保留),即视图正确呈现,单击按钮执行正确的任务,并且应该避免为不依赖于任何内容的 POJO 类编写测试。 Android API,注意这些POJO是我们通常混淆的。最好在应用程序或引用的 java 项目中为这些 POJO 编写纯 junit 测试,以便在创建最终版本(混淆、签名和压缩对齐)之前在 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
... ...
Run Code Online (Sandbox Code Playgroud)
在 Android 测试项目中编写 POJO junit 测试绝对没问题,但是,如果您仍然想保持针对混淆后的 apk 运行测试项目的能力,则需要正确调整应用程序项目的 proguard.cfg 并在混淆期间保留 POJO 类为了适合测试代码。
归档时间: |
|
查看次数: |
1382 次 |
最近记录: |