你可以跳到TL; DR
我们有一个应用程序,它强烈依赖于AES加密和解密.我们希望尽可能多地支持设备,但其中一些(特别是糟糕的平板电脑,我不仅仅是指中文无名,还有一些来自三星或联想的低端平板电脑)加密和解密速度很慢.
我们在我们的应用程序中使用了Android 23,我们能够确定某种级别,在这种级别之下,我们的应用程序根本不适合最终用户(他们必须等待太长时间才能显示内容).很多平板电脑我们不得不排除在我们的应用程序中使用,但是,我们能够忍受这一点.
最近我们的一些依赖项开始需要更新版本的Android.例如,我们想切换到Facebook Core SDK,而不是完整的Facebook SDK以节省一些空间.但这取决于Android支持包v25,我们将无法构建它,因为proguard拒绝处理源.
因此决定将项目转移到更新的Android.除了它对我们的加密/解密机制的性能影响之外,它还是非常顺利.突然间,它慢得多.平板电脑我们认为"工作得足够好"非常慢.
TL; DR
我已经开始调查从Android 23迁移到Android 26期间发生的事情,这会导致AES加密/解密性能大幅下降.
我已经创建了一个应用程序,它可以作为一种基准.通过简单的改变:
compileSdkVersion 23->26
targetSdkVersion 23->26
compile 'com.android.support:appcompat-v7:VERSION' 23.4.0 -> 26.+
性能下降是巨大的.
以下是其中一个平板电脑的示例结果:
Android 23: 136959 B/s
Android 26: 34419 B/s
Run Code Online (Sandbox Code Playgroud)
这几乎慢了4倍.我可以在我必须测试的所有设备上重现这些结果.当然,在新的高性能设备上,它几乎看不到,但在旧设备上,很明显.
我在网上搜索了有关此的任何细节,但我什么也没找到.我真的很感激有人能够对这个问题有所了解.
我真的希望我在某个地方犯了一个错误,但我找不到它.
对于加密/解密,我们使用SpongyCastle库.
我的Crypto Tester应用程序的源代码可以在GitHub上找到:https://github.com/krstns/cryptoTester
有master
Android 23配置的master_26
分支和Android 26配置的分支.
为了完整起见,我将在此处粘贴用于解密的方法:
/**
* Decrypt the given data with the given key
*
* @param data The data to decrypt
* @return The decrypted bytes
*/
public static byte[] decrypt(byte[] …
Run Code Online (Sandbox Code Playgroud) 在测试[运行grails test-app,Grails 1.3.5]时,Grails日志记录几乎没有问题:
1
我在我的应用程序中有一些调试/信息记录,它在运行应用程序[grails run-app]时工作正常.但是,当我想测试我的应用程序时,它们都没有写入System.out/System.err文件,也没有写入文件appender.我该如何启用它?
我的域类中有log.debug()和log.info()行.在控制器和位于src/groovy的类中.
当我想在测试期间启用日志记录时,我只是从我的开发环境中复制了设置,并将root logger从info更改为debug:
appenders {
file name: 'file', file: 'mylog.log'
}
root {
debug 'stdout', 'file'
}
debug 'grails.app'
error 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate',
'net.sf.ehcache.hibernate'
warn 'org.mortbay.log'
Run Code Online (Sandbox Code Playgroud)
正如我之前所说的那样.如果我在开发环境中运行应用程序,一切正常.这只是我无法看到我的日志的测试.
这里要提一下:我可以在Test类中看到我的log.info()行.
2我无法在Test类中指定log.debug.我在尝试做log.debug时遇到方法异常.log.info工作得很好.怎么会?我认为它与控制器/域内的注入相同.
3测试期间记录在测试类中的所有信息都将发送到System.err而不是System.out.Grails甚至使用Config.groovy的log4j配置?
提前谢谢,克里斯蒂安
我们有一个本机ios应用程序,它显示带有HTML网页和两个iframe的Web视图.在这些iframe中,我们从位于应用程序资源中的HTML文件中显示我们的文章.在文章中,通常有javascript脚本同时在两篇文章上运行.例如,将文本的某些部分设为粗体.为此,它列出了具有特定类的所有元素并修改其CSS样式.
$(".question").length()
Run Code Online (Sandbox Code Playgroud)
会返回.question
iOS上两个iframe中带有class的元素数量,它只返回Android上当前iframe的元素."当前"是指用户与之交互以启动脚本的那个.
我们还要求发布一个Android应用程序.这一切都很顺利,直到我测试了一篇文章,其中javascript必须在两个iframe上运行.不幸的是,它只能访问一个iframe中的元素.
有没有什么方法可以让它工作而不改变附加到文章的javascripts的代码?我没有权限[除了它可能是成千上万的文章与大量的自定义javascripts更新].
谢谢
我是Lua的新手,我想创建一个表[doh],它可以存储以下值:
parent.child[1].value = "whaterver"
parent.child[2].value = "blah"
Run Code Online (Sandbox Code Playgroud)
但是,大多数情况下,通常只有一个孩子,所以访问这个值会更容易:
parent.child.value
Run Code Online (Sandbox Code Playgroud)
为了使事情更简单,我想以某种方式存储我的价值观
parent.child[1].value == parent.child.value
Run Code Online (Sandbox Code Playgroud)
但要做到这一点,我必须将此值存储在内存中两次.我有什么方法可以做到这一点,所以:
parent.child.value points to parent.child[1].value
Run Code Online (Sandbox Code Playgroud)
没有将值存储在内存中两次?
另外一个问题是,如何检查表占用多少内存?
我想使用Logback/SLF4J记录"漂亮打印"的XML.现在,我在日志中得到的东西是完全不可读的,我必须打开一些东西来解析它.我希望能够为调试配置日志记录(因为我只想在调试中看到XML)以人类可读的方式输出XML.
可能吗?
在API21中谷歌修改了shouldInterceptRequest方法来WebResourceRequest request
代替使用String url
.有没有什么办法可以编写扩展WebViewClient
和处理这两种方法的泛型类?我的最低API版本是18.
谢谢Krystian
请原谅我,但是当我写这个问题时,出现了一些想法,所以问题可能看起来像是事件的日志,但你可以安全地跳到TL; DR部分.
我有一个AAR
模块,我在其中使用a WebView
来显示页面并播放具有不同开始时间的音频文件 - 具体取决于上下文.我有两个应用程序,我测试AAR
模块:一个测试应用程序,这是运行模块所需的简单工具,以及真正的应用程序需要一段时间才能通过应用程序流程进入模块部分.
我被告知几个测试设备上的错误,其中音频播放始终从0开始,更不用说使用的音频元素currentTime
设置了.
这是我的代码,处理回放:
var instance = this;
this.playbackCurrentAudioPath = newBufferPath;
this.playbackCurrentAudio = document.createElement('audio');
this.playbackCurrentAudio.src = this.playbackCurrentAudioPath;
this.playbackCurrentAudio.oncanplaythrough = function () {
console.log("file loaded, try to play " + instance.playbackCurrentAudio);
instance.loaded = true;
// checked here, instance.playbackCurrentAudio.duration is equal 0
instance.playbackCurrentAudio.currentTime = audioTrackBeginTime;
// instance.playbackCurrentAudio.currentTime is equal 0
instance.playbackCurrentAudio.play();
// playback starts from the beginning of the file
};
this.playbackCurrentAudio.onerror = function () {
instance.playbackLoadError()
};
this.playbackCurrentAudio.onended …
Run Code Online (Sandbox Code Playgroud) 这是令人沮丧的,我根本找不到如何处理这个问题的正确答案.我是一个rebase [但这只是出现此问题的许多场景之一]我有大量的文件"已更改但未更新",但对于换行符没有区别.
git diff -b
Run Code Online (Sandbox Code Playgroud)
没有回来.
现在我只想删除更改并将文件保留在repo中.我找到了很多"解决方案":
1
使用--keep-index进行存储更改a)[这实际上是来自SO]
$ git stash save --keep-index
Saved working directory and index state WIP on COM-23: 4a8abc1 COM-23 changed pa
ckage name
HEAD is now at 4a8abc1 COM-23 changed package name
$ git stash drop
Dropped refs/stash@{0} (7d822e3c6bdc310f4a4be90ed937dd0ea97df627)
$ git status
[tons of files marked as changed but not updated]
Run Code Online (Sandbox Code Playgroud)
b)没有--keep-index
与'a'完全相同
2 git重置
a)只需重置一次
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
与上述相同
b)加上
git add -A
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
与上述相同
3结账
git checkout
Run Code Online (Sandbox Code Playgroud)
与上面相同,status返回大量未分段文件. …
在单元测试部分,mongodb-1.1.0GA的文档似乎已经过时了:http://springsource.github.com/grails-data-mapping/mongo/manual/ref/Testing/DatastoreUnitTestMixin.html
以下代码
@TestFor(Employee)
class EmployeeTests extends GroovyTestCase {
void setUp() {
}
void tearDown() {
}
void testSomething() {
mockDomain(Employee)
def s = new Employee(firstName: "first name", lastName: "last Name", occupation: "whatever")
s['testField'] = "testValue"
s.save()
assert s.id != null
s = Employee.get(s.id)
assert s != null
assert s.firstName == "first name"
assert s['testField'] == "testValue"
}
}
Run Code Online (Sandbox Code Playgroud)
失败并出现此错误:
No such property: testField for class: Employee
Run Code Online (Sandbox Code Playgroud)
员工类非常简单:
class Employee {
String firstName
String lastName
String occupation
static constraints …
Run Code Online (Sandbox Code Playgroud) 当您是开发人员计划的成员时,很容易从Apple开发人员中心删除APP ID.但是,如何在不注册的情况下删除使用常规Apple帐户创建的应用ID?启动xcode7用户可以使用这些帐户开始构建,似乎我们发错了并使用错误的帐户创建了我们想要使用的APP ID.
android ×4
grails ×2
logging ×2
webview ×2
cryptography ×1
encryption ×1
git ×1
grails-orm ×1
html5-audio ×1
iframe ×1
ios ×1
iphone ×1
java ×1
javascript ×1
jquery ×1
log4j ×1
logback ×1
lua ×1
mongodb ×1
performance ×1
pointers ×1
slf4j ×1
unit-testing ×1