2016-04-06 18 views
1

Son zamanlarda Android geliştirmeye başladım, bu yüzden hala alıştım. Bir Android uygulamasında kullanmak istediğim bir API buldum. Dış jarumu libs klasörüne ekledim ve kitaplık olarak ekledim ve build.gradle dosyasında derledim. Ben Uygulamayı çalıştırmak için gittiğimde gradle inşa sırasında bir hata alıyorum:Android Uygulaması için 65K'den fazla yöntemle harici bir JAR ekleme

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 

online etrafında arandı ve benim dış kavanoz çok büyüktü ve 65K yöntemleri sınırdan daha fazla içerdiği bu keşfetti. İnternette bulduğum birçok farklı çözüm yapmayı denedim. Multidexing'i denedim ve resmi Android web sitesindeki tüm talimatları takip ettim. İşte benim build.gradle geçerli: Ayrıca

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') 
} 

Ve AndroidManifest.xml değiştirildi: Ben Uygulama sınıfını kullanarak, ancak MainActivity değildi çünkü

<?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> 

Ben MultiDexApplication uzatmak için başvurum java dosyaları değişmedi. Her neyse, işe yaramadı ve aynı hatayı aldım. Daha sonra, kullanılmayan tüm sınıfların ve yöntemlerin sorun oluşturmayacak şekilde (0,) jar'umu daraltması gerektiğini öğrendim (en azından bunu anladım, yanılıyorsam beni düzelt). Bu yüzden, Android web sitesinde de belirtildiği gibi ProGuard'u da yapılandırdım. ben kullanmayı planladığınız tüm sınıfları tutar böylece

apply plugin: 'com.android.application' 

android { 
    ... 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 
      'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    ... 
} 

Ben de proguard-rules.pro dosyayı düzenleyen: İşte benim build.gradle olduğunu

# 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 *; 
#} 

Bu

da işe yaramadı ve ben aynı hata mesajı var .

Proguard veya MultiDex'u kurarken bir şeyleri yanlış yapmış olmalıyım gibi hissediyorum. Eğer yanlış bir şey yapsam ya da bir şeyi unutursam, birisi bunu düzeltmek için ne yapmam gerektiğini açıklayabilir mi? Değilse, 65 K'den fazla yönteme sahip olsa da API'yi kullanabileceğim başka yollar var mı? Teşekkürler: D

+1

için şu siteyi kontrol edin? Burada sağlanan –

+0

ayrıntılar bu bağımlılıkları denemek – USKMobility

+1

multidex http://developer.android.com/tools/building/multidex.html yapılandırmak için { derleme 'com.android.support:multidex:1.0.1' } –

cevap

0

Çoklu dex'i etkinleştirmeniz gerekir. Hatanın en ayrıntılı bilgi almak için daha fazla ayrıntı size --debug ve --stacktrace ile komut satırında gradlew ile çalıştırabilir miyim

http://developer.android.com/tools/building/multidex.html

How to enable multidexing with the new Android Multidex support library

+0

Bunun gibi, çevrimiçi olarak gördüğüm birçok çözüm, multidex için bunun yerine bir Uygulama sınıfı kullanıyor görünüyor. "AnaAktivite". Varsayılan MainActivity yerine bir Uygulama sınıfını nasıl kullanırım? – NeelZilla

+0

Sorunuzu anlayabildiğimden emin değilim ama bu sizin aradığınız şey olabilir ... _ Ayrıca notları da kontrol edin. _ Uygulamanız Uygulama sınıfını genişletirse, attachBaseContext() yöntemini geçersiz kılabilir ve multidx'i etkinleştirmek için MultiDex.install (bu) öğesini çağırabilirsiniz. Daha fazla bilgi için, bkz. MultiDexApplication başvuru document._snull – am110787

+0

Üzgünüz olmasaydı, MultiDexApplication'ı genişletecek Application sınıfımı nasıl oluşturabilirim ve hangi dizine kaydederim? Java bölümünü bir Application sınıfında hiç kodlamadım ve her zaman java materyallerini MainActivity sınıfında yaptım. – NeelZilla

İlgili konular