我在Android上寻找一种程序化方式,以确定我的设备当前连接的WIFI是使用WEP,WPA还是WPA2"保护".我尝试过谷歌搜索,我找不到一种程序化的方法来确定这一点.我还查看了TelephonyManager(http://developer.android.com/reference/android/telephony/TelephonyManager.html),它也缺少这些信息.
谢谢,J
我一直在尝试获取本地单元测试的代码覆盖率,但没有成功。
这是我所说的本地单元测试的参考。
https://developer.android.com/training/testing/unit-testing/local-unit-tests.html
为了运行我的单元测试,我使用以下 gradle 命令。
./gradlew clean testDebugUnitTest
此任务将运行单元测试,但是当我查看“build/jacoco”文件夹中生成的 jacoco 文件(testDebugUnitTest.ec)时,它始终显示空覆盖范围。
我已在 build.gradle 文件中启用了覆盖范围,如下所示。
android {
buildTypes {
debug {
testCoverageEnabled true
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎没有帮助。我有什么遗漏的吗?
请注意,如果我通过 Android Studio 运行本地单元测试,则一切正常。我单击“测试”模块,然后单击“运行覆盖率测试”。
我有几个Jenkins工作和几个Jenkins从属节点(物理机器).这些奴隶都在运行docker 1.12.1.我希望任何这些工作都能在这些奴隶上运行.由于这些作业具有不同的环境要求,我认为我可以为每个不同的环境创建docker镜像,然后在"作业"内部,指定作业将在哪个容器中运行.
这可能吗?即在这些作业中指定我希望这些作业运行的特定docker容器?在作业结束时,容器将被销毁,只剩下工件和报告.
Jenkins中有几个docker插件,但我找到了一个完全符合我想要的插件.
我目前正在使用 Android 开源项目构建自定义图像。我想将这些自定义图像(system.img、ramdisk.img、cache.img 等)发送给朋友,以便他/她无需编译整个 AOSP 分支即可运行它们。请注意,他们“确实”拥有最新的官方 Android SDK(不是 AOSP)。
有没有办法做到这一点?理想情况下,我希望有一些已经存在的 make 目标,我可以在其中简单地运行它(make avd-package)并且会弹出一个“avd”(或接近它的东西),这样我就可以将它发送给我的朋友和让他们输入:
模拟器 -avd
此外,根据我的研究,我希望这些图像可由普通 Android SDK(而非 AOSP)运行这一事实可能会带来问题,因为 Android SDK 中的工具与 AOSP 中的工具(例如 qemu 版本等)不同。 )。我还需要向我的朋友发送模拟器二进制文件吗?
谢谢!
我想延迟进入我的辅助功能服务的辅助功能事件,以便辅助功能事件之间的间隔为 2 秒。这样做的目的是为了让我不会处理太多的辅助功能事件并浪费电池寿命。
通过阅读文档,正确的方法似乎是在我的服务的 xml 中指定“android:notificationTimeout”属性。
<accessibility-service
android:accessibilityEventTypes="typeViewClicked|typeViewFocused"
android:packageNames="com.example.android.myFirstApp, com.example.android.mySecondApp"
android:accessibilityFeedbackType="feedbackSpoken"
**android:notificationTimeout="2000"**
android:settingsActivity="com.example.android.apis.accessibility.TestBackActivity"
android:canRetrieveWindowContent="true"
/>
Run Code Online (Sandbox Code Playgroud)
然而,由于某种原因,这个通知超时似乎没有被使用。只有“第一个”可访问性事件会延迟 2 秒,但随后我将立即收到任何后续事件,不会有任何延迟。
有趣的是,我注意到文档中有一个奇怪的地方。文档中似乎有两个“notificationTimeout”条目,它们的行为明显不同。
1) https://developer.android.com/reference/android/accessibilityservice/AccessibilityServiceInfo.html#notificationTimeout
The minimal period in milliseconds between two accessibility events of the same type are sent to this service. This setting can be changed at runtime by calling android.accessibilityservice.AccessibilityService.setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo).
2) https://developer.android.com/reference/android/accessibilityservice/AccessibilityServiceInfo.html#attr_android:notificationTimeout
The timeout after the most recent event of a given type before an AccessibilityService is notified.
Run Code Online (Sandbox Code Playgroud)
这很令人困惑。我想使用的“notificationTimeout”的变体是第一个。但是我不确定我该怎么做。我认为我可以通过使用 XML 属性来做到这一点,就像我在示例中所使用的那样。
有没有办法使用 Gradle 在 Android 上只运行失败的测试集?
目前,我按如下方式运行测试。
./gradle connectedDebugAndroidTest
Run Code Online (Sandbox Code Playgroud)
有些测试偶尔会由于难以控制的环境问题而失败,我想做的是只能运行那些失败的测试并将结果与之前的测试结果合并。
例如,如果我有 100 个测试并且 90 个成功,我想重新运行失败的 10 个测试。如果这 10 个第二次通过,我想将这些结果与原始测试运行合并。
看起来 Gradle 已经多次讨论过这个问题,但似乎还没有解决方案。
https://github.com/gradle/gradle/issues/4068
https://github.com/gradle/gradle/issues/4450
https://github.com/gradle/gradle/issues/1283
Run Code Online (Sandbox Code Playgroud)
谢谢!
从这里 ( https://developer.android.com/preview/features#embedded-dex ),您可以看到 Android 引入了一项新功能,允许使用嵌入式 dex 直接从 APK 中运行代码。
我很好奇这会有什么用?
指南说:
This option can help prevent an attack if an attacker ever managed to
tamper with the locally compiled code on the device."
Run Code Online (Sandbox Code Playgroud)
我的理解是,当您的 APK 安装时,它会被编译并作为优化的 dex 文件存储在 dalvik 缓存中。dalvik 缓存只能由系统用户访问,因此除非手机已 root,否则攻击者无法访问它。
如果手机是 root 的(并且攻击者以 root 身份运行),那么嵌入的 dex 文件仍然可以被篡改,因为攻击者可以修改 apk 并使用他们自己的密钥重新签名。
谢谢!
我有一个活页夹服务和一个生活在不同进程中的客户端.使用AIDL,当客户端调用我的远程绑定器服务时,有时我需要将错误(异常)中继回客户端.
但是,根据我的理解,这是不可能的.我尝试从我的活页夹服务中抛出一个"RemoteException",看看会发生什么,我得到了
未捕获的远程异常!(进程之间尚不支持例外.)
在我的logcat中.
由于看起来这是不可能的,通知客户端错误的最佳方法是什么?我以为我可以将我的AIDL转换为使用C风格的界面,我只返回错误代码(成功时为0),但这看起来很难看.
有更好的方法吗?
gradle 中是否有一个任务可以简单地从 maven 存储库下载依赖项?
我的 build.gradle 文件中的依赖项指定如下。
dependencies {
compile 'com.google.firebase:firebase-ads:9.8.0'
}
Run Code Online (Sandbox Code Playgroud)
我能够做到这一点的唯一方法是实际执行构建(例如 ./gradlew build ),但是如果我只想检索依赖项,这将花费太多时间。
我已经在测试中使用okhttp的模拟Web服务器(https://github.com/square/okhttp/tree/master/mockwebserver)进行了相当多的测试,并且效果很好。从阅读文档和浏览Google来看,该库似乎确实是测试的目标。
我的问题是,是否有任何原因导致我不能在生产代码中使用它?我有一个正在使用的android应用程序,需要模拟Web服务器。我已经对其进行了集成,并且运行良好,但是我担心自己的操作是否存在某些问题。
另外,在生产中使用模拟Web服务器时,是否应注意任何安全风险?
谢谢!
我目前对为 ARM-v7a 和 ARM64-v8a 架构构建 Android SDK 工具(aapt、adb 等)感兴趣,以便它可以直接在 Android 设备上运行。这可能吗?
我能够按照文档轻松地为 x86/x86_64 构建 Android SDK 工具。
https://source.android.com/setup
为此,我执行了以下步骤。
mkdir ~/WORKING_DIRECTORY
cd ~/WORKING_DIRECTORY
repo init -u https://android.googlesource.com/platform/manifest -b master -g all,-notdefault,tools
repo sync
. build/envsetup.sh
lunch sdk-eng
make sdk
Run Code Online (Sandbox Code Playgroud)
如上所述,这将为 x86/x86_64 构建 android SDK 工具。我只是不确定如何为其他架构构建工具。
我知道您可以为 make 目标指定所需的架构。例如,“make aosp_arm-eng”将为 arm 环境构建映像。但是,当我尝试“make sdk_arm-eng”时,它告诉我目标不存在。
任何帮助将不胜感激。
编辑:
看起来 Debian 在这里有用于 aapt 和其他 android 工具的 arm/arm64 包。
https://packages.debian.org/buster/aapt
但是,由于依赖关系,这些似乎无法在实际的 android 设备上运行。
/android-sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-readelf -a aapt | grep Shared
Type: DYN (Shared object file)
0x0000000000000001 (NEEDED) …Run Code Online (Sandbox Code Playgroud)