为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Android Studio和Gradle构建android库?

/ 猿问

如何使用Android Studio和Gradle构建android库?

倚天杖 2020-02-04 15:47:08

我正在尝试从Eclipse迁移项目,但是没有尝试过。在Eclipse中,我有3个项目(2个android应用程序项目和1个android库项目)。2个应用程序项目取决于库项目。当我执行gradle导出时,我得到3个无效的项目。我愿意对项目进行重组,但尚未找到有关如何完成此工作的任何文档。


有没有办法使Eclipse导出的3个项目一起工作?我最好重新组织一下事情,如果可以的话,是否提供有关如何完成此工作的文档?


更新资料


我已将整个项目上传到GitHub https://github.com/respectTheCode/android-studio-library-example


更新1


根据Padma Kumar的建议,这就是我尝试过的方法。


创建一个名为 MyApp

点击File > New Module,选择Android Library并命名MyLib

请点击 Build > Make Project

构建因此错误而失败


Module "MyLib" was fully rebuilt due to project configuration/dependencies changes

Compilation completed with 1 error and 0 warnings in 19 sec

1 error

0 warnings

/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml

Gradle: <manifest> does not have package attribute.

然后,我package在清单中添加了一个属性


<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >

构建后出现此错误


Module "MyApp" was fully rebuilt due to project configuration/dependencies changes

Compilation completed with 2 errors and 0 warnings in 13 sec

2 errors

0 warnings

/.../MyApp/MyLib/src/main/java/com/example/mylib/MainActivity.java

Gradle: package R does not exist

Gradle: package R does not exist

添加依赖性似乎对该错误没有任何影响。从上面继续


请点击 File > Project Structure > Modules > MyApp-MyApp

切换至Dependencies标签页

点击+ > Module Dependency选择MyLib

点击Apply并OK

请点击 Build > Make Project

更新2


根据伊桑(Ethan)的建议,这是我们得到的


2个子项目build.gradle似乎具有所有正确的部分,唯一的区别是在下面是插件行MyApp/build.gradle。


buildscript {

    repositories {

        maven { url 'http://repo1.maven.org/maven2' }

    }

    dependencies {

        classpath 'com.android.tools.build:gradle:0.4'

    }

}

apply plugin: 'android'


dependencies {

    compile files('libs/android-support-v4.jar')

}


android {

    compileSdkVersion 17

    buildToolsVersion "17.0.0"


    defaultConfig {

        minSdkVersion 7

        targetSdkVersion 16

    }

}

根项目build.gradle是空的,所以我像这样添加了两个项目


dependencies {

    compile project(":MyLib")

    compile project(":MyApp")

}

我现在在构建时出现此错误


Gradle:

FAILURE: Build failed with an exception.

* Where:

Build file '/Users/kevin/GitHub/AppPress/MyApp/build.gradle' line: 2

查看完整描述

3 回答

?
幕布斯6054654

注意:此答案是纯Gradle答案,我定期在IntelliJ中使用此答案,但我不知道与Android Studio的集成方式。我相信自己会发生什么,所以这就是我使用Gradle和Android的方式。


TL; DR完整示例-https://github.com/ethankhall/driving-time-tracker/


免责声明:这是我正在/正在从事的项目。


Gradle具有定义的结构(您可以更改,底部的链接告诉您如何),如果您曾经使用过,则它与Maven非常相似。


Project Root

+-- src

|   +-- main (your project)

|   |   +-- java (where your java code goes)

|   |   +-- res  (where your res go)

|   |   +-- assets (where your assets go)

|   |   \-- AndroidManifest.xml

|   \-- instrumentTest (test project)

|       \-- java (where your java code goes)

+-- build.gradle

\-- settings.gradle

如果只有一个项目,则不需要settings.gradle文件。但是,您想添加更多项目,因此我们需要它。


现在,让我们看一下该build.gradle文件。您将需要它(添加android工具)


build.gradle


buildscript {

    repositories {

        mavenCentral()

    }

    dependencies {

        classpath 'com.android.tools.build:gradle:0.3'

    }

}

