我想知道是否有人可以帮助我.我正在尝试在收到短信时显示一个toast元素.此吐司应包含具有图像(SMS图标)和2个文本视图(发件人,消息)的布局
如果我从一个活动调用以下方法,它按预期工作...
public void showToast(Context context, String name, String message) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_sms,
(ViewGroup) findViewById(R.id.toast_sms_root));
TextView text = (TextView) layout.findViewById(R.id.toastsms_text);
text.setText(message);
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试从我的SMSReceiver以相同的方式调用相同的代码,我得到:
The method getLayoutInflater() is undefined for the type SmsReceiver
The method findViewById(int) is undefined for the type SmsReceiver
The method getApplicationContext() is undefined for the type SmsReceiver
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何从意图中做到这一点.我认为这个问题与跨线程有某种关系,但我不确定如何继续.我在网上看过几个例子,但他们似乎要么使用已弃用的代码,要么只显示简单的文本
有人可以指出我正确的方向
非常感谢
我已经在Android本机库中进行了更改并安装了新的system.img文件,但现在我在启动时遇到了无关的错误.我可以通过吞下错误来解决它,但我想知道是否有人可以解释问题是什么.
Logger.java的Android实现声称它是强制LogManager初始化,因为它的类init代码执行必要的一次性设置.但这种强制初始化会导致NoClassDefFoundError.我认为它与尚未被Zygote预装的类有关,但对整个类加载器和VM业务并不熟悉.
如果有人有一些见解,将不胜感激.谢谢.
I/Zygote ( 1253): Preloading classes...
D/skia ( 1253): ------ build_power_table 1.4
D/skia ( 1253): ------ build_power_table 0.714286
W/dalvikvm( 1253): Exception Ljava/lang/StackOverflowError; thrown during Ljava/util/logging/LogManager;.<clinit>
W/dalvikvm( 1253): Exception Ljava/lang/NoClassDefFoundError; thrown during Ljava/security/Security;.<clinit>
W/dalvikvm( 1253): Exception Ljava/lang/ExceptionInInitializerError; thrown during Landroid/net/http/HttpsConnection;.<clinit>
E/Zygote ( 1253): Error preloading android.net.http.HttpsConnection.
E/Zygote ( 1253): java.lang.ExceptionInInitializerError
E/Zygote ( 1253): at java.lang.Class.classForName(Native Method)
E/Zygote ( 1253): at java.lang.Class.forName(Class.java:237)
E/Zygote ( 1253): at java.lang.Class.forName(Class.java:183)
E/Zygote ( 1253): at com.android.internal.os.ZygoteInit.preloadClasses(ZygoteInit.java:295)
E/Zygote ( 1253): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
E/Zygote ( …Run Code Online (Sandbox Code Playgroud) 我想在运行时在android应用程序中注入代码.我曾尝试使用dx工具在sdcard中生成dexfile,但是当我想要实例化时,它会失败.是否有任何工具可以注入生成新dalvik字节码的代码?我正在研究一些库,aspecjt或guice for android.使用脚本语言更好吗?
谢谢人们:)
我在我写的一个小的Hello World Android应用程序上玩了smali和baksmali.我的源代码是:
package com.hello;
import android.app.Activity;
import android.os.Bundle;
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Run Code Online (Sandbox Code Playgroud)
然后被拆解为:
.class public Lcom/hello/Main;
.super Landroid/app/Activity;
.source "Main.java"
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 6
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.locals 1
.parameter "savedInstanceState"
.prologue
.line 10
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line …Run Code Online (Sandbox Code Playgroud) 尝试在SL4A上运行jruby脚本时出现此错误
Dalvik VM unable to locate class 'org/jruby/Main'
java.lang.NoClassDefFoundError: org.jruby.Main
Run Code Online (Sandbox Code Playgroud)
我看到安装了jruby.jar文件
# find org.ruboto.sl4a/
org.ruboto.sl4a/
org.ruboto.sl4a/jruby_extras.zip
org.ruboto.sl4a/extras
org.ruboto.sl4a/extras/jruby
org.ruboto.sl4a/extras/jruby/jruby.jar
org.ruboto.sl4a/jruby_scripts.zip
org.ruboto.sl4a/dalvik-cache
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?这是权限问题吗?我有一个运行CM7的root电话
我遇到了dalvik dex转换器和它用于调用方法的操作码的问题.基本上我有一个private final在我的类中定义的方法,并且在调用它时,而不是生成invoke-direct操作码,dx正在生成invoke-super.因为它是私有方法,所以超类上不存在该方法,因此我在设备上遇到VFY违规.我能够找到触发此事件的确切方案,并且似乎在以下情况下发生:
--target 1.6如果满足这两个条件,则生成的dex类invoke-super代替invoke-direct.如果我禁用JaCoCo OR,如果我编译--target 1.5,它使用正确的invoke-direct操作码.
在查看javap反汇编的类代码时,我可以看到导致dx超级而不是直接的原因:
没有检测,编译为1.6:
$ javap -d com.example.ClassName | grep waitForConnectivity
159: invokespecial #115; //Method waitForConnectivity:()V
$ dexdump -d classes.dex | grep waitForConnectivity
147ad8: 7010 6042 0200 |001e: invoke-direct {v2}, Lcom/example/ClassName;.waitForConnectivity:()V // method@4260
Run Code Online (Sandbox Code Playgroud)
检测,编译为1.5(--target 1.5):
$ javap -d com.example.ClassName | grep waitForConnectivity
235: invokespecial #115; //Method waitForConnectivity:()V
$ dexdump -d classes.dex | …Run Code Online (Sandbox Code Playgroud) 所以我正在尝试为Android编写一些低级代码,我主要担心的是我想通过JIT编译器(或其他任何东西)避免所有优化.在做了一些研究之后,最好的方法似乎是:
我的问题是:这实际上是否会避免所有优化?之前的讨论https://groups.google.com/forum/#!topic/android-platform/Y-pzP9z6xLw让我不确定,我不能100%通过阅读文档来说服自己.
任何确认方式都非常感谢.
我想知道ART是否是虚拟机.dex2oat将dalvik字节代码编译为本机(特定于平台)代码,elf文件.正如android开发者文章中提到的,它仍然有垃圾收集器.我不明白它是如何工作的,我们有本机编译的elf文件,但它仍然在虚拟机环境中运行?GC在这种情况下如何工作?请提供一个很好的参考资料,或者请解释一下.提前致谢.
我有一个在Android平板电脑上运行的跟踪器应用程序.我注意到某些平板电脑不时会重新启动.
当我调查问题发现我得到"检测到堆栈损坏"错误然后几毫秒后android VM崩溃.
这些崩溃每5分钟到20分钟发生,除了跟踪器应用程序运行和使用GPS和3G之外没有其他模式.
这些平板电脑运行android 4.2.2,这是三星最新的更新.
在日志中没有提到我的apk,我的应用程序是纯java.究竟是什么导致了这个问题,我该如何解决?
下面是logcat输出:
05-11 15:33:16.084: A/<unknown>(30963): stack corruption detected: aborted
05-11 15:33:16.116: I/ServiceManager(99): service 'bluetooth_manager' died
05-11 15:33:16.155: I/ServiceManager(99): service 'bluetooth_secure_mode_manager' died
05-11 15:33:16.155: I/ServiceManager(99): service 'input_method' died
05-11 15:33:16.155: I/ServiceManager(99): service 'accessibility' died
05-11 15:33:16.155: I/ServiceManager(99): service 'meminfo' died
05-11 15:33:16.155: I/ServiceManager(99): service 'DirEncryptService' died
05-11 15:33:16.155: I/ServiceManager(99): service 'container_service' died
05-11 15:33:16.155: I/ServiceManager(99): service 'audio' died
05-11 15:33:16.155: I/ServiceManager(99): service 'wallpaper' died
05-11 15:33:16.155: I/ServiceManager(99): service 'display' died
05-11 15:33:16.155: I/ServiceManager(99): service 'power' …Run Code Online (Sandbox Code Playgroud) 对此进行了一些研究,发现了一些有关在应用程序中面临相同问题的人员的帖子。我也在我的应用程序的Google控制台中面临崩溃,并遵循了我发现的帖子(java.lang.ClassNotFoundException dalvik.system.BaseDexClassLoader.findClass)和类似的帖子。所有这些建议建议遵循链接https://developer.android.com/studio/build/multidex.html上提到的步骤。
遵循页面上提到的所有解决方法,但仍然遇到相同的问题。我的应用程序的MinSdkVersion为15,因此添加了所有解决方法来消除此问题,但到目前为止还没有运气。
正如我在文档中提到的,我可以选择将sdk的最低版本更改为21,但这会影响我很多时间。*
我仅在Android 5.1和更低版本上遇到此问题。
java.lang.RuntimeException:
at android.app.LoadedApk.makeApplication (LoadedApk.java:563)
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:4540)
at android.app.ActivityThread.access$1500 (ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1371)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:135)
at android.app.ActivityThread.main (ActivityThread.java:5268)
at java.lang.reflect.Method.invoke (Method.java)
at java.lang.reflect.Method.invoke (Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:697)
Caused by: java.lang.ClassNotFoundException:
at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass (ClassLoader.java:511)
at java.lang.ClassLoader.loadClass (ClassLoader.java:469)
at android.app.Instrumentation.newApplication (Instrumentation.java:980)
at android.app.LoadedApk.makeApplication (LoadedApk.java:558)
Run Code Online (Sandbox Code Playgroud)