簡體   English   中英

將Google的App Invites Beta與具有多種構建風格(生產,質量保證,調試等)的android應用一起使用

[英]Using Google's App Invites beta with an android app that has multiple build flavors (production, qa, debug, etc.)

我正嘗試在我的Android應用程序中使用Google的App Invites API,根據他們的指南 ,我需要將一個由開發人員控制台生成的配置文件放在該項目的app /目錄中。 我的應用程序具有多種構建風格,一種用於生產,質量保證和調試。 我不知道這是如何工作的(因為它是一個插件),具有多種構建風格,並且希望有人可以對此問題有所啟發。

我對google-services插件和json進行了一些調查,找到了該插件的來源。

第一件事:

由classpath引用並應用apply的gradle-plugin google-services僅是一個構建時插件! 因此,它只會影響應用程序的構建過程,而不會影響運行時過程!

此插件僅是將Google服務快速集成到您的應用中的快速入門幫助程序。 顯然,該過程有些復雜且沒有文檔記錄,因此Google應該明確該過程的作用。

實際上,我找到了插件版本com.google.gms:google-services:1.4.0-beta3的源代碼,沒有找到有關appinvites的任何特定參考,也沒有找到任何Google for App Invites的API! (但也許它只是使用具有其項目ID的通用API項目,但我沒有嘗試過)

它能做什么:

google-services gradle-plugin在您的應用程序模塊中查找提到的google-services.json文件。 然后,它會尋找配置的設置,例如由Google API開發者控制台生成到google-services.json文件中的project-id和tracking-id等。 根據找到的設置,將Android資源值生成到以下路徑:

$project.buildDir/generated/res/google-services/$variant.dirName/values/values.xml

例如,您的應用程序的調試版本:

app/generated/res/google-services/debug/values/values.xml

例如,如果您遵循了GCM教程,則JSON文件將包含API項目的ID,如下所示的android-resource:

<string name="gcm_defaultSenderId">project-id</string>

因此,此插件和JSON文件對於運行或發布您的應用程序不是必不可少的,它只是生成一些基本的android資源文件的快速入門幫助程序,可以更輕松地集成特定Google API功能。

請注意,在下面引用的源代碼中,google-services插件始終會為您的app / build.gradle中定義的每個應用程序變量生成這些android-resources。

如果您不希望這樣做,則應在所需的應用變量中使用這些生成的資源,然后刪除其他資源。 不要忘記從app / build.gradle中刪除適用於google-services的插件,否則它將為所有app-variant重新生成。

它沒有:

這個插件和JSON文件不會直接影響您應用的所說Google功能的內部運作! 如果您已經按照developer.android.com上的舊教程進行了有關如何集成(例如GCM或Google Analytics(分析))的說明,那么您甚至都不需要集成gradle-plugin google-services或google-services.json文件!

關於我在哪里找到源的通知:

集成google-services gradle-plugin並同步項目后,Gradle會自動將google-services依賴項下載到與此類似的路徑(在Windows上,您可能需要查看home / .gradle for Linux):

C:\\ Users \\ user \\ .gradle \\ caches \\ modules-2 \\ files-2.1 \\ com.google.gms \\ google-services \\ 1.4.0-beta3 \\ f1580f62e3be313eba041ce19b64fd3f44cf8951 \\ google-services-1.4.0-beta3-sources。罐

如果解壓縮此jar文件,則會找到兩個文件:

GoogleServicesPlugin.groovy
GoogleServicesTask.java

其中包含gradle-plugin的原始源代碼。

GoogleServicesPlugin.groovy

包含應用變體的處理和路徑的基本定義等。

GoogleServicesTask.java

包含實際的任務定義,請查找以下方法以查看其實際作用:

@TaskAction
public void action() throws IOException {
    checkVersionConflict();
    // google-services.json
    if (!quickstartFile.isFile()) {
        getLogger().warn("File " + quickstartFile.getName() + " is missing from module root folder." +
                " The Google Services Plugin cannot function without it.");

        // Skip the rest of the actions because it would not make sense if `quickstartFile` is missing.
        return;
    }

    // delete content of outputdir.
    deleteFolder(intermediateDir);
    if (!intermediateDir.mkdirs()) {
        throw new GradleException("Failed to create folder: " + intermediateDir);
    }

    JsonElement root = new JsonParser().parse(Files.newReader(quickstartFile, Charsets.UTF_8));

    if (!root.isJsonObject()) {
        throw new GradleException("Malformed root json");
    }

    JsonObject rootObject = root.getAsJsonObject();

    Map<String, String> resValues = new TreeMap<String, String>();

    handleProjectNumber(rootObject, resValues);

    JsonObject clientObject = getClientForPackageName(rootObject);

    if (clientObject != null) {
        handleAnalytics(clientObject, resValues);
        handleAdsService(clientObject, resValues);
        handleGoogleAppId(clientObject, resValues);
    } else {
        getLogger().warn("No matching client found for package name '" + packageName + "'");
    }

    // write the values file.
    File values = new File(intermediateDir, "values");
    if (!values.exists() && !values.mkdirs()) {
        throw new GradleException("Failed to create folder: " + values);
    }

    Files.write(getValuesContent(resValues), new File(values, "values.xml"), Charsets.UTF_8);
} 

因此,如果Google文檔沒有說明特定Google功能需要哪些資源,我建議為每個相關的構建類型/風味生成JSON文件,查看插件生成了哪些資源,然后手動放置這些資源。進入各自的src / buildtypeORflavor / res目錄。

之后,刪除對google-services插件和JSON文件的引用,即可完成操作。

根據Google Services Gradle插件文檔 ,該插件支持每個buildType不同的google-services.json ,但不支持每種口味

[...]自插件版本2.0.0-alpha3起,為構建類型添加了支持,這將使以下目錄結構有效:

app / src /

 main/google-services.json dogfood/google-services.json mytype1/google-services.json 

但是,它對我不起作用。 我正在使用2.0.0-alpha9 ,Gradle仍然抱怨它在根文件夾中找不到google-services.json文件

錯誤:任務':app:processProdReleaseGoogleServices'的執行失敗。

模塊根文件夾中缺少文件google-services.json。 沒有它,Google Services插件將無法運行。

我已提交錯誤: https//code.google.com/p/android/issues/detail?id = 200116

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM