![](/img/trans.png)
[英]Using a different Application Id for debug/QA (via gradle Build Flavor) and Google App Engine
[英]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.