在<string-array name ="versions">我有一个条目的野兽(煮沸到合理的最小值来重现效果):
<item>100% foo 40%bar</item>
Run Code Online (Sandbox Code Playgroud)
产生这些错误:
Multiple annotations found at this line:
- error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?
- error: Found tag </item> where </string-array> is expected
Run Code Online (Sandbox Code Playgroud)
添加formatted ="false"不会改变任何事情.
<item>100% foo 40%bar</item>
Run Code Online (Sandbox Code Playgroud)
导致相同的错误消息.WTH?
<item>100% foo 40bar</item>
<item>100 foo 40%bar</item>
<item>100% foo 40%</item>
Run Code Online (Sandbox Code Playgroud)
一切都会好起来的.用\%转义它只是被忽略导致相同的错误.%%不会导致错误,但我得到%%.
我想在控制台中看到棉绒错误,我想配置为仅使用一次Java 7而不是每个模块(我们有12个模块)。
我把这个放到我的根目录中build.gradle:
allprojects {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:deprecation,unchecked"
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
}
Run Code Online (Sandbox Code Playgroud)
它确实适用于纯Java项目(apply plugin: 'java'本身build.gradle),但不适用于com.android.applicationand com.android.library模块。
我假设有一些比withType(JavaCompile)我必须使用的更为通用的“过滤器” ,但我找不到它。Gradle脚本对我来说仍然很神奇。随便看看我都尝试过JavaCompile的超级班,AbstractCompile但这并不能解决问题。
如何避免必须添加
android {
…
compileOptions {
targetCompatibility 1.7
sourceCompatibility 1.7
}
}
Run Code Online (Sandbox Code Playgroud)
Java版本以及将每个Android模块的Args编译器所需的费用是多少?
如果我希望我的课程是不可变的,我理解我可以使用Object.freeze().现在如果我希望我的对象在构造之后是不可变的,我会把Object.freeze(this)我的构造函数作为最后一行.但是现在,如果我想要继承它,我不能添加更多的参数,因为我this在调用之前super调用super它并且在调用它之后不能调用它:
class A {
constructor(x) {
this.x = x
Object.freeze(this)
}
}
class B extends A {
constructor(x, y) {
this.y = y // nope. No "this" before "super"
super(x)
this.y = y // nope. "this" is already frozen
Object.freeze(this)
}
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑弄清楚构造函数是否是通过super调用的,以便跳过冻结并将冻结留给子类,但这会让它继续冻结到子类.我怎么能最好地接近这个?有工厂吗?
(这个问题肯定与亚行没有开始(没有错误信息)但是没有明确的解释是什么解决了这个问题并且一遍又一遍地重新安装并不能说服我.)
当我平常运行时
$ sudo adb kill-server && sudo adb start-server
Run Code Online (Sandbox Code Playgroud)
我必须CTRL-C它.
建议的adb_traceálà另一个问题产生了这个:
# export ADB_TRACE=all
# adb start-server
system/core/adb/adb.c::main():Handling commandline()
system/core/adb/adb_client.c::_adb_connect():_adb_connect: host:version
system/core/adb/transport.c::writex():writex: fd=3 len=4: 30303063 000c
system/core/adb/transport.c::writex():writex: fd=3 len=12: 686f73743a76657273696f6e host:version
system/core/adb/transport.c::readx():readx: fd=3 wanted=4 <---- freezes here
Run Code Online (Sandbox Code Playgroud)
strace稍微冗长一点,我明白了:
# strace /home/leo/Downloads/android-sdk-linux/platform-tools/adb start-server
... many
... many
... lines
futex(0xffab8474, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, f742a700) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigaction(SIGRTMIN, {0xf77525f0, [], SA_SIGINFO}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0xf7752680, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN …Run Code Online (Sandbox Code Playgroud) 因此,我们有一个受限制的用户,该用户应在表上进行更新,插入和删除,并且可能创建,更改和删除表。
我们使用alembic迁移数据库,因此第二个用户当然必须运行迁移,但是第一个用户无权使用表。
当然,我可以运行一些postgres特定的代码来分别更改alembic所创建的所有者,但这是不对的。我应该如何解决呢?还是这是postgres问题?我看不到如何在一个数据库不存在的表上授予user1权限。
所以我们有成千上万行代码git存储库,自从我2年前加入该项目以来,格式化让我感到困惑.它不仅会让我感到烦恼,而且随着开发人员随意"修复"这种情况,当代码格式仅应用于一侧时,合并会导致头痛.现在重新格式化代码是一个两分钟的任务,但也导致合并冲突地狱.我最近将master合并到一个长期存在的功能分支并尝试:
现在我想知道它是否值得合并,因为还有另外15个分支都需要完全相同的代码审查,并且手动合并容易出错我想知道是否有某种方法可以做到这一点而不会出现这些合并冲突.
我想开始viewBinding在我们的项目中使用,但仅仅添加配置就会导致编译错误:
android {
buildFeatures {
dataBinding true
viewBinding true // new line and only change
}
Run Code Online (Sandbox Code Playgroud)
结果是:
e: /home/leo/StudioProjects/android-wallet/mbw/build/generated/source/kapt/btctestnetDebug/com/mycelium/wallet/DataBinderMapperImpl.java:37: error: cannot find symbol
import com.mycelium.wallet.databinding.FragmentBequantAccountBindingImpl;
^
symbol: class FragmentBequantAccountBindingImpl
location: package com.mycelium.wallet.databinding
Cannot find a setter for <com.mycelium.wallet.databinding.ItemBequantSearchBinding app:visibility> that accepts parameter type 'int'
If a binding adapter provides the setter, check that the adapter is annotated correctly and that the parameter type matches.
Run Code Online (Sandbox Code Playgroud)
有问题的代码是:
<data>
<import type="android.view.View" />
<variable
name="viewModel"
type="com.mycelium.bequant.market.viewmodel.AccountViewModel" />
</data>
...
<include …Run Code Online (Sandbox Code Playgroud) 所以我发现很多关于使用proguard从代码中剥离日志语句.基本上所有的说法 - 使用$ {sdk.dir} /tools/proguard/proguard-android-optimize.txt配置的效果都会起作用.我的理解是让字节码等于做一些
if(Consts.DEBUG) Log.d("","");
Run Code Online (Sandbox Code Playgroud)
又名我假设从我的apk中删除了对doSomeExpensiveStuff()的调用:
android.util.Log.d("Hello","World"+(new Foo().doSomeExpensiveStuff()));
Run Code Online (Sandbox Code Playgroud)
public class MainActivity extends Activity {
private class Slooow {
@Override
public String toString() {
// being slow
try {
Thread.sleep(5000);
} catch(InterruptedException e) {
}
return "bla";
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("tag", "onCreate: " + (new Slooow().toString()));
}
}
Run Code Online (Sandbox Code Playgroud)
ProGuard的-project.txt:
-repackageclasses ''
-optimizationpasses 5
-dontobfuscate
-assumenosideeffects class android.util.Log { public * ; }
Run Code Online (Sandbox Code Playgroud)
.method public onCreate(Landroid/os/Bundle;)V
.limit registers 5
; …Run Code Online (Sandbox Code Playgroud) 我正在考虑一些小部件并且$watch表达式完美地将所有内容都放在一个文件中但是现在我将相关的控制器部分移动到一个新的控制器中并将标记转换为一个新的html并且$watch在初始化之后只发生一次但是在编辑键入时没有相关输入.
JS:
app.controller('getRecipientWidgetController', [ '$scope', function($scope) {
console.log("controller initializing")
var testReceivingAddress = function(input) {
console.log("change detected")
}
$scope.$watch("addressInput", testReceivingAddress)
} ])
Run Code Online (Sandbox Code Playgroud)
包装器的HTML:
<ng-include
src="'partials/getRecipientWidget.html'"
ng-controller="getRecipientWidgetController"
ng-init="recipient=cert"> <!-- ng-init doesn't influence the bug. -->
</ng-include>
Run Code Online (Sandbox Code Playgroud)
HTML partials/getRecipientWidget.html:
<md-text-float ng-model="addressInput"></md-text-float>
Run Code Online (Sandbox Code Playgroud)
我怀疑有一些范围伏都教正在进行中?我离开了ng-init以明确我想要实现的目标:构建一个明显更复杂,可重用的小部件,在这个实例中可以$scope.cert作为它recipient.
我们使用 Docker 来很好地定义构建环境并帮助确定性构建,但在我的机器上,我使用 Docker 的构建结果发生了微小的变化,但不使用 Docker 时则没有。
我做了相当广泛的测试并且没有想法:(
我在以下系统上进行了测试:
在所有场景中,我们都得到了两个构建结果中的任何一个,我将命名变体 X 和 Y。
我了解到 Android apk 文件包含应用程序和 META-INF 文件夹中的签名,其中 META-INF 文件夹不包含任何可执行文件(运行时相关?)的东西,但我的 gradle 构建在那里抛出了许多我认为是的文件不需要。我可以从 META-INF 文件夹中排除这些内容,但不能从 META-INF/services 文件夹中排除这些内容。这是为什么?
我必须处理:
$ apksigner verify --print-certs --verbose ~/Downloads/release_mbw/comp_3.8.9.0_forRelease_docker/mbw-prodnet-release.apk
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): false
Number of signers: 1
Signer #1 certificate DN: CN=Mycelium Developers, O=Mycelium, L=Vienna, C=AT
Signer #1 certificate SHA-256 digest: b8e59d4a60b65290efb2716319e50b94e298d7a72c76c2119eb7d8d3afac302e
Signer #1 certificate SHA-1 digest: be575ec3b3b52e0b2392146cbdb245c91ef5a04f
Signer #1 certificate MD5 digest: 7aec063675b0206aba3b6175b89abc7d
Signer #1 …Run Code Online (Sandbox Code Playgroud) 所以我有解析器,并且想使用第一个确实返回非空值的解析器。我将如何做到最优雅?
return parsers.map { it.parse(content) }.firstOrNull { it != null }
Run Code Online (Sandbox Code Playgroud)
在选择第一个解析器之前会映射所有(百万个)解析器。
return parsers.firstOrNull { it.parse(content) != null }?.parse(content)
Run Code Online (Sandbox Code Playgroud)
会parse()再次运行(昂贵?)。
我知道我可以
for (parser in parsers) {
val result = parser.parse(content)
if (result != null) {
return result
}
}
return null
Run Code Online (Sandbox Code Playgroud)
parsers.forEach { it.parse(content)?.run { return this } }
return null
Run Code Online (Sandbox Code Playgroud)
是我能得到的最短的,但是读起来不好。
我很确定这里有一个快捷方式,我看不到。
我的存储库包含一些意外:分支 A(很差地)合并到 B,然后这些更改被还原,然后 B 被合并到主分支。
分支 A 即使包含新功能,也会合并到没有该功能的主分支中。
git checkout master
git merge A
Run Code Online (Sandbox Code Playgroud)
什么也没做。
git checkout A
git merge master
Run Code Online (Sandbox Code Playgroud)
快进至主控 HEAD。
我怎样才能将 master 和 A 与自定义合并基“合并”,基本上忽略它们已经合并了?