为什么字节码生成为
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/FileNotFoundException;
}
.end annotation
Run Code Online (Sandbox Code Playgroud)
而不是.throws Ljava/io/FileNotFoundException
throws FileNotFoundException如果一个方法在java代码的标头中声明?
我想测试android应用程序的内存性能,并且我想自动获取内存信息。我使用“adb shell dumpsys meminfo ...”定期获取内存信息。现在,我想观察内存泄漏,如何执行 gc ?就像DDMS中的“导致GC”一样。谢谢!
我不太确定将哪种代码加载到 android 平台上的 linux 进程中。
如果android采用Dalvik,进程包含一个Dalvik VM和应用程序的代码,代码是Dalvik字节码的形式吗?如果是,代码是否与.apk文件中的classes.dex相同?
如果android采用Android Runtime(ART),由于classes.dex已经被翻译成原生机器码,所以我认为Linux进程中app的代码不会是Dalvik字节码,而是原生机器码。如果我的理解是正确的,那么Dalvik VM是否仍然包含在进程中?
最近,当我尝试调试 android 测试仪器 APK 时,每次启动应用程序时,我都会在 logcat 中看到类似的内容
W/com.myapp: Verification of void com.myapp.test.hiptest.Actionwords.function0() took 158.211ms
W/com.myapp: Verification of void com.myapp.test.hiptest.Actionwords.function1() took 101.701ms
W/com.myapp: Verification of void com.myapp.test.hiptest.Actionwords.function2() took 110.852ms
W/com.myapp: Verification of void com.myapp.test.hiptest.Actionwords.function3() took 211.494ms
W/com.myapp: Verification of void com.myapp.test.hiptest.Actionwords.function4() took 102.497ms
W/com.myapp: Verification of void com.myapp.test.hiptest.Actionwords.function5() took 126.639ms
W/com.myapp: Verification of void com.myapp.test.hiptest.Actionwords.function6() took 138.077ms
W/com.myapp: Verification of void com.myapp.test.hiptest.Actionwords.function7() took 131.311ms
W/com.myapp: Verification of void com.myapp.test.hiptest.Actionwords.function8() took 253.859ms
W/com.myapp: Verification of void com.myapp.test.hiptest.Actionwords.function9() took 111.431ms
W/com.myapp: Verification of …Run Code Online (Sandbox Code Playgroud) 我正在编写自己的玩具 Dalvik VM,但我似乎无法弄清楚 dalvik 如何处理继承的静态字段。
考虑下面的java代码:
class Parent { static int parent_int = 10; }
class MyCode extends Parent {
public static void main(String[] args){
System.out.println(parent_int + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
当用 javac 和 java 编译并运行时,它会打印11到控制台,正如人们所期望的那样。然而,当它被编译成 dalvik 时,该parent_int值被转化为sgetget 的语句field@0000,而在is的字段 id<clinit>的方法中。Parentparent_intfield@0001
在我的 Dalvik VM 实现中,这成为一个问题,因为即使类 和已经field@0000初始化,也没有初始化。Parentfield@0001
Dalvik VM 如何处理这个问题?它如何知道它们是相关的并且应该被视为相同?为什么它们一开始就变成了两个不同的领域,而它们本可以是一个领域呢?
我正在计划开发一个Android应用程序,需要后端服务器与应用程序的其他用户同步数据.我打算在unix服务器上运行的标准java中编写这个服务器.
我曾经直接在两个Android设备之间做过这个,在这种情况下,我只是序列化了两端需要发送的所有数据.
但是我怀疑Dalvik序列化的格式与Java SE的格式不兼容.是这样的吗?如果是的话,我的替代方案是什么?我想到的一件事是将原始xml发送到套接字上,但如果有更好的选择,我会很高兴听到它们.
谢谢.
我只添加了一个现有的完全工作项目,该文件 com/android/vending/billing/IMarketBillingService.aidl
(我没有添加任何其他内容(来自market_billing样本),因为我甚至没有尝试使用该服务)
它编译和构建完美,但当我尝试运行它时,我在控制台中收到以下内容:
java.lang.IllegalArgumentException: already added: Lcom/android/vending/billing/IMarketBillingService$Stub$Proxy;
Dx at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
Dx at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
Dx at com.android.dx.command.dexer.Main.processClass(Main.java:486)
Dx at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
Dx at com.android.dx.command.dexer.Main.access$400(Main.java:67)
Dx at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)
Dx at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
Dx at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
Dx at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
Dx at com.android.dx.command.dexer.Main.processOne(Main.java:418)
Dx at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
Dx at com.android.dx.command.dexer.Main.run(Main.java:206)
Dx at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Dx at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
Dx at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
Dx at java.lang.reflect.Method.invoke(Unknown Source)
Dx at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:179)
Dx at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:745)
Dx at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:634)
Dx at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629)
Dx at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
Dx at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172)
Dx at …Run Code Online (Sandbox Code Playgroud) 我安装了这个:
https://github.com/mwbrooks/cordova-plugin-menu
并已cordova 1.8.1安装.
我复制"libs/phonegap-1.0.0.jar"到了ANDROID_PROJECT/libs.
当我尝试在模拟器中运行应用程序时,我得到:
"Conversion to Dalvik format failed with error 1"
Run Code Online (Sandbox Code Playgroud)
我相信这与图书馆的冲突有关,但我不知道如何去除错误?
请帮忙.
我有这样的活动类代码:
package com.pavel.exchanger;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import android.support.v4.app.Fragment;
public class SearchExchangerActivity extends FragmentActivity {
static final LatLng HAMBURG = new LatLng(53.558, 9.927);
static final LatLng KIEL = new LatLng(53.551, 9.993);
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_exchanger);
map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG)
.title("Hamburg"));
Marker kiel = map.addMarker(new MarkerOptions()
.position(KIEL)
.title("Kiel") …Run Code Online (Sandbox Code Playgroud) 我只是想知道 :
谁创造了dalvik_Vm?
在zygote过程中VM或相反的运行?