小编pix*_*xel的帖子

如何在Android中模拟PreferenceManager?

我写了一个正在使用的类,Context第三方库和SharedPreferences来自PreferenceManager.

可以模拟Context,第三方库可以使用一些模拟框架进行模拟,但该怎么办PreferenceManager

我有两种方法:

public void saveString(ThirdPartyObject obj) {
    SharedPreferences appPreferences = 
        PreferenceManager.getDefaultSharedPreferences(mContext);
    SharedPreferences.Editor editor = appPreferences.edit();
    editor.putString(mContext.getString(
        R.string.preferences_string_name), obj.getString());
    editor.commit();
}
Run Code Online (Sandbox Code Playgroud)

和相应的,加载首选项.

android unit-testing mocking android-preferences

17
推荐指数
1
解决办法
6881
查看次数

注释处理器生成的资源未打包到APK

我有自定义注释处理器生成工厂类和META-INF/services/factory.interface.class资源.

注释处理器用于库项目,所有生成的文件都正确打包到AAR中.

当我在应用程序项目中使用注释处理器时,库作为依赖项添加,只有库META-INF/services/factory.interface.class中的类存在APK/META-INF/services/factory.interface.class

经过一番调查,我意识到MergeJavaResourcesTransform在android-gradle-plugin-1.5.0(和2.0.0-alpha3)中寻找合并所有exploded-aars,jars和intermediates/sourceFolderJavaResources

有没有办法合并META-INFintermediates/classes(这是从哪里注释处理器资源文件获得创建),或使注释处理器创建的文件sourceFolderJavaResources

到目前为止,我发现的唯一解决方法是添加CopyTask应用程序的buildscript

android.applicationVariants.all { variant ->
  def variantName = variant.name
  def variantNameCapitalized = variantName.capitalize()
  def copyMetaInf = tasks.create "copyMetaInf$variantNameCapitalized", Copy
  copyMetaInf.from project.fileTree(javaCompile.destinationDir)
  copyMetaInf.include "META-INF/**"
  copyMetaInf.into "build/intermediates/sourceFolderJavaResources/$variantName"
  tasks.findByName("transformResourcesWithMergeJavaResFor$variantNameCapitalized").dependsOn copyMetaInf
}
Run Code Online (Sandbox Code Playgroud)

但我不打算强制编译库,用户除了添加依赖项之外还做更多的事情.

android annotations meta-inf gradle

15
推荐指数
1
解决办法
877
查看次数

如何在android中切换方向锁?

我想在我的偏好Activity中创建复选框,允许用户切换方向更改.

在类似的问题中,人们只编写完整的方向锁(通过覆盖onConfigurationChanged方法或在AndroidManifest.xml中添加configChanges)或方向强制(通过setRequestedOrientation).

有没有办法切换方向锁?


编辑:我创建了一个方法,将首选方向设置为三种状态之一:横向,纵向和传感器.此方法与检索方向getResources().getConfiguration().orientation)和将检索到的方向保存到首选项一起使用.然后在需要锁定方向的活动中,我使用首选项的首选方向来激活此方法.

