2013-06-09 5 views
0

두 시간이 지난 후에 마침내 내 앱을 빌드 할 수있게되었습니다. gradlew를 사용하여 두 개의 서브 모듈을 사용하여 빌드합니다. 내 휴대 전화로 결과를 설치할 때마다AndroidStudio ClassNotFound 등급

, 그것은 자동으로 첫 번째 생성 된 클래스 상에 UndefinedClass의 오류가 발생 (활동)

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 Studio/Gradle에서 작동하려면 매우 간단하지 않습니다. 나는 그것이 어떻게 작동하는지 아직도 말해야 만한다. 그러나 나는 많은 대답을 읽은 후에 마침내 작동하게 만들었다. 당신은 이러한 종속성이있는 프로젝트가 있다면

가 :

  • 앱은 (Module1의, 모듈 2을)에 따라 달라
  • 으로 Module1에 의존 (모듈 2)

  • 열고 SDK 관리자 및 설치 구글 저장소안드로이드 지원 저장소

  • 을하려면 일을 더 간단하게 만들고 Gradle과 같은 구조의 파일을 이동 시키십시오. (나는 다른 구조가 안드로이드 플러그인으로 엉망이되는지 알 수 없다)
  • 각 안드로이드 라이브러리 매니페스트 안에 빈 애플리케이션을 추가한다.

패키지, 사용-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/res (실제 코드)
  • 모듈/src/main/java (실제 코드)
  • 모듈/src/main/res (리소스 레이아웃 등)
  • 모듈/SRC/메인/AndroidManifest.xml을
  • 모듈/build.gradle (우리 Gradle을 설정)이 빌드로

내 첫 번째 모듈.Gradle을 모듈 프로젝트에 depens 것을

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

참고 파일 (: SecondModule)이 SecondModule를있는 프로젝트의 루트에있는도 build.gradle 파일이 있음을 의미합니다.

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을 제외한 다른 모듈에 의존하지 않습니다. 두 프로젝트 모두 빌드는 buildscript뿐만 아니라 빌드에 mavenLocal()mavenCentral()을 사용합니다. 기본 android-library build.gradle 파일과의 차이점은 여기서 jar 파일 대신 maven에서 com.android.support:support-v4:13.0.0을로드한다는 것입니다. 따라서 우리는 gradle이 n 번 추가 할 것을 두려워하지 않고 각 모듈에 의존성을 평화롭게 추가 할 수 있습니다. 그게 작동하려면, 당신은 구글 저장소와 안드로이드 지원 저장소를 설치해야합니다. 이 같은

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

이 파일 대신 안드로이드 라이브러리 플러그인의 안드로이드 플러그인을 적용합니다. 모든 것이 잘되면, 잘 컴파일되고 실행되어야합니다. 또한 프로젝트가 개발 단계에 있기 때문에 최신 버전이 설치되어 있는지 확인하십시오. 향후이 대답이 무의미해질 수 있습니다.

안드로이드 지원 병을 사용하지 말고 대신 메이븐 저장소를 사용하십시오. 단점은 컴파일하는 데 시간이 걸릴 수 있지만 작동 만한다는 것입니다.

1

이 목적으로 안드로이드 앱 프로젝트를 이전했으며 제대로 작동합니다. 내가 어떤 IDE와 통합하지 않은

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

하지만 gradle installDebug를 실행 한 후 내가 설치 내 휴대 전화에서 * .apk 파일을 생성 : 이것은 내 빌드 같은 모습입니다. BTW 나는 프로젝트 구조를 변경하지 않았지만 오래된 디렉토리 구조를 저장했습니다.

+0

'android-library'에서 gradle을 사용하는 방법을 알고 있습니까? 나는 그 문제가 있다고 생각한다. –

+0

'android-library'를 쓰면 무슨 뜻인지 이해가 안 되니? – pepuch

+0

간단히 말하면, 안드로이드 라이브러리는 애플리케이션에 병합 할 수있는 다른 프로젝트 일뿐입니다. 모든 리소스가 주 프로젝트와 병합됩니다. 어쨌든, 나는 생각이있다. 복잡한 빌드 프로세스 대신 모든 것을 하나의 모듈로 병합 할 수 있습니다. android 라이브러리와 android 응용 프로그램의 주요 차이점은 응용 프로그램 섹션이없는 것입니다. 즉, 하나의 프로젝트에서 모든 것을 단순화 할 수 있도록 응용 프로그램 섹션을 강제 실행하는 버그가 있으며 작동하지 않을 때까지 최대한 분할합니다. –