目前,可以将.dex类文件动态加载到Android的Dalvik VM中.这可能也可用于在运行时生成动态代码.
即将到来的ART运行时间仍然可以实现吗?
我有以下问题,从c ++我发送巨大的字符串[]到java.巨大的=最多20行; 我正在做以下事情
jint jtype = 2;
jstring emptyString = env->NewStringUTF("");
jobjectArray data = (jobjectArray)env->NewObjectArray(7, env->FindClass("java/lang/String"), emptyString);
env->SetObjectArrayElement( data,0,env->NewStringUTF(item->get_id().c_str());
env->SetObjectArrayElement( data,1,env->NewStringUTF(item->get_number().c_str());
env->SetObjectArrayElement( data,2,env->NewStringUTF(item->get_fullname().c_str());
env->SetObjectArrayElement( data,3,env->NewStringUTF(item->get_mf().c_str());
env->SetObjectArrayElement( data,4,env->NewStringUTF(item->get_dob().c_str());
env->CallVoidMethod(dao, jsaveItem, data, jtype);
int i;
for (i = 0; i < 5; ++i) {
jstring string = (jstring) env->GetObjectArrayElement(data, i);
env->DeleteLocalRef(string);
}
env->DeleteLocalRef(emptyString);
env->DeleteLocalRef(data);
env->DeleteLocalRef(dao);
Run Code Online (Sandbox Code Playgroud)
这是在一个循环中发生的所以我正在为我想要保存在数据库中的每个对象执行它,所以你可以想象,它发生了很多次.
所以我考虑了VM并删除了我创建的每个字符串的本地引用,但我仍然得到:
ReferenceTable overflow (max=512)
Last 10 entries in JNI local reference table:
502: 0x40552880 cls=Ljava/lang/String; (28 bytes)
503: 0x405528b8 cls=Ljava/lang/String; (28 bytes)
504: 0x4051f8d0 cls=Ljava/lang/Class; 'Lcom/project/storage/userdata/DataDao;' …Run Code Online (Sandbox Code Playgroud) 我在我的Android应用程序中使用Jackson.
我在构建路径中添加了这两个jar:
jackson-core-asl-1.0.0.jar
jackson-mapper-asl-1.0.0.jar
Run Code Online (Sandbox Code Playgroud)
但是,我在Logcat中一直看到这个:
11-24 18:25:15.093: I/dalvikvm(28842): Could not find method org.codehaus.jackson.map.ObjectMapper.getTypeFactory, referenced from method org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.getJavaType
11-24 18:25:15.093: W/dalvikvm(28842): VFY: unable to resolve virtual method 17967: Lorg/codehaus/jackson/map/ObjectMapper;.getTypeFactory ()Lorg/codehaus/jackson/map/type/TypeFactory;
Run Code Online (Sandbox Code Playgroud)
这只是在那种方法上.我在类似的错误上搜索了StackOverflow,但它们都是:
我的Android版本是4.0.3.我正在将它与Spring Android库结合使用.
在android kitkat中,URLConnection的实现已被OkHttp取代,它如何调试呢?
OkHttp在这个目录中:external/okhttp/android/main/java/com/squareup/okhttp
当我打电话给UrlInstance.openConnection().getClass().getName()它时,它会出现com.android.okhttp.internal.http.HttpURLConnectionImpl
我该怎么调试呢?似乎我无法联想/android/main/java/com/squareup/okhttp/*到com.android.okhttp.*
当代码执行到 return streamHandler.openConnection(this);
/**
* Returns a new connection to the resource referred to by this URL.
*
* @throws IOException if an error occurs while opening the connection.
*/
public URLConnection openConnection() throws IOException {
return streamHandler.openConnection(this);
}
Run Code Online (Sandbox Code Playgroud)
向前走,但不能深入挖掘 com.squareup.okhttp.HttpHandler#openConnection
下图中调试器中突出显示的线程为灰色.
package com.squareup.okhttp;
import java.io.IOException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
public class HttpHandler extends URLStreamHandler {
@Override protected URLConnection openConnection(URL url) throws IOException { …Run Code Online (Sandbox Code Playgroud) 我对一年前推出的android dalvik平台上的这个提交非常疑问和困惑.
文件扩展名已更改为C++扩展,以便"将解释器移动到C++中" - 使用编译器的C++前端.
这种变化可能带来什么好处?Dalvik Platform是一个100%的C&asm项目,并没有使用任何C++功能.
我已经看过这个主题的一些问题,但当我在我的错误中搜索其他部分时,我没有找到任何内容,所以我决定发布一个完整解释的问题.
我的代码中没有识别错误.无处.添加所有库,成功链接外部库项目.没有任何迹象表明发射会出现任何问题.
然而,当我启动应用程序 - 运行,编译和构建(自动) - 我收到一条弹出消息,指出我的项目包含错误,我应该在尝试再次启动应用程序之前修复它们.
所以我摆弄了一些属性,我的同事发现Android Private Libraries必须检查" " Properties -> Java Build Path -> Order and Export(我之前已经检查过未检查的其他复选框).但是当我运行应用程序时 - 同样弹出,以及Console视图中的以下内容:(可怕的消息)
[2013-06-22 20:55:03 - TheApplication] Dx
trouble processing "java/sql/Savepoint.class":
Ill-advised or mistaken usage of a core class (java.* or javax.*)
when not building a core library.
This is often due to inadvertently including a core library file
in your application's project, when using an IDE (such as
Eclipse). If you are sure you're not …Run Code Online (Sandbox Code Playgroud) 它说invoke-virtual是调用虚方法,而invoke-direct直接方法.
但是我不清楚什么是"虚方法"什么是"直接方法"?
换句话说,调用什么样的方法invoke-virtual会是什么样的invoke-direct?
谁能举一些具体的例子?
提前致谢.
如果你发现自己正在编写一个依赖于许多不同库的大型Android应用程序(我建议不要重新发明轮子),很可能你已经遇到了Dalvik可执行文件的65k方法限制classes.dex.此外,如果您依赖于像Google Play Services SDK这样的大型库本身已经在5.0版中包含了超过20k的方法,那么您将不得不使用诸如剥离包或multidex支持之类的技巧来避免打包时出错.由于Android Lollipop多个dex文件更易于处理,因此Android的新运行时ART已公开发布,但目前开发人员仍被迫进行方法计数.
在使用Google Play服务时减少应用程序方法计数的最简单方法是什么?
android dalvik dex google-play-services android-gradle-plugin
I have a DialogFragment that handles login and fingerprint authentication for my application. This fragment uses two classes that are exclusive to API 23, KeyGenParameterSpec and KeyPermanentlyInvalidatedException. I had been under the impression that I could use these classes, as long as I check the build version before I try to initialize the classes (outlined here):
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
...
} else {
...
}
Run Code Online (Sandbox Code Playgroud)
But it appears that this is not the case. If I try …
android dalvik android-version android-api-levels android-fingerprint-api
使用ar.toArray(new String[ar.size()])Android studio 3.2.1 时会警告预先调整大小的数组并建议使用空数组:
有两种样式可以将集合转换为数组:使用预先确定大小的数组(如 c.toArray(new String[c.size()]))或使用空数组(如 c.toArray(new String[ 0]). 在较旧的 Java 版本中,建议使用预先调整大小的数组,因为创建适当大小数组所必需的反射调用非常慢。但是,由于 OpenJDK 6 的后期更新,此调用被内在化,使得性能空数组版本与预先调整大小的版本相同,有时甚至更好。此外,传递预先调整大小的数组对于并发或同步集合是危险的,因为在 size 和 toArray 调用之间可能会发生数据竞争,这可能会导致额外的如果集合在操作期间同时收缩,则数组末尾为 null。此检查允许遵循统一样式:使用空数组(现代 Java 中推荐使用)或使用预先确定大小的数组(在较旧的 Java 版本或非基于 HotSpot 的 JVM 中可能更快)。
对于Android还是仅适用于Java?
使用预先确定大小的数组(在较旧的 Java 版本或非基于 HotSpot 的 JVM 中可能更快)。
因为我认为 Android 不是 HotSpot,它的虚拟机是 Dalvik,现在是 ART