在我的应用(带有minSdkVersion 15
的Android)中,我有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)
InstallReceiver.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...
}
catch (Exception e)
语句围绕 Jsoup 调用,但仍然会抛出错误。IntentService
并从我的InstallReceiver
启动了该服务,但仍然抛出相同的错误(来自服务)。(new URL(url)).openConnection()
获取HTML并得到相同的错误,但现在由于URLConnection
而不是 Jsoup 。Thread
类而不是AsyncTask
,但仍然遇到同样的错误。我的尝试提示该错误与 Jsoup 并不真正相关,它与在应用未运行时从接收器连接到互联网有关!
我猜这个HttpTracker$Connection.nextId()
存在一个导入问题,当我的应用没有运行时会发生这种情况。
知道如何解决这个问题吗?
答案 0 :(得分:3)
这通常发生在您尝试读取不存在的dll / so文件时。
由于你所做的事情非常标准,问题可能出在android studio而不是你的代码上。
要解决它 - 只需将最小sdk提高到20(或更高)。
(高级网络分析器崩溃,因为它在版本20下不受支持)。