我最近开始进行Android开发,所以我仍然习惯了它。我找到了一个我想在Android应用中使用的API。我将外部jar添加到我的libs
文件夹中,并确保将其添加为库并在build.gradle
文件中进行编译。当我去运行应用程序时,我在gradle构建过程中遇到错误:
Error:Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException:
org.gradle.process.internal.ExecException: Process 'command 'C:\Program
Files\Java\jdk1.7.0_51\bin\java.exe'' finished with non-zero exit value 1
我在网上搜索并发现这是因为我的外部jar太大了,并且包含超过65K方法的限制。我试过在网上找到很多不同的解决方案。我尝试了多索引并遵循官方Android网站上的所有说明。这是我的build.gradle
:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
...
multiDexEnabled true
}
buildTypes {
...
}
}
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:multidex:1.0.0'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile files('libs/my-external-jar.jar')
}
还改变了我的AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.app" >
...
<application
...
android:name="android.support.multidex.MultiDexApplication">
<activity
...
</activity>
</application>
</manifest>
我没有更改我的应用程序java文件以扩展MultiDexApplication,因为我没有使用Application类,而是使用MainActivity。无论如何,这没有用,我得到了同样的错误。然后我了解到我应该使用ProGuard
来缩小我的罐子,这样所有未使用的类和方法都不会引起问题(至少那是我对它的理解,请纠正我,如果我和# 39;我错了)。所以我还按照Android网站上的说明配置了ProGuard
。这是我的build.gradle
:
apply plugin: 'com.android.application'
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
...
}
我还编辑了proguard-rules.pro
文件,以便保留我计划使用的所有类:
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in C:\Users\neelz_000\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
-keep public class com.myexternalapi.Class1
-keep public class com.myexternalapi.Class2
-keep public class com.myexternalapi.Class3
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
这也不起作用,我得到了同样的错误信息。
我觉得在设置Proguard
或MultiDex
时我一定做错了。如果我确实做错了什么或忘记了什么,有人可以解释我应该做些什么来解决它?如果没有,有没有其他方法可以使用API,即使它有超过65K的方法?谢谢:D
答案 0 :(得分:0)