如何使用其他项目中的共享库模块在Android Studio中运行应用程序?

时间:2015-07-14 17:24:25

标签: java android android-studio android-gradle

我在另一个项目中使用自编写的库模块,就像在

中建议的那样

https://code.google.com/p/android/issues/detail?id=105570

Android Studio 0.8.1 Creating Modules without copying files?

我将这些行添加到了settings.gradle中,并通过" Project Structure" -Dialog添加了包含的库作为项目的依赖项。我使用Android Studio 1.2.2。

IDE中的所有内容看起来都很好(导入正常,图书馆代码可以浏览和编辑,两个模块都可以"制作"没有错误),但我似乎无法启动我的手机/模拟器项目。

我得到一个" classNotFoundException"对于应用程序中使用的库中的第一个类。

我从Eclipse中按类复制粘贴整个项目类,它可以毫无问题地运行。

我需要做些什么才能将我的应用程序库的编译类放到手机上?

settings.gradle

include ':app'
include ':Sudoku'
project(':Sudoku').projectDir=new File('/../Libs/sudoku')

build.gradle (app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.frozenmilkmeteoroids.sudokuapp"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile project(':Sudoku')
}

build.gradle (图书馆)

apply plugin: 'com.android.library'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
}

1 个答案:

答案 0 :(得分:1)

我也使用Android Studio 1.2.2,这里是如何创建独立库项目并从主项目中引用它的一步一步:

  1. 创建android项目库,就像正常的android项目一样。称之为 libProjectName

  2. libProjectName 应用模块重命名为 libModuleName

  3. libModuleName' build.gradle 中的
  4. 更改:     apply plugin: 'com.android.application'apply plugin: 'com.android.library'并从 defaultConfig 部分删除 applicationId

  5. 转到主项目,即参考项目 libProjectName

  6. 修改settings.gradle,添加:
  7.   

    包括':libProjectName:libModuleName'

         

    项目(':libProjectName:libModuleName')。projectDir = new File(' relative / path / libProjectDir / libModuleDir')

    1. app 模块中修改build.gradle,添加:
    2.   

      编译项目(':libProjectDir:libModuleName')

      现在假设Sudoku中的模块模块目录名称是 moduleSudoku 并应用上述步骤,解决方案是:

      <强> settings.gradle

      include ':app'
      include ':Sudoku:moduleSudoku'
      project(':Sudoku:moduleSudoku').projectDir=new File('/../Libs/sudoku/moduleSudoku')
      

      build.gradle(app)

      apply plugin: 'com.android.application'
      
      android {
          compileSdkVersion 22
          buildToolsVersion "22.0.1"
      
          defaultConfig {
              applicationId "com.frozenmilkmeteoroids.sudokuapp"
              minSdkVersion 15
              targetSdkVersion 22
              versionCode 1
              versionName "1.0"
          }
          buildTypes {
              release {
                  minifyEnabled false
                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
              }
          }
      }
      
      dependencies {
          compile fileTree(include: ['*.jar'], dir: 'libs')
          compile 'com.android.support:appcompat-v7:22.2.0'
          compile project(':Sudoku:moduleSudoku')
      }
      

      build.gradle(library)

      apply plugin: 'com.android.library'
      
      android {
          compileSdkVersion 22
          buildToolsVersion "22.0.1"
      
          defaultConfig {
              minSdkVersion 15
              targetSdkVersion 22
              versionCode 1
              versionName "1.0"
          }
          buildTypes {
              release {
                  minifyEnabled false
                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
              }
          }
      }
      
      dependencies {
          compile fileTree(dir: 'libs', include: ['*.jar'])
          compile 'com.android.support:appcompat-v7:22.2.0'
      }