private static void setActivityOrientation(Activity activity, int preferenceOrientation) {
    if (preferenceOrientation == Configuration.ORIENTATION_LANDSCAPE) { 
        if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ 
        // You need to check if your desired orientation isn't already set because setting orientation restarts your Activity which takes long
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
    } else if (preferenceOrientation == Configuration.ORIENTATION_PORTRAIT) {
        if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }    
    } else {
        if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_SENSOR){
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java android orientation

14
推荐指数
1
解决办法
2万
查看次数

Google Play服务活动识别 - 电池使用?

Google Play服务组件是始终确定用户当前的活动,还是仅在连接应用以接收活动更新时?该文件是不是这个是很清楚,它只是说,它在一般最小的电池影响.我想知道一个应用程序是否经常查询用户当前的活动(例如,间隔2分钟)是否会给用户的电池带来额外的压力.

android battery google-play-services

14
推荐指数
1
解决办法
1638
查看次数

AAPT2编译失败:Windows上的Android 3.0 Canary 1上的无效维度

我将AndroidStudio升级到3.0 Canary 1后出现此问题

Error:D:\Project\Freelance\Andoid\sosokan-android\sosokan-android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:911 invalid drawable
Error:java.lang.RuntimeException: com.android.builder.internal.aapt.AaptException: AAPT2 compile failed:
Error:Execution failed for task ':app:mergeDebugResources'.
> Error: java.lang.RuntimeException: com.android.builder.internal.aapt.AaptException: AAPT2 compile failed:
  aapt2 compile -o D:\Project\Freelance\Andoid\sosokan-android\sosokan-android\app\build\intermediates\res\merged\debug D:\Project\Freelance\Andoid\sosokan-android\sosokan-android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml
  Issues:
   - ERROR: D:\Project\Freelance\Andoid\sosokan-android\sosokan-android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:911 invalid drawable
Run Code Online (Sandbox Code Playgroud)

它看起来相同 AAPT2编译失败:Android 3.0 Canary 1上的无效Dimen但是我找不到让它在Window上工作的方法

任何帮助或建议将非常感谢.

windows android aapt android-studio

14
推荐指数
2
解决办法
2648
查看次数

限制 Push 和 Pull_request 上的 GitHub 操作工作流程并发性?

我想将我的工作流程的并发限制为一次运行:

on:
  pull_request:
    paths:
      - 'foo/**'
  push:
    paths:
      - 'foo/**' 

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true
Run Code Online (Sandbox Code Playgroud)

但是,我发现 forpush head_ref是空的并且run_id始终是唯一的(如下所述: https: //docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-using- a-后备值)

如何创建一个在事件中保持不变的并发pull_requestpush

github github-actions

14
推荐指数
2
解决办法
7093
查看次数

Java是否检查"&&"(和)运算符中的所有参数,即使其中一个是假的?

我有这样的代码:

if(object != null && object.field != null){
    object.field = "foo";
}
Run Code Online (Sandbox Code Playgroud)

假设该对象为null.

此代码是否导致nullPointerException或只是if语句不会被执行?

如果是这样,如何重构这段代码更优雅(如果可能的话)?

java short-circuiting logical-operators and-operator

13
推荐指数
2
解决办法
7118
查看次数

当我运行我的Android UIAutomator代码时,它显示错误

当我运行我的Android UIAutomator代码时,它显示以下错误.

INSTRUMENTATION_RESULT:shortMsg = java.lang.RuntimeException
INSTRUMENTATION_RESULT:longMsg = com.android.ui.testing
INSTRUMENTATION_CODE:0

我刚刚运行了developer.android.com中给出的示例代码
如何解决此错误?

日志附在下面:

01-05 01:07:53.559: D/AndroidRuntime(5712): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
01-05 01:07:53.559: D/AndroidRuntime(5712): CheckJNI is ON
01-05 01:07:53.559: E/AndroidRuntime(5712): cannot open customer xml file
01-05 01:07:53.559: E/AndroidRuntime(5712): /system/csc/customer.xml can't open file
01-05 01:07:53.564: D/AndroidRuntime(5712): readGMSProperty: start
01-05 01:07:53.564: D/AndroidRuntime(5712): readGMSProperty: already setted!!
01-05 01:07:53.564: D/AndroidRuntime(5712): readGMSProperty: end
01-05 01:07:53.589: D/dalvikvm(5712): Trying to load lib libjavacore.so 0x0
01-05 01:07:53.599: D/dalvikvm(5712): Added shared lib libjavacore.so 0x0
01-05 01:07:53.609: D/dalvikvm(5712): Trying to load …
Run Code Online (Sandbox Code Playgroud)

android ui-automation android-testing

13
推荐指数
1
解决办法
5795
查看次数

Reactor将Mono <Boolean>映射到Mono <Void>

我有返回的函数,Mono<Boolean>我想将它映射到Mono<Void>(因为这是我在Controller方法中返回的东西).

有没有更好的方法来返回这样的Mono而不是.flatMap { Mono.empty<Void>() }

我无法使用.map{ null }因为映射功能无法接受nulls.

spring project-reactor

13
推荐指数
1
解决办法
6890
查看次数

Gradle无法使用版本RELEASE找到Maven父依赖项

我有一个带有pom.xml的"项目B",如下所示:

<parent>
    <groupId>org.company</groupId>
    <artifactId>projectA</artifactId>
    <version>RELEASE</version>
</parent>

<artifactId>projectB</artifactId>
<version>0.0.1</version>
Run Code Online (Sandbox Code Playgroud)

其中"项目B"将"项目A"作为父项目pom.

我正在尝试使用gradle创建一个新的"项目C",如果我想使用"项目B"作为依赖项,我指定build.gradle如下:

repositories {
    maven {
         url "http://mycompany:8081/artifactory/repository"
    }
}

dependencies {
    compile group: 'org.company', name: 'projectB', version: '0.0.1'
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

无法解析org.company:projectB:0.0.1.

无法解析POM http:// company:8081/artifactory/repository/org/company/projectB/0.0.1/projectB-0.0.1.pom

找不到org.company:projectA:RELEASE.

从设置我的projectA版本号到特定的版本号,有没有办法让这个版本与gradle一起工作?

有没有办法让gradle找到像maven正在做的正确版本?我的其他maven项目找到正确的版本没有问题.

我不想得到项目A的最新版本,也许下载完整的项目B jar就足够了.

PD我在本地计算机上使用gradle版本4.5和maven版本3.5.2

gradle maven build-dependencies

11
推荐指数
1
解决办法
582
查看次数