簡體   English   中英

導出Android應用程序到底有什么作用?

[英]What does exporting an Android application do, exactly?

http://developer.android.com/tools/publishing/preparing.html上的說明表明,在將我的android應用程序發布給公眾之前,我應該先導出它。 導出中執行哪些步驟?

這是我所了解的:

  1. <Application>中的android:debuggable在AndroidManifest.xml中設置為false
  2. APK由開發人員的(my)密鑰而不是內置的調試密鑰簽名
  3. zipalign在已簽名的APK上運行

    我在AndroidManifest.xml中手動將android:debuggable設置為false,並比較了調試和導出的apk。 這些是唯一不同的文件:

    Binary files ../../release/x//classes.dex and x/classes.dex differ
    Binary files ../../release/x//META-INF/CERT.RSA and x/META-INF/CERT.RSA differ
    diff -r ../../release/x//META-INF/CERT.SF x/META-INF/CERT.SF
    diff -r ../../release/x//META-INF/MANIFEST.MF x/META-INF/MANIFEST.MF

    那么我上面的列表是否包括所有內容? 還是不同的classes.dex表示調試和導出的apk之間還有其他區別?

    感謝下面的錯誤454的回答,我在每個apk的classes.dex文件上運行了baksmali,發現了一個區別:

    diff -r out/xx/xx/xx/BuildConfig.smali ../../../release/x/out//xx/xx/xx/BuildConfig.smali
    7c7
    < .field public static final DEBUG:Z = true
    ---
    > .field public static final DEBUG:Z

    所以我想我可以在此列表中添加第四項:

  4. 在類BuildConfig(gen /.../ BuildConfig.java)中,DEBUG設置為false。

除了列出的內容外,proguard還在導出過程中運行。

如果您對classes.dex中差異的本質非常好奇,則可以獲取baksmali ,解壓縮apk並反編譯classes.dex文件:

java -jar baksmali-1.3.3.jar classes.dex

這將創建一個out /文件夾,其中包含您可以在舊/新內容之間進行區分的內容。

BuildConfig.DEBUG標志不同的原因是因為您導出了SDK發行說明修訂版17中所述的發行版與調試版:

添加了一項功能,使您只能在調試模式下運行某些代碼。 現在,生成會生成一個名為BuildConfig的類,其中包含一個DEBUG常量,該常量會根據您的生成類型自動設置。 您可以在代碼中檢查(BuildConfig.DEBUG)常量以運行僅調試功能。

無論目標是debug還是release ,構建都需要執行許多步驟。 這不是直接的答案,但我建議您查看android-sdk/tools/ant/build.xml

打開文件后,搜索target name="release" 您將看到depends屬性,該屬性列出了將被調用的同一文件中的其他目標。 您可以將release運行的目標與debug目標進行比較。 在每個目標內部,您可以具體查看要運行的內容(例如android-sdk/platform-tools某些實用程序),以及確定是否要運行的內容。

您還可以查看在目標調用期間將哪些參數傳遞給外部實用程序,這使您可以閱讀有關實用程序這些參數的文檔,以查看特定步驟的具體情況。

需要注意的是,雖然您可能會在eclipse中導出應用程序,但是研究ant build.xml可以提供一種系統地標識將為完整構建執行的每個步驟的方法。

舉一個復雜的例子,如果查看target -set-release-mode ,可以看到一個實例,在該實例中可以生成一個用發行密鑰而不是調試密鑰簽名的調試包。

還是不同的classes.dex表示調試和導出的apk之間還有其他區別?

即使使用相同的代碼,生成的classes.dex也不必與以前編譯的版本二進制相同。 這是由於編譯器優化代碼AFAIK的方式不同。

暫無
暫無

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

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