gpt4 book ai didi

java - 在Android BroadcastReceiver中使用Jsoup时如何解决 "UnsatisfiedLinkError"?

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:39 28 4
gpt4 key购买 nike

我在做什么:

我的应用(Android minSdkVersion 15)中,我有一个BroadcastReceiver 监听Intent.ACTION_PACKAGE_ADDED (设备上已安装新的应用程序包)。每当发生这种情况时,接收方都会尝试使用 Jsoup 从互联网上获取一些数据。


问题:

只要我的应用在我安装另一个应用(比如来自 Play 商店)时在后台运行,我下面的代码就可以正常工作。但是,如果我终止 我的应用 然后安装另一个应用,我的应用 会崩溃,显示“我的应用已停止”对话框(因为我的接收器崩溃)以及此错误:

No implementation found for long com.android.tools.profiler.support.network.HttpTracker$Connection.nextId() (tried Java_com_android_tools_profiler_support_network_HttpTracker_00024Connection_nextId and Java_com_android_tools_profiler_support_network_HttpTracker_00024Connection_nextId__)
FATAL EXCEPTION: AsyncTask #1
Process: com.myorg.myapp, PID: 11796
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:325)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.UnsatisfiedLinkError: No implementation found for long com.android.tools.profiler.support.network.HttpTracker$Connection.nextId() (tried Java_com_android_tools_profiler_support_network_HttpTracker_00024Connection_nextId and Java_com_android_tools_profiler_support_network_HttpTracker_00024Connection_nextId__)
at com.android.tools.profiler.support.network.HttpTracker$Connection.nextId(Native Method)
at com.android.tools.profiler.support.network.HttpTracker$Connection.<init>(HttpTracker.java:191)
at com.android.tools.profiler.support.network.HttpTracker$Connection.<init>(HttpTracker.java:186)
at com.android.tools.profiler.support.network.HttpTracker.trackConnection(HttpTracker.java:280)
at com.android.tools.profiler.support.network.httpurl.TrackedHttpURLConnection.<init>(TrackedHttpURLConnection.java:49)
at com.android.tools.profiler.support.network.httpurl.HttpsURLConnection$.<init>(HttpsURLConnection$.java:50)
at com.android.tools.profiler.support.network.httpurl.HttpURLWrapper.wrapURLConnectionHelper(HttpURLWrapper.java:40)
at com.android.tools.profiler.support.network.httpurl.HttpURLWrapper.wrapURLConnection(HttpURLWrapper.java:55)
at org.jsoup.helper.HttpConnection$Response.createConnection(HttpConnection.java:889)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:727)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:706)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:299)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:288)
at com.myorg.myapp.InstallReceiver$PlayStoreFetcher.doInBackground(InstallReceiver.java:76)
at com.myorg.myapp.InstallReceiver$PlayStoreFetcher.doInBackground(InstallReceiver.java:70)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)

我的代码:

安装接收者.java:

public class InstallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
String data = new FetchData().execute("URL").get();

// The rest of my code...
}
}

private static class FetchData extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... strings) {
try {
// This is the cause of the problem
return Jsoup.connect(strings[0]).get().text();
} catch (Exception e) {
return null;
}
}
}
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myorg.myapp">

<uses-permission android:name="android.permission.INTERNET" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<activity android:name=".Activities.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name=".Activities.PlayStoreActivity"/>
<activity android:name=".Activities.InstalledAppsActivity"/>
<activity android:name=".Activities.PredefinedFiltersActivity"/>

// This is linking my InstallReceiver.java
<receiver android:name=".InstallReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
</application>
</manifest>

build.gradle:

dependencies {
compile 'org.jsoup:jsoup:1.11.2'

// The rest of my dependencies...
}

我的尝试:

  1. 我用一般的 catch (Exception e) 语句包围了 Jsoup 调用,但错误仍然存​​在。
  2. 我查看了这个错误并找到了一些答案,比如 this onethis one ,但它们似乎都没有解决我的问题。
  3. 我将 Jsoup 调用移至 IntentService 并从我的 InstallReceiver 启动该服务,但仍然抛出相同的错误(来自服务)。
  4. 尝试使用 (new URL(url)).openConnection() 获取 HTML 并得到相同的错误,但现在它说因为 而不是 Jsoup URLConnection.
  5. 使用 Thread 类而不是 AsyncTask,但仍然出现相同的错误。

我的尝试暗示该错误与 Jsoup 并没有真正相关,它与应用程序未运行时从接收器连接到互联网有关!

我猜测当 我的应用 未运行时,此 HttpTracker$Connection.nextId() 存在导入问题。

知道如何解决这个问题吗?

最佳答案

这通常发生在您尝试读取不存在的 dll/so 文件时。
因为你所做的是非常标准的,所以问题可能出在 android studio 而不是你的代码上。
要解决它 - 只需将最小 sdk 提高到 20(或更多)。(高级网络分析器崩溃,这是因为它在版本 20 下不受支持)。

关于java - 在Android BroadcastReceiver中使用Jsoup时如何解决 "UnsatisfiedLinkError"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48422461/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com