語言

Pack200.IPacker 介面

定義

封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。

[Android.Runtime.Register("java/util/jar/Pack200$Packer", "", "Java.Util.Jar.Pack200/IPackerInvoker")]
public interface Pack200.IPacker : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/jar/Pack200$Packer", "", "Java.Util.Jar.Pack200/IPackerInvoker")>]
type Pack200.IPacker = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
屬性
實作

備註

封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。 引擎 #newPacker的實例可用 取得。

高壓縮程度是透過 JSR 200 規範中描述的多種技術來達成的。 其中一些技術包括排序、重新排序以及常數池的共址。

包裝引擎初始化為以下屬性描述的初始狀態。 初始狀態可以透過取得引擎屬性(使用 #properties)並將修改後的屬性儲存在地圖上來操作。 資源檔案會直接傳遞,完全不會做任何修改。 類別檔案不會包含相同的位元組,因為解封器可以自由更改次要類別檔案特徵,例如常數池的順序。 然而,類別檔案在語義上將完全相同,如引用The Java&貿易;虛擬機規範/引用

預設情況下,封包器不會改變 JAR 元素的順序。 此外,每個JAR元件的修改時間與壓縮提示也保持不變。 (其他 ZIP 壓縮資訊,例如賦予 Unix 檔案權限的額外屬性,則會遺失。)

請注意,打包與解壓 JAR 通常會改變 JAR 中類別檔案的位元組內容。 這表示打包與解包通常會使依賴 JAR 元素逐位元組影像的數位簽章失效。 要同時簽署並打包 JAR,你必須先打包並解包 JAR 來「正規化」它,接著對已解包的 JAR 元件計算簽章,最後重新打包已簽字的 JAR。 兩個打包步驟應使用完全相同的選項,且區段限制可能也需設定為「-1」,以防止類別檔案大小略有變動時區段邊界的意外變動。

(原因如下:packer 對任何類別檔案結構的重新排序都是冪元的,因此第二次打包不會改變第一次打包產生的排序。此外,JSR 200 規範保證解封器能針對任何特定的壓縮元素傳輸順序產生特定的位元組影像。)

為了維持向下相容,套件檔案的版本會設定為容納輸入 JAR 檔案中的類別檔案。 換句話說,若類別檔案是最新的,則該套件檔案版本為最新版本;反之,若類別檔案版本也是最新版本,則該套件檔案版本為最舊。 對於中間類別檔案版本,將使用對應的套件檔案版本。 例如:若輸入 JAR 檔案僅由 1.5(或更低)類別檔案組成,則產生一個 1.5 相容的包檔。 這對於沒有類別檔案的檔案庫也會適用。 如果輸入的 JAR 檔案包含 1.6 類別檔案,則 pack 檔版本會設定為 1.6。

注意:除非另有說明,將參數傳遞 null 給本類別的建構子或方法會導致拋出 a NullPointerException

已在1.5中新增。

java.util.jar.Pack200.PackerJava 檔。

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

欄位

名稱 Description
ClassAttributePfx

當與類別屬性名稱串接時,表示該屬性的格式,並依據 JSR 200 規範的版面語言。

CodeAttributePfx

當與代碼屬性名稱串接時,表示該屬性的格式。

DeflateHint

若此屬性設為 #TRUE#FALSE,封包器會在輸出壓縮檔中相應設定壓縮提示,且不會傳送壓縮元素的個別壓縮提示。

Effort

若此屬性設為單一小數,封包器將使用指定的工作量來壓縮壓縮檔案。

Error

字串「error」,是某些屬性的可能值。

False

字串「false」,是某些屬性的可能值。

FieldAttributePfx

當與欄位屬性名稱串接時,表示該屬性的格式。

Keep

字串「keep」是某些屬性的可能值。

KeepFileOrder

若此屬性設為 #TRUE,封包器將依原始順序在原始檔案中傳送所有元素。

Latest

字串「最新」,是某些性質的可能值。

MethodAttributePfx

當與方法屬性名稱串接時,表示該屬性的格式。

ModificationTime

若此屬性設定為特殊字串 #LATEST,封包器將嘗試判定原始壓縮檔中所有可用條目中的最新修改時間,或是每個區段所有可用條目的最新修改時間。

Pass

字串「pass」是某些性質的可能值。

PassFilePfx

表示檔案應按位元組順序傳遞,且不壓縮。

Progress

拆包者的進度以百分比計算,並由拆包者定期更新。

SegmentLimit

此屬性為數字,表示每個歸檔區段的估計目標大小 N(以位元組為單位)。

Strip

字串「strip」,是某些性質的可能值。

True

字串「true」,是某些屬性可能的值。

UnknownAttribute

當遇到包含未知屬性的類別檔案時,表示應採取的動作。

屬性

名稱 Description
Handle

取得底層 Android 物件的 JNI 值。

(繼承來源 IJavaObject)
JniIdentityHashCode

回傳包裹實例的 java.lang.System.identityHashCode() 值。

(繼承來源 IJavaPeerable)
JniManagedPeerState

管理貴族的狀況。

(繼承來源 IJavaPeerable)
JniObjectReferenceControlBlock

封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。

(繼承來源 IJavaPeerable)
JniPeerMembers

成員存取與召喚支援。

(繼承來源 IJavaPeerable)
PeerReference

回傳JniObjectReference包裹後的 Java 物件實例。

(繼承來源 IJavaPeerable)

方法

名稱 Description
AddPropertyChangeListener(IPropertyChangeListener)

在屬性地圖上註冊一個監聽器,以接收 PropertyChange 事件。

Disposed()

當實例被處理後才被召喚。

(繼承來源 IJavaPeerable)
DisposeUnlessReferenced()

如果沒有未解決的參考資料,則 Dispose()呼叫;否則,則不做任何事。

(繼承來源 IJavaPeerable)
Finalized()

當實例完成後才會被通知。

(繼承來源 IJavaPeerable)
Pack(JarFile, Stream)

會把 JarFile 轉換成 Pack200 檔案庫。

Pack(JarInputStream, Stream)

會把 JarInputStream 轉換成 Pack200 壓縮檔。

Properties()

取得這台引擎的屬性集合。

RemovePropertyChangeListener(IPropertyChangeListener)

移除 PropertyChange 事件的監聽器,該事件由 #addPropertyChangeListener.

SetJniIdentityHashCode(Int32)

將回傳的值設為 JniIdentityHashCode

(繼承來源 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。

(繼承來源 IJavaPeerable)
SetPeerReference(JniObjectReference)

將回傳的值設為 PeerReference

(繼承來源 IJavaPeerable)
UnregisterFromRuntime()

取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。

(繼承來源 IJavaPeerable)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。

PackAsync(Pack200+IPacker, JarFile, Stream)

封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。

PackAsync(Pack200+IPacker, JarInputStream, Stream)

封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於