现在,我们需要告诉Gradle一些Android部件。很简单 一个基本的(在我的大多数情况下都适用)如下所示。我在此区块中有一条评论,它将使我在生成APK时指定版本名称和代码。


build.gradle


apply plugin: "android"

android {

        compileSdkVersion 17

        /*

        defaultConfig {

            versionCode = 1

            versionName = "0.0.0"

        }

        */

    }

我们将要添加的一些东西,以帮助尚未看到Gradle的人,使他们无需安装即可使用该项目。


build.gradle


task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) {

    gradleVersion = '1.4'

}

因此,现在我们要构建一个项目。现在,我们将添加其他。我将它们放在目录中,也许称为deps或subProjects。其实并不重要,但是您需要知道它放在哪里。要告诉Gradle项目在哪里,您需要将它们添加到settings.gradle中。


目录结构:


Project Root

+-- src (see above)

+-- subProjects (where projects are held)

|   +-- reallyCoolProject1 (your first included project)

|       \-- See project structure for a normal app

|   \-- reallyCoolProject2 (your second included project)

|       \-- See project structure for a normal app

+-- build.gradle

\-- settings.gradle

settings.gradle:


include ':subProjects:reallyCoolProject1'

include ':subProjects:reallyCoolProject2'

您应该确保的最后一件事是subProjects / reallyCoolProject1 / build.gradle拥有apply plugin: "android-library"而不是apply plugin: "android"。


像每个Gradle项目(和Maven)一样,我们现在需要告诉根项目有关它的依赖关系。这还可以包括所需的任何普通Java依赖项。


build.gradle


dependencies{

    compile 'com.fasterxml.jackson.core:jackson-core:2.1.4'

    compile 'com.fasterxml.jackson.core:jackson-databind:2.1.4'

    compile project(":subProjects:reallyCoolProject1")

    compile project(':subProjects:reallyCoolProject2')

}

我知道这似乎有很多步骤,但是一旦执行一次或两次,它们就非常容易。假设您已在其中安装了Android SDK,这种方法也将允许您在CI服务器上进行构建。


NDK旁注:如果要使用NDK,则需要类似以下内容。示例build.gradle文件可以在这里找到:https ://gist.github.com/khernyo/4226923


build.gradle


task copyNativeLibs(type: Copy) {

    from fileTree(dir: 'libs', include: '**/*.so' )  into  'build/native-libs'

}

tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }


clean.dependsOn 'cleanCopyNativeLibs'


tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->

  pkgTask.jniDir new File('build/native-libs')

}

资料来源:


http://tools.android.com/tech-docs/new-build-system/用户指南

https://gist.github.com/khernyo/4226923

https://github.com/ethankhall/driving-time-tracker/


查看完整回答
反对 回复 2020-02-04
?
SMILET

我在gradle构建/添加.jar库方面遇到了非常相似的问题。我通过结合使用来使其工作:


将libs文件夹移至项目的根目录(与“ src”相同的目录),并将库添加到finder中的此文件夹中(使用Mac OS X)

在Android Studio中,右键单击该文件夹以将其添加为库

编辑build.gradle文件中的依赖项,添加 compile fileTree(dir: 'libs', include: '*.jar')}

但是更重要和令人讨厌的是,在我开始工作仅几个小时后,Android Studio才发布了0.3.7,该版本声称已解决了许多问题,例如添加.jar库


http://tools.android.com/recent


希望这对人们有所帮助!


查看完整回答
反对 回复 2020-02-04
?
交互式爱情

这是我为mac用户提供的解决方案,我认为它也适用于window:

首先转到您的Android Studio工具栏

Build> Make Project(当您在线时,让其下载文件),然后

生成>编译模块“您的应用名称显示在此处”(仍在线,让文件
下载并完成),然后

运行完成的应用程序,它将启动模拟器并对其进行配置,然后运行它!

这就对了!!!快乐的编码家伙!


查看完整回答
反对 回复 2020-02-04

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信