Android致命异常:java.lang.NoClassDefFoundError:无法解决以下问题:Lorg / apache / http / RequestLine;

时间:2019-08-02 21:43:35

标签: android ion oneplusfive

OnePlus5上的Android 9 上,当我尝试使用const path = require('path'); const HtmlWebPackPlugin = require("html-webpack-plugin"); module.exports = { entry: { background: "./src/background/QueryHandler.ts", popup: "./src/popup/popup.html", content: './src/content/Mapper.ts' }, output: { filename: '[name].js', path: path.resolve(__dirname, 'dist') }, mode: 'development', module: { rules: [ { test: /\.(js|jsx)/, exclude: /node_modules/, use: { loader: "babel-loader", options: { presets: ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"], } } }, { test: /\.(ts|tsx)?$/, exclude: /node_modules/, use: { loader: 'ts-loader', options: {} } }, { test: /\.html$/, use: [ { loader: "html-loader", options: { exportAsEs6Default: true } } ] }, { test: /\.css$/i, use: ['style-loader', 'css-loader'], }, { test: /\.(png|jpe?g|gif)$/, use: [ { loader: 'file-loader', options: { name: '[path][name].[ext]', } }, ], } ] } }; 库进行远程连接时,出现以下错误:

ion

我真的不明白哪里出了问题。

3 个答案:

答案 0 :(得分:2)

尝试将此行添加到您的build.gradle:

android {

 useLibrary 'org.apache.http.legacy' //(this worked for us when we had a similar issue with apache)

或者,在清单中尝试以下方法:

<uses-library android:name="org.apache.http.legacy" android:required="false" />

其原因是由于以下事实:从android 9起,该库已从bootclasspath中删除,并且默认情况下不适用于应用程序,因此必须添加该库。

请参阅:https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p

答案 1 :(得分:2)

我看到您在代码中使用的是Apache HTTP客户端。

  

由java.lang.ClassNotFoundException引起:未找到类   “ org.apache.http.RequestLine”

实际上,legacy mode for the use of this library不推荐从引导类路径中启用,since Android 9, Apache HTTP client library was completely removed也不推荐使用。

真正的解决方案是实现HttpUrlConnection类。 如果您使用的是ion library,则可以使用已经使用**HttpUrlConnection 类的两个更好的选项。**


GlidePicasso的使用类似于离子库。


滑行

从资源(/drawable目录)中加载图像:

Glide.with(context).load(R.drawable.android).into(imageView);

从url加载图像:

Glide.with(context).load(<image Url>).into(imageView);

将此依赖项定义到您的build.gradle文件中:

dependencies {
    ...
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    ...
}

毕加索:

从资源(/drawable目录)中加载图像:

Picasso.get().load(R.drawable.android).into(imageView);

从url加载图像:

Picasso.get().load(<image Url>).into(imageView);

您需要在build.gradle文件中定义此依赖项:

dependencies {
    ...
    implementation 'com.squareup.picasso:picasso:2.71828
    ...
}

使用这两个选项,您将获得相同的结果:

introducir la descripción de la imagen aquí

答案 2 :(得分:0)

如您所见,例外是ClassNotFoundException。当您要创建类的对象或访问不存在的类的字段时,会发生此异常。但是,等等,如果该类不存在,那么我的代码将无法编译。是的,您是正确的,因此该类存在,但是某些内容删除了该类。类似于Progaurd

因此,您必须添加一些progaurd规则来保留该类。将这些代码添加到您的proguard-rules.pro文件中:

-dontwarn org.apache.commons.**
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**

也不要使用maven存储库,而是下载jar文件并将其放入`/ app / libs'文件夹中,然后在build.gradle文件中写以下行。

compile files('libs/httpmime-4.3.5.jar')
compile files('libs/httpclient-4.3.5.jar')
compile files('libs/httpclient-cache-4.3.5.jar')
compile files('libs/httpcore-4.3.2.jar')