我写了一个正在使用的类,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)
和相应的,加载首选项.
我有自定义注释处理器生成工厂类和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-aar
s,jar
s和intermediates/sourceFolderJavaResources
有没有办法合并META-INF
从intermediates/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)
但我不打算强制编译库,用户除了添加依赖项之外还做更多的事情.
我想在我的偏好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) Google Play服务组件是始终确定用户当前的活动,还是仅在连接应用以接收活动更新时?该文件是不是这个是很清楚,它只是说,它在一般最小的电池影响.我想知道一个应用程序是否经常查询用户当前的活动(例如,间隔2分钟)是否会给用户的电池带来额外的压力.
我将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上工作的方法
任何帮助或建议将非常感谢.
我想将我的工作流程的并发限制为一次运行:
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_request
键push
?
我有这样的代码:
if(object != null && object.field != null){
object.field = "foo";
}
Run Code Online (Sandbox Code Playgroud)
假设该对象为null.
此代码是否导致nullPointerException或只是if语句不会被执行?
如果是这样,如何重构这段代码更优雅(如果可能的话)?
当我运行我的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) 我有返回的函数,Mono<Boolean>
我想将它映射到Mono<Void>
(因为这是我在Controller方法中返回的东西).
有没有更好的方法来返回这样的Mono
而不是.flatMap { Mono.empty<Void>() }
?
我无法使用.map{ null }
因为映射功能无法接受null
s.
我有一个带有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
android ×6
gradle ×2
java ×2
aapt ×1
and-operator ×1
annotations ×1
battery ×1
github ×1
maven ×1
meta-inf ×1
mocking ×1
orientation ×1
spring ×1
unit-testing ×1
windows ×1