我的 AAR 清单中有一个占位符。当我使用 assembleRelease/assembleDebug 时,AAR 构建没有问题,但是当我运行我的 Android 检测测试时,gradle 无法构建检测 APK 并抛出一个错误,看起来像这样
Attribute <blah-blah>@<xyz> at manifestMerger....xml requires a placeholder substitution but no value for <my-place-holder> is provided.
Run Code Online (Sandbox Code Playgroud)
仅出于测试目的(并确认我是否可以为特定构建类型设置占位符的值),我在调试构建类型中设置了占位符值:
android { ... buildTypes { debug { manifestPlaceholders = [my-place-holder:"my-value"]
Run Code Online (Sandbox Code Playgroud)
它起作用了(发布版本保留了占位符,而在调试版本中替换了占位符)。但是,我不想(实际上也不应该)这样做,因为这意味着我的调试版本将覆盖 AAR 清单中的占位符,但我必须将占位符保留在清单中,以便我的 AAR 用户可以覆盖它.
有人知道如何仅将 manifestPlaceholders 分配给检测 APK?
我正在Mac(macOS Sierra 10.12.6)中构建AOSP 8,而Jack因未知内部错误而失败
Internal unknown error (415), try 'jack-diagnose' or see Jack server log
Run Code Online (Sandbox Code Playgroud)
杰克诊断显示:
ps: illegal argument: -o
usage: ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]]
[-g grp[,grp...]] [-u [uid,uid...]]
[-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]
ps [-L]
Port 8073 is used by another process (pid=), please ensure to free the port or change port configuration in '/Users/user/.jack-settings' and '/Users/user/.jack-server/config.properties'
ps: illegal argument: -o
usage: ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]]
[-g grp[,grp...]] …Run Code Online (Sandbox Code Playgroud) 我正在一个Android应用程序中工作,其中一个共享库(我在Android Studio中构建,我们称之为libA.so)动态地由供应商加载另一个共享库提供程序(我们称之为libB.so)。我知道我不应该在我的应用程序中使用多个C ++运行时库(https://developer.android.com/ndk/guides/cpp-support.html#important_considerations),因此我们决定在其中使用c ++ _ shared两个库。
libB.so(由卖方提供的库)在构建AOSP时进行编译和链接(卖方坚持以这种方式构建库,对此无法做很多事情)。的makefile libB.so将此STL标志设置为c ++ _ shared:
LOCAL_NDK_STL_VARIANT := c++_shared
Run Code Online (Sandbox Code Playgroud)
当我查看libB.so库中的NEEDED标签时,可以看到对libc++.so
0x0000000000000001 (NEEDED) Shared library: [libdl.so]
0x0000000000000001 (NEEDED) Shared library: [libc++.so] <----
0x0000000000000001 (NEEDED) Shared library: [libc.so]
0x0000000000000001 (NEEDED) Shared library: [libm.so]
0x000000000000000e (SONAME) Library soname: [libB.so]
Run Code Online (Sandbox Code Playgroud)
当我运行readelf -d libc++.so检查AOSP的libc ++。so的内容时
Dynamic section at offset 0xe4b40 contains 29 entries:
Tag Type Name/Value
0x0000000000000003 (PLTGOT) 0xe6310
0x0000000000000002 (PLTRELSZ) 22128 (bytes)
0x0000000000000017 (JMPREL) 0x39ff8
0x0000000000000014 …Run Code Online (Sandbox Code Playgroud) 我知道这个主题有很多问题(和答案),但我已经尝试了在SO和其他网站上找到的所有内容,而且我还没有找到一种方法让JaCoCo包括使用Mockito的Android测试的覆盖范围.
我的问题:我想使用JaCoCo生成单元测试和仪器测试(androidTest)的代码覆盖率.我正在使用Mockito来模拟一些课程.我在GitHub中找到了一个使用JaCoCo的样本并将其作为起点.
https://github.com/rafaeltoledo/unified-code-coverage-android
当我运行该示例中包含的自定义jacocoTestReport任务时,代码覆盖率报告已正确生成,代码覆盖率为100%.该报告包括单元测试和android测试.但是,该示例不使用Mockito(我需要),因此我将以下内容添加到app/build.gradle中
dependencies {
...
androidTestCompile 'org.mockito:mockito-android:2.10.0'
}
Run Code Online (Sandbox Code Playgroud)
我在app/src/main/java/net/rafaeltoledo/coverage/Util.java中添加了一个名为Util的非常简单的Java类
public class Util {
public int anIntMethod() {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
并将以下简单测试添加到app/src/androidTest/java/net/rafaeltoledo/coverage/MainActivityTest.java中的现有android测试
@Test
public void utilMethod() {
Util util = Mockito.mock(Util.class);
Mockito.doReturn(10).when(util).anIntMethod();
assertThat(util.anIntMethod(), is(10));
}
Run Code Online (Sandbox Code Playgroud)
当我再次运行jacocoTestReport时,代码覆盖率降至88%,并且报告实际上显示我的测试未涵盖Util类,即使我显然有一个练习该类的测试.
(我想添加报告的截图,但我没有足够的声誉,所以这里有一个覆盖报告和执行报告的链接,表明两个测试实际上都已执行)
版本信息:Gradle插件:2.3.3 Jacoco:0.7.8.201612092310 Android Studio:2.3.3 Android构建工具:25.0.2
这是Jacoco限制还是我做错了什么?
android mockito jacoco android-gradle-plugin android-instrumentation