2013-06-09 10 views
0

Через пару часов я, наконец, получил свое приложение для сборки. Используя gradlew, он строит с использованием двух подмодулей.AndroidStudio ClassNotFound gradle

Всякий раз, когда я установить результат на мой телефон, он автоматически выдаст ошибку UndefinedClass на первом созданного класса (Activity)

build.gradle

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.4' 
    } 
} 
apply plugin: 'android' 

dependencies { 
    compile files('libs/android-support-v4.jar') 
    compile files('libs/crittercism_v3_0_3_sdkonly.jar') 
    compile project(':libraries:slidingmenu') 
    compile project(':libraries:actionbarsherlock') 
} 

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 
    } 
} 

settings.gradle

include 'libraries:actionbarsherlock', ':libraries:slidingmenu', ':NewApp' 

Я как бы потерялся, это здание и все теперь, но он, по-видимому, не добавляет класс в пакет.

ответ

1

Обязательно получить работу с Android-студией/Gradle еще не совсем понятно. Я должен сказать, что, как это работает, все еще довольно грязно, но я, наконец, получил его на работу после прочтения многих ответов.

Если у вас есть проект, который имеет следующие зависимости:

  • App зависит от (Module1, module2)
  • Module1 зависит от (Module2)

  • Откройте менеджер SDK и установить Хранилище Google и Хранилище поддержки Android

  • К упростите ситуацию, переместите файлы в такой структуре, как Gradle, ожидайте этого. (Я не могу сказать, будет ли другая структура испорчена с помощью плагинов Android)
  • Добавить пустое приложение внутри каждого манифеста библиотеки Android.

Пакет использует-SDK и пустое приложение является строгим минимумом для андроида-библиотеки:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.example.mymodule"> 
    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="16"/> 
    <application /> 
</manifest> 

Модули имеют такую ​​структуру

  • модуль/сборки (где все становятся встроенный)
  • Модуль/src/main/java (фактический код)
  • Модуль/src/main/res (макет ресурсов и т. д.)
  • Модуль/SRC/главная/AndroidManifest.xml
  • модуль/build.gradle (наш Gradle конфигурации)

Мой первый модуль в этой сборке.Gradle файл

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.4' 
    } } apply plugin: 'android-library' 

repositories { 
    mavenLocal() 
    mavenCentral() } 

dependencies { 
    compile 'com.android.support:support-v4:13.0.0' 
    compile project(':SecondModule') } 

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 
    } 
} 

Обратите внимание, что модуль depens по проекту (: SecondModule) Это означает, что в корневом каталоге проекта находится SecondModule, в котором есть также build.gradle файл.

The SecondModule build.gradle выглядит следующим образом.

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.4' 
    } 
} 
apply plugin: 'android-library' 

repositories { 
    mavenLocal() 
    mavenCentral() 
} 

dependencies { 
    compile 'com.android.support:support-v4:13.0.0' 
} 

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 
    } 
} 

Второй модуль не зависит ни от чего, кроме android support. Обратите внимание, что в обоих проектах сборка использует mavenLocal() и mavenCentral() для построения, а не только buildscript. Разница с файлом build.gradle по умолчанию - com.android.support:support-v4:13.0.0 из maven вместо файла jar. Таким образом, мы можем спокойно добавить зависимость в каждом модуле, не опасаясь, что град добавит его n раз. Для этого вам нужно установить репозиторий Google и репозиторий поддержки Android.

MainApp Gradle выглядеть файл так:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.4' 
    } 
} 
apply plugin: 'android' 

repositories { 
    mavenLocal() 
    mavenCentral() 
} 

dependencies { 
    compile 'com.android.support:support-v4:13.0.0' 
    compile project(':MyModule') 
    compile project(':SecondModule') 
} 

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 
    } 
} 

Этот файл приложения андроида плагин вместо андроида-библиотеки плагина. Если все в порядке, оно должно хорошо компилироваться и запускаться. Кроме того, поскольку проект находится в разработке, убедитесь, что у вас установлена ​​последняя версия, и возможно, что в будущем этот ответ станет бессмысленным.

Убедитесь, что вы никогда не используете флеш-память андроида, но вместо этого используйте репозиторий maven. Недостатком является то, что для компиляции может потребоваться некоторое время, но оно будет работать.

1

Я перенесла свой проект приложения для Android для этой цели, и он работает. Это как моя сборка выглядит следующим образом:

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:0.4' 
    } 
} 

apply plugin: 'android' 
apply plugin: 'eclipse' 

repositories { 
    mavenLocal() 
    mavenCentral() 
} 

dependencies { 
    compile 'com.google.guava:guava:14.0.1' 
    compile 'com.google.code.gson:gson:2.2.4' 
    compile 'commons-io:commons-io:2.4' 
    compile 'pepuch:java-socket-server:1.0-SNAPSHOT' 
    compile 'pepuch:multiplayergame-socket-server:1.0-SNAPSHOT' 
} 

android { 
    compileSdkVersion 10 
    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 

      resources.srcDirs = ['src'] 
      aild.srcDirs = ['src'] 

      renderscript.srcDirs = ['src'] 

      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 

     } 


     instrumentTest.setRoot('tests') 
    } 
} 

Я не интегрировать его с любым IDE, но после того, как я бегом gradle installDebug он генерировал * .apk на моем телефоне, который я установил. BTW Я не менял структуру проекта, но сохранил старую структуру каталогов.

+0

Вы не знаете, как использовать град с 'android-library'. Я думаю, проблема в этом. –

+0

Я действительно не понимаю, что вы имеете в виду, написав 'android-library'? – pepuch

+0

Короче говоря, андроидная библиотека - это просто другой проект, который можно объединить с приложением. Все ресурсы объединяются с основным проектом. Во всяком случае, у меня есть идея. Я мог бы просто объединить все в один модуль вместо сложного процесса сборки. Главное отличие библиотеки android от android-приложения заключается в том, что в манифесте может не быть раздела приложения. Тем не менее, есть ошибка, которая заставляет область приложения присутствовать, поэтому я мог бы просто упростить все в одном проекте, и я разберу его как можно больше, пока он не сработает. –

Смежные вопросы