2015-12-21 4 views
3

У меня небольшая проблема с комплиментом, Тот же код, который я использую на Nexus 5, без ошибок. как только я использую его в Tablet, это крах сразу и сказал, что ошибка

java.lang.NoClassDefFoundError: com.google.android.gms.R $ строка с бранч неизвестного источника ...

и если я удалить

multiDexEnabled true 

и удалить

compile 'org.twitter4j:twitter4j-core:4.0.2' 

затем он работает на обоих, кто-нибудь знает причину, почему? Ниже мой build.grade

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.1" 

defaultConfig { 
    applicationId "com.package.name" 
    minSdkVersion 16 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
    multiDexEnabled true 
} 
buildTypes { 
    release { 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
} 

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
testCompile 'junit:junit:4.12' 

compile 'org.twitter4j:twitter4j-core:4.0.2' 
compile 'com.android.support:multidex:1.0.1' 
compile 'com.android.support:appcompat-v7:23.1.1' 
compile 'com.google.android.gms:play-services:8.4.0' 
compile 'com.android.support:design:23.1.1' 
compile 'com.squareup.okhttp:okhttp:2.5.0' 
compile 'com.android.support:support-v4:23.1.1' 
compile 'com.squareup.picasso:picasso:2.5.2' 
compile 'com.isseiaoki:simplecropview:1.0.8' 
compile 'com.qozix:tileview:2.0.7' 
compile 'com.android.support:cardview-v7:23.1.1' 
compile 'com.google.android.gms:play-services-gcm:8.4.0' 

} 

Дуновение manifest.xml

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

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission 
    android:name="com.google.android.c2dm.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<application 
    android:name=".utility.Apps" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:largeHeap="true" 
    android:theme="@style/AppTheme" > 
    <receiver 
     android:name=".gcm.GcmBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </receiver> 

    <service android:name=".gcm.GcmIntentService" /> 

    <activity android:name=".SplashActivity" 
       android:theme="@style/AppTheme.NoActionBar" > 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    and then a lot of activities 
+0

сохранить все как есть и включить minifyEnabled false –

+0

@Radix Я просто установил minifyEnabled как false. такой же ошибка. Как только я исключаю jitter twitter4J, тогда все в порядке. Но мне нужен твиттер 4j tho ..... –

+0

Можете ли вы разместить свой стек и файл манифеста? –

ответ

1

Я много раз просматриваю свой код, и я смотрю на каждую используемую мной библиотеку, и я смог ее исправить.

Во-первых, как @BrainMiz сказал, что mutiDexEnabled должен отключить его. Я просто комментирую это, а не устанавливаю его как ложное.

defaultConfig { 
    applicationId "com.package.name" 
    minSdkVersion 16 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
    //multiDexEnabled true 
} 

Во-вторых, это зависимости. Поскольку у меня нет какой-либо баночки в моей LIBS папку я удалить

compile fileTree(dir: 'libs', include: ['*.jar']) 

также удалить все не используются GMS библиотеки, только добавьте тот, который используется. Я должен дать некоторые кредиты @Radix, потому что я обнаружил некоторую ошибку в своем коде относительно кода, где я проверяю, имеет ли устройство хранилище google play.

dependencies { 
    //compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 

    compile 'org.twitter4j:twitter4j-core:4.0.2' 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    //compile 'com.google.android.gms:play-services:8.4.0' 
    compile 'com.android.support:design:23.1.1' 
    compile 'com.squareup.okhttp:okhttp:2.5.0' 
    //compile 'com.android.support:support-v4:23.1.1' 
    compile 'com.squareup.picasso:picasso:2.5.2' 
    compile 'com.isseiaoki:simplecropview:1.0.8' 
    compile 'com.qozix:tileview:2.0.7' 
    compile 'com.android.support:cardview-v7:23.1.1' 
    compile 'com.google.android.gms:play-services-gcm:8.4.0' 
} 
1

Изменение этой линии

<uses-permission 
android:name="com.google.android.c2dm.permission.C2D_MESSAGE" 
android:protectionLevel="signature" /> 

с этим

<permission android:name="<your-package-name>.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="<your-package-name>.permission.C2D_MESSAGE" /> 

Также я вижу много аномалий в вашем мани в отношении того, как вы заявили GCM. Посмотрите на technical docs.

0

Я считаю, вы должны попробовать включить multDexEnabled false и избавиться от компиляции com.google.android.gms: play-services-gcm: 8.4.0 '. У вас есть две игровые сервисы, которые заставляют вас превращать multiDexEnabled в true

+0

Да, вы правы, я сделал это, потому что вижу ответ от других сообщений. Я просто понимаю, как это исправить. Я отправлю ответ. –

0

Я была такая же проблема

Имел в gradle.build зависимостей:

compile 'com.android.support:multidex:1.0.0' 

И в AndroidManifest.xml:

<application 
     ... 
     android:name="android.support.multidex.MultiDexApplication"> 
0

Имея такой же вопрос и застрял Весь день. Наконец получил решение.

Добавить в вашем уровне приложения gradle.build:

repositories { 
    jcenter() 
} 

dependencies { 
    compile 'com.google.android:multidex:0.1' 
} 

Затем переопределить attachBaseContext в вашем Применение класса, как показано ниже:

@Override 
protected void attachBaseContext(Context base) { 
    super.attachBaseContext(base); 
    MultiDex.install(this); 
} 

И не забыл включить поддержку mutlidex, как показано ниже:

android { 
    ... 
    defaultConfig { 
     ... 
     multiDexEnabled true 
    } 
} 
Смежные вопросы