当前位置: 首页 > 知识库问答 >
问题:

如何先构建java模块,然后再构建android应用程序的其余部分?

濮阳鸿祯
2023-03-14

在我的java项目中,我有以下文件夹:

    null

app文件夹包含以下build.gradle:

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.3"
    }
}

plugins {
    id 'com.android.application'
}

def versionCodeDate() {
    return new Date().format("yyyyMMdd").toInteger()
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "pcmagas.vodafone_fu_h300s"
        minSdkVersion 28
        targetSdkVersion 30
        versionCode versionCodeDate()
        versionName "v"+versionCodeDate()

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    signingConfigs {
        release {
            println 'In release configs'
            def keystoreFile = rootProject.file(".keys/h300s.keystore")
            def env = System.getenv();

            if(env.containsKey('KEYSTORE_FILE')){
                keystoreFile = rootProject.file(env.get('KEYSTORE_FILE'))
            }

            if (keystoreFile.exists() ) {
                println("Configuring Signing options for release")

                android.signingConfigs["release"].storeFile = keystoreFile
                android.signingConfigs["release"].storePassword = System.getenv('MYAPP_RELEASE_STORE_PASSWORD')
                android.signingConfigs["release"].keyAlias = System.getenv('KEYALIAS')
                android.signingConfigs["release"].keyPassword = System.getenv('MYAPP_RELEASE_KEY_PASSWORD')
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            signingConfig =  signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    testOptions {
        unitTests.returnDefaultValues = true
    }
}

repositories {
    google()
    jcenter()
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.annotation:annotation:1.1.0'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
    implementation 'androidx.activity:activity-ktx:1.2.0'
    implementation 'androidx.fragment:fragment:1.3.0'

    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    implementation 'org.json:json:20210307'

    testImplementation 'com.github.gmazzo:okhttp-mock:1.4.1'
    testImplementation 'junit:junit:4.+'
    testImplementation 'org.mockito:mockito-core:3.+'

    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

settings_fetcher包含以下build_gradle:

plugins {
    id 'java-library'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}


task makeJar(type: Copy) {
    from('build/libs/')
    into('../app/libs/')
    include('settings_fetcher.jar')
}

我有什么办法来解决这个问题吗?

    null

其中^flave^是应用程序的风格,可以是debugrelease

以便能够首先构建.jar文件,然后构建我应用程序的apk。

共有1个答案

乐寒
2023-03-14

在您的示例中,settings_fetcher应用程序的依赖项,假设settings_fetcher是作为java-library创建的,那么您可以执行以下操作:

app文件夹的build.gradle中,将settings_fetcher项目作为依赖项放置:

// rest of build.gradle goes here
dependencies{
  // Your app's dependencies goes here
  implementation project(":settings_fetcher")
}

因此,运行./gradlew build之后,库的jar文件将位于./settings_fetcher/build/libs文件夹中。因此,也不需要makejar任务。

此外,任何库依赖项都应放在其各自的build.gradle中,在您的情况下,位于依赖项部分的settings_fetcher文件夹中。

例如,如果您的库需要OKHTTP客户端,则使用:

dependencies {
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
}

此外,为了使用第三方库,请确保您也有适当的存储库,例如,公共存储库是jcenter之一:

repositories {
    jcenter()
}

因此,如果不需要额外的库,则最终的build.gradle将是这个:

plugins {
    id 'java-library'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

或者万一您需要一些额外的依赖项&库:

plugins {
    id 'java-library'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

dependencies {
  // App dependencies go here.
}
 类似资料:
  • 目标 了解对象或对象集合如何变成应用程序 使用 Eclipse 创建驱动程序类 应用程序入口点 所有 Java 应用程序都需要一个入口点,让 Java 运行时知道将从这里开始执行代码。这个入口点就是 main() 方法。域对象(即应用程序的业务域 中包含的对象,例如 Person 和 Employee)通常没有 main() 方法,但每个应用程序中必须至少有一个类。 众所周知,Person 和它的

  • 问题内容: 对于这个问题,我实际上并没有太多的摆动或GUI设计方面的经验(大学中的一些WPF应用程序的水平差不多),但是我的任务是在工作中重构摆动旧式应用程序的一部分。 我被要求重构的部分围绕一个弹出窗口,该窗口可以根据特定的值对象以三种不同的格式显示。这3种不同的格式都共享一些基本字段,然后有条件地确定其他字段。负责此GUI元素的类的长度约为5k,我当时认为应该将其分为三个子类,并在基类中共享这

  • 问题内容: 我正在为NodeJS使用ExpressJS Web框架。 使用ExpressJS的人将他们的环境(开发,生产,测试…),路线等放置在。我认为这不是一个好方法,因为当您拥有大型应用程序时,app.js太大了! 我想要这个目录结构: 这是我的代码: app.js config / environment.js config / routes.js 我的代码运行良好,我认为目录的结构很漂亮。

  • 问题内容: 是否有在 Express.js 应用程序中分解和模块化文件的通用约定?还是将所有内容保存在一个文件中很普遍? 问题答案: 我的分解如下: 我使用Exports返回相关内容。例如,在模型中,我这样做: 然后,如果我需要创建一个电话号码,则非常简单: 如果我需要使用架构,那么 (假设我们正在routes文件夹中工作,需要先上一层然后再下一层模型) 编辑4 该 快递维基 具有建立在它之上的框

  • 一个普通的应用程序由以下文件组成: 二进制文件 这个安装在 /usr/bin。 一个桌面文件 这个桌面文件向shell提供关于这个程序的重要信息,例如名称、图标、D-Bus名称,启动的命令行。安装在 /usr/share/applications. 一个图标 这个图标安装在 /usr/share/icons/hicolor/48x48/apps, 无论当前背景是什么系统都会到这里查找图标。 一个设

  • 在gradle attemp构建项目后有一个日志(使用Pro buf) :app:GeneratedBugProto失败 失败:生成失败,出现异常。 > 错误:任务“:app:generateDebugProto”的执行失败。 协议:标准输出:。stderr:/Users//app/build/extracted protos/main:警告:目录不存在/用户//app/src/debug/pro