2017-05-26 18 views
32

我最近注意到每次運行BuildGenerate Signed APK...時,Android Studio 3 Canary 1在<module>/release/output.json處生成的新文件,其內容如下所示。什麼是Android Studio生成的<module> /release/output.json

任何人都可以確認看到這種行爲嗎?或者是由於筆記本電腦上的某些本地配置?

任何人都可以解釋這個文件的目的?是否可以加入.gitignore

[{ 
    "outputType": { 
    "type": "APK" 
    }, 
    "apkInfo": { 
    "type": "MAIN", 
    "splits": [], 
    "versionCode": 32 
    }, 
    "outputFile": { 
    "path": "/path/to/the/generated/release/filename.apk" 
    }, 
    "properties": { 
    "packageId": "com.example.android", 
    "split": "" 
    } 
}] 
+1

正常的配置,你可以使用例如:穿上服務器,檢查應用程序的舊版本,如果有更新並通知用戶,或在網站上顯示當前版本等 –

回答

7

你不需要擔心這個output.json文件。 Android studio 3.0負責這個文件。

讓我來向你解釋一下。對於舊版本android studio所做的是生成一個簽名的APK,並將其放在「輸出」文件夾中。即使如果你的APK有多個風格維度,它們可能位於與輸出文件夾相同的目錄中。從最新版本的android studio 3.0(canary and stable)開始,他們組織了這個文件結構。對於每個簽名APK的每個風格維度,它都會有一個單獨的文件夾,其中包含一個output.json文件。這個文件實際上只是對源APK的描述。如果你能看到你在這裏分享的文件正在描述發佈的APK。

+0

所以沒有辦法禁用此文件夾和文件生成並將所有味道APK保存到輸出文件夾? – chitgoks

+0

我仍然不知道如何禁用output.json。但每個有風味的簽名apk都會有獨立的文件夾和風味名稱。在過去所有的apks都生成並放置在輸出文件夾@chitgoks –

+1

是的,你是正確的。我覺得它很煩人,爲什麼他們沒有選項將它們全部放在輸出文件夾中。我喜歡它在 chitgoks

2

ouput.json文件是一種適用於您生成的APK的元數據文件。此文件是由於各種原因而生成的。我發現他們中的一些,這可能不是列出所有的用例,但這裏的列表:

  1. Generate Signed APK

    {module}/build/intermediates/manifest/androidTest/debug/ouput.json 
    
  2. 下執行

  3. 生成AndroidManifest.xml文件生成它是不是生成的單元測試,但只生成的AndroidTests(這取決於Android框架將被執行)

  4. 在上述指定位置爲AndroidManifest.xml生成的文件output.json與爲您提供的APK生成的文件略有不同。
  5. 正如您所見,output.json文件所描述的屬性與我們通常在我們的build.gradle文件中指定的屬性非常相似,所以必須使用&才能使構建過程成功運行(或者它可能會作爲成功構建並從build.gradle提取所需屬性的結果)。

在此,我們可以得出結論,它肯定取決於Android的框架內產生&它關係到被描述的細節有關APK清單文件/信息。

  • 我親自試過谷歌&找到合適的答案,這甚至在Android開發者網站,但似乎沒有什麼是記錄這個文件的細節。

  • 我已經在GitHub上&檢查了幾個項目檢查.gitignore文件一樣,我找不到任何類似output.json文件的任何託管在GitHub上的項目。所以在你的提交中排除它們應該是一個好習慣。

  • 簡而言之,此文件是一個描述性文件,其中包含有關項目的重要元數據。它必須是有原因的。我建議你不要惹它,因爲我們不知道它可能會導致英寸

+0

好的研究,但我會補充說,如果你不需要它,刪除文件應該是安全的。 – Stan

0

我添加../../outputFileName的開始,APK文件放入文件夾output

android{ 
    applicationVariants.all { variant -> 
     variant.outputs.all { output -> 
      output.outputFileName = "../../output_name.apk" 
     } 
    } 
} 
相關問題