小编yan*_*ano的帖子

git fetch origin --prune不删除本地分支?

有一次,我认为git fetch origin --prune删除了服务器上不再存在的本地分支.不知何故,这不是我目前的经历.

我运行了这个命令,并没有删除本地分支.目前尚未检出.我跑去git branch -vv检查这个信息,我明白了

feature/MyGreatFeature           f30efc7 [origin/feature/MyGreatFeature: gone]
Run Code Online (Sandbox Code Playgroud)

所以似乎知道它已经消失了.为什么不删除我的本地分支?

运行 git version 2.7.4 (Apple Git-66)

git git-fetch

38
推荐指数
4
解决办法
3万
查看次数

将AudioEffect附加到全球组合的首选方式?

在Android,AudioEffect API中,所有内置效果(如均衡器)都会出现警告

"注意:不推荐使用会话0将均衡器附加到全局音频输出混音."

如果不推荐这样做,那么什么是替换API?我的目标对全球产出组合产生影响......

audio session android global effects

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

为什么从lambda返回const引用导致临时?

我有一个情况,我有一个成员返回一个const&,然后这个结果在一个lambda内转发,它具有相同的返回类型.

MSVC2017认为这种情况存在风险,并发出警告:returning address of local variable or temporary.使用clang和其他编译器进行的实证测试表明,这是全面的.我不明白的是,为什么这与几个返回相同类型的方法调用不同.

例如,这非常有效:

class A {
public:
    const std::string& name() const { return m_name; }
private:
    std::string m_name;
};

class B {
public:
    const std::string& name() const { return m_a.name(); }
private:
    A m_a;
};

//...
B b;
std::cout << b.name();
Run Code Online (Sandbox Code Playgroud)

按预期工作,在编译或运行时没有警告/错误.

但是对于lambda,它不会:

class A {
public:
    const std::string& name() const { return m_name; }
private:
    std::string m_name;
};

//...
using Getter = std::function< const std::string&() >;
A a;
Getter …
Run Code Online (Sandbox Code Playgroud)

c++ lambda const reference c++14

8
推荐指数
1
解决办法
670
查看次数

MediaCodec和24位PCM

我成功地使用MediaCodec来解码音频,但是当我加载带有24位样本的文件时,我无法知道这已经发生了.由于应用程序假定为16位样本,因此失败.

当我打印MediaFormat时,我明白了

{mime=audio/raw, durationUs=239000000, bits-format=6, channel-count=2, channel-mask=0, sample-rate=96000}
Run Code Online (Sandbox Code Playgroud)

我假设"位格式"是一个提示,但是这个键没有在API中声明,并且在输出格式改变时实际上没有发出.我明白了

{mime=audio/raw, what=1869968451, channel-count=2, channel-mask=0, sample-rate=96000}
Run Code Online (Sandbox Code Playgroud)

(顺便说一下什么是"what"键?我注意到如果我将其解释为4charcode,它是" outC"......只是一个标志,它是一个输出格式?)

那么这里最好的办法是什么?如果我把ByteBuffer直线送到AudioTrack它那当然会播放静电(假设PCM 16).

如果我知道价值,那么我可以自己转换!我从其他问题中了解到,你也无法决定输出格式.

android mediacodec

7
推荐指数
0
解决办法
1203
查看次数

使用gnustl分发NDK库?

我正在为Android开发一个既有Java又有Native组件的库.Native库依赖于GNU STL.我正在反对gnustl_static,但遇到了一些通过链接解决的奇怪问题gnustl_shared.(例如,文件系统和语言环境的问题).目前,我已经确定了gnustl_shared.

这就是问题所在 - 我的库的消费者希望链接到Native .so以添加他们自己的代码.我从阅读中了解到所有的C运行时必须匹配.

  1. 要求我的客户使用gnustl_shared似乎可能不起作用(就外交和易于集成而言)
  2. 如果我使用gnustl_shared,生成的JAR文件包含libgnustl_shared.so,这会导致构建APK的问题也依赖于此库. - 我想我可以不把它包含在JAR文件中?
  3. 如果我反对gnustl_static,我会避免所有这些问题吗?
  4. 如果我的API包含对STL对象的引用(主要是std::stringstd::vector),如果我的客户不使用GNU STL,我会遇到问题吗?

谢谢

linker android stl software-distribution android-ndk

6
推荐指数
0
解决办法
611
查看次数

在Android中检测当前音频路由的有效方法?

我的应用程序需要能够了解用户选择的基本音频路径。在 iOS 上,这是微不足道的,因为您只需注册一个回调就可以准确地知道音频的去向。

在 Android 上我很高兴看到这个MediaRouter类,但令我沮丧的是,没有可预测的方法来确定路由类型。比如切换到蓝牙A2DP设备时,唯一的标识项就是RouteInfo.getName()方法,但是这个返回的是A2DP设备的友好名称,所以无法进行比较。

我也尝试过使用以下广播:

AudioManager.ACTION_AUDIO_BECOMING_NOISY
Intent.ACTION_HEADSET_PLUG
BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED
BluetoothA2dp.ACTION_PLAYING_STATE_CHANGED
BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED
Run Code Online (Sandbox Code Playgroud)

