引導專案
引入 Google SST Speech 這個專案到現有專案時,要做兩件事,才能正確引導。
Gradle Project 修正 Dependencies
匯入專案後,會馬上缺少 Project 中要的 Protobuf ,因此要在 Project 的 build.gradle 增加,以及原本專案使用的 com.novoda:bintray-release:0.4.0 需要升級 0.5.0 (2018年),設定如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
        maven { url 'https://maven.google.com' }
        }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.novoda:bintray-release:0.5.0'
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.2'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        jcenter()
        maven { url 'https://maven.google.com' }
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}
匯入的專案更改應用程式為類別庫
由於匯入的專案如果是應用程式,可能在引用 gradle 的 compile 的時候會出錯,所以要修正該匯入模組的 build.gradle ,把一開始 apply plugin 的設定值 com.android.application 改為 library ,以及把 applicationId 拿掉,所有設定如下:
/*
 * Copyright 2016 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
apply plugin: 'com.android.library' //把 com.android.application 改為 library
apply plugin: 'com.google.protobuf'
ext {
    supportLibraryVersion = '25.4.0'
    grpcVersion = '1.4.0'
}
android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'
    flavorDimensions "dev"
    defaultConfig {
        //applicationId "com.google.cloud.android.speech" 移除 applicationId
        targetSdkVersion 25
        versionCode 1
        versionName '1.0'
    }
    signingConfigs {
        release {
            storeFile file(project.properties.storeFile)
            storePassword project.properties.storePassword
            keyAlias project.properties.keyAlias
            keyPassword project.properties.keyPassword
        }
    }
    productFlavors {
        dev {
            // Minimum version with platform multi-dex support
            minSdkVersion 21
            targetSdkVersion 25
            multiDexEnabled true
        }
        /*prod {
            // Minimum version that can run gRPC (TLS extension)
            minSdkVersion 16
            targetSdkVersion 25
            multiDexEnabled true
        }*/
    }
    buildTypes {
        debug {
            minifyEnabled false
            multiDexEnabled true
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.2'
        resolutionStrategy.force "com.android.support:support-annotations:$supportLibraryVersion"
    }
}
protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.3.0'
    }
    plugins {
        javalite {
            artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
        }
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.plugins {
                javalite {}
                grpc {
                    // Options added to --grpc_out
                    option 'lite'
                }
            }
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    // Support libraries
    compile "com.android.support:design:$supportLibraryVersion"
    compile "com.android.support:cardview-v7:$supportLibraryVersion"
    compile "com.android.support:recyclerview-v7:$supportLibraryVersion"
    // gRPC
    compile "io.grpc:grpc-okhttp:$grpcVersion"
    compile "io.grpc:grpc-protobuf-lite:$grpcVersion"
    compile "io.grpc:grpc-stub:$grpcVersion"
    compile 'javax.annotation:javax.annotation-api:1.2'
    protobuf 'com.google.protobuf:protobuf-java:3.3.1'
    // OAuth2 for Google API
    compile('com.google.auth:google-auth-library-oauth2-http:0.7.0') {
        exclude module: 'httpclient'
    }
    //Tests
    testCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}
task copySecretKey(type: Copy) {
    def File secretKey = file "$System.env.GOOGLE_APPLICATION_CREDENTIALS"
    from secretKey.getParent()
    include secretKey.getName()
    into 'src/main/res/raw'
    rename secretKey.getName(), "credential.json"
}
preBuild.dependsOn(copySecretKey)
匯入 gradle.properties
因為匯入後,可能會出現 path 是空的這樣的錯誤,因此需要從原有的專案中,把它的 gradle.properties 檔案的參數複製到現在專案的 gradle.properties 裡面,設定是:
# Sign key settings storeFile=../../../../../.android/debug.keystore storePassword=android keyAlias=androiddebugkey keyPassword=android
Compile 專案的方式
專案中需要用到 com.google.cloud.speech....之類的 api,所以需要在你使用的應用程式的 Module Gradle 設定檔( build.Gradle: app ),在下面的 dependencies 加入:
dependencies {
...
compile project(path: GoolgeSpeechSDK)
...
}
解決 Could not resolve project
直接引用 compile project(path: GoolgeSpeechSDK) 可能會導致出錯:
錯誤的意思是你沒有選擇 Gradle 的設定,這時候,可以用讓專案選擇設定檔的方式來完成,有以下的語法可以實現選擇:
implementation project(path: ':GoogleSpeechSDK', configuration: 'default')
或是
或是
annotationProcessor project(':GoogleSpeechSDK')
或是
compile project(path: ':gcpsst', configuration: 'default')
如果最後都沒辦法解決,那請直接到該模組的 build.gradle ,把 productFlavors 設定下其中的 prod 做註解:
Reference:
https://stackoverflow.com/questions/44105127/android-studio-3-0-flavor-dimension-issue
https://github.com/GoogleCloudPlatform/android-docs-samples/issues/54
http://blog.csdn.net/losingcarryjie/article/details/78945597
https://stackoverflow.com/questions/32021074/in-android-studio-how-can-i-change-an-app-project-to-a-library
http://blog.csdn.net/u010665691/article/details/44355323
http://blog.csdn.net/liranke/article/details/72866423
http://blog.csdn.net/kerwinJu/article/details/53053853
https://www.jianshu.com/p/af1eee86f24e
https://stackoverflow.com/questions/34421193/could-not-determine-the-dependencies-of-task-appcrashlyticsstoredeobsdebug-i
https://juejin.im/entry/59f6755a51882567aa5a9faf
https://stackoverflow.com/questions/45679847/android-studio-3-0-compile-issue-cannot-choose-between-configurations
http://www.voidcn.com/article/p-knsmzuea-bqp.html
https://stackoverflow.com/questions/32021074/in-android-studio-how-can-i-change-an-app-project-to-a-library
沒有留言:
張貼留言