Android Studio 构建风格

标签 android android-studio gradle android-gradle-plugin build.gradle

开始使用新的 android studio 看起来非常灵活,但这通常会带来陡峭的学习曲线。希望在这里得到一些帮助。

我已经构建了一个应用程序并使用此 build.gradle 文件部署了它

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "me.test.simpleProject
        minSdkVersion 10
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    signingConfigs {
        release {
            storeFile file("../my.keystore.jks")
            storePassword System.getenv("and_ks_pw")
            keyAlias System.getenv("and_ky_alias")
            keyPassword System.getenv("and_k_pw")
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            debuggable true
        }
    }
}

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

    compile project(":Library:lib_my_lib_a")
    compile project(":Library:lib_my_lib_b")
    compile project(":Library:lib_my_lib_c")
}

这非常有效,一旦我学习了语法,它就会比以前的系统更容易使用。

现在我的问题。

我基本上想添加一些产品口味。

我目前使用谷歌分析来跟踪点击次数、使用统计数据等简单的事情。

过去[在 android studio 之前]通常以免费/付费版本分发我的应用程序。

我想为以下内容创建构建风格: 谷歌免费玩 谷歌播放付费 亚马逊免费 亚马逊付费

这些应用程序的代码应该大部分相同,但它们不可能是相同的,例如在您的亚马逊应用程序中添加指向 google play 的链接会给您带来一些麻烦。因此,我需要在构建风格中拥有独特的类。

我正在阅读一些文档并观看谷歌谈论如何设置构建风格,但我有点困惑。

有人可以帮我定义这个项目的文件夹结构吗?

当前应用程序结构

test/
.gradle/
.idea/
app/
app/build
app/libs <-- empty
app/src
app/.gitignore
app/app.iml
app/build.gradle
app/proguard-rules.pro
build/
gradle/
Library/lib_a
Library/lib_b
Library/lib_c
.gitignore
build.gradle
gradle.properties
gradlew
gradlew.bat
local.properties
settings.gradle
test.iml

我可以将新文件夹放置在任何地方吗?如何将它们与成绩链接起来以正确构建变体?

最佳答案

您应该做的第一件事是将这些风格添加到您的 gradle 脚本中的 android 部分:

productFlavors {
    googleFree {
        applicationId = "com.your.app.gfree"
    }
    googlePaid {
        applicationId = "com.your.app.gpaid"
    }
    amazonFree {
        applicationId = "com.your.app.afree"
    }
    amazonPaid {
        applicationId = "com.your.app.apaid"
    }
}

请注意,如果需要,您可以为应用程序定义不同的包名称以及一些附加属性。完整详细信息:Gradle Plugin - Build Variants

此时,您的应用程序中将具有三个不同的概念:

构建类型: 调试发布

产品风格:googleFreegooglePaidamazonFreeamazonPaid

构建变体:构建类型和风格的组合

googleFreeDebug googleFreeRelease googlePaidDebug googlePaidRelease 亚马逊FreeDebug 亚马逊免费发布 亚马逊付费调试 amazonPaidRelease

flavor 特定资源:

为了定义资源,您应该:

app
  src        
    main
      java
      res
    googlePaid
      java
      res
    googleFree
      java
      res
    amazonPaid
      java
      res
    amazonFree
      java
      res

有了这个结构,您就可以将所有共享内容放在 main 下,而特定于 flavor 的内容将存在于每个 flavor 的文件夹中。然后,当构建应用程序的特定变体时,android 和 gradle 将为您解析正确的资源。如果您有兴趣了解更多详情,请参阅Resource Merging .

将风格添加到您的 build.gradle 文件后,如果您同步您的项目,Android Studio 将能够选择您的构建变体,您可以从 IDE 中选择这些变体:

Build Variants

关于Android Studio 构建风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551880/

相关文章:

Android WebView 提示证书不受信任,但在所有其他浏览器中受信任

android - 更新到 Android Studio,现在收到 AAPT : error: resource attr/type not found error for Navigation

java - 如何将HEX转换成两位数格式?

java - 在mavenLocal()中为.jar文件成功添加gradle依赖关系之后,我如何实际从Java类导入和使用该jar

Gradle 包装器和守护程序

java - 为什么公共(public)方法需要记录调用?

Android Studio 源文件未标记为源文件

android-studio - 多行文本缩小到 Android Studio 3 的左上角

java - Android Studio IDE fatal error - "Exception in plugin Gradle."

java - 无法解析 'read' 中的方法 'JsonPath'