然而,这种方法容易出错。例如,如果您连接到蓝牙A2DP,那么您插入耳机,很容易分辨出路线是“耳机”,但是当拔下耳机时,您必须猜测什么路线仍然处于活动状态,通过记录来自所有蓝牙事件的连接状态。

当您的应用程序启动时,确定初始音频路径也存在困难。HEADSET_PLUG 很粘,所以很好,但没有其他东西......

有关如何解决此问题并准确检测此问题的任何建议?为什么在 Android 中这是一项如此艰巨的任务?

audio android android-audiomanager

5
推荐指数
1
解决办法
3946
查看次数

带有 cca​​che 的 Xcode Address Sanitizer

我正在尝试在 Xcode 中使用 Address Sanitizer,但我也使用 ccache 来加速我的构建。为此,我CC在 Xcode 项目级别设置了标志以指向我存储在的脚本~/projects/support/cmake/ccache-clang。脚本如下:

#!/bin/sh
if type -p /usr/local/bin/ccache >/dev/null 2>&1; then
  export CCACHE_CPP2=true
  exec /usr/local/bin/ccache "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
else
  exec "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
fi
Run Code Online (Sandbox Code Playgroud)

这样就达到了预期的效果(如果开发系统上安装了ccache,则使用ccache)。这运作良好。

现在,当我们为给定方案打开地址消毒器时,问题就出现了。构建成功完成,但是当我们尝试运行时,我们终于看到了这个错误:

Error: Check dependencies

Could not determine version of clang to find its Address Sanitizer library: ~/projects/support/cmake/ccache-clang
Run Code Online (Sandbox Code Playgroud)

也许这是由于 Xcode 中的一些 hacky 实现导致的,它试图解析编译器的路径以确定版本?

想知道如何修改我的脚本以允许 Address Sanitizer 工作。CC当前的解决方法是当我们需要进行消毒工作时删除覆盖的标志。

使用 Xcode 8.3.1

xcode ccache address-sanitizer xcode8

5
推荐指数
1
解决办法
1384
查看次数

Mac OS App Store 应用程序的 altool upload-app 的预期文件格式?

我正在使用以下命令打包 Mac App Store 的应用程序

xcrun altool --upload-app --file MyApp.??? --type osx <credentials>
Run Code Online (Sandbox Code Playgroud)

我在一些示例中看到他们用作MyApp.zip文件,有些是MyApp.pkg.

altool似乎对简单的 zip 文件不满意MyApp.app,不断抛出很多关于 Info.plist 的错误,这些错误不准确。

到目前为止,我取得的最成功的是使用productbuild创建一个pkg,但现在要求我使用我的“3rd Party Mac Developer Installer”证书对其进行签名。

是否需要创建签名的 PKG 才能使用 部署到 Mac App Store altool,还是有其他替代方案?

xcode continuous-integration mac-app-store

5
推荐指数
1
解决办法
1000
查看次数

可以 repo 递归子模块吗?

我们开始使用 repo ( https://source.android.com/source/using-repo.html ) 来管理我们的多存储库项目,但是其中一些存储库正在使用 git 子模块。当我做 a 时repo sync,有没有办法基本上传递--recursive给它正在做的克隆?

git repo

4
推荐指数
1
解决办法
2255
查看次数

Set-AuthenticodeSignature 不会执行 SHA256 时间戳?

使用 Visual Studio 2019 Community 对 Server Core Windows Server 2019 Datacenter Edition 上的 Windows 二进制文件进行签名。 signtool.exe行为不正确(打开 PFX 文件时出现问题),因此建议我们切换到 PowerShell + Set-AuthenticodeSignature

使用以下命令:

$securepassword = ConvertTo-SecureString -String $password -AsPlainText -Force

$pfx = Get-PfxData -FilePath $certificate -Password $securepassword
$cert = $pfx.EndEntityCertificates[0]

Set-AuthenticodeSignature -FilePath $target -Certificate $cert -HashAlgorithm "SHA256" -TimestampServer http://timestamp.digicert.com

Run Code Online (Sandbox Code Playgroud)

结果是具有预期 SHA256 签名的二进制文件,但是时间戳签名是 SHA1。也尝试过用作http://timestamp.digicert.com?alg=sha256服务器,但是Set-AuthenticodeSignature根本不添加时间戳签名。

由于该命令不允许您指定时间戳算法的哈希值,我们该如何实现这一点呢?

windows powershell code-signing authenticode

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

块中的@synchronized(self)会导致保留周期吗?

假设我想@synchronized(self)在一个区块内做.我想这会导致保留周期,所以通常我们会像这样重写它:

-(void)myMethod
{
    __weak TheClass * weakSelf = self;
    dispatch_async(dispatch_get_main_queue(),
    ^{
        TheClass * strongSelf = weakSelf;
        if(strongSelf == nil)
        {
            return;
        }

        @synchronized(strongSelf)
        {
            //mutex code
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当你以@synchronized这种方式使用指令时,它是否相当于@synchronized(self)

memory-management objective-c synchronized objective-c-blocks reference-cycle

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