Pack200.IPacker Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Die Packer-Engine wendet verschiedene Transformationen auf die JAR-Eingabedatei an, sodass der Paketdatenstrom durch einen Kompressor wie gzip oder zip hoch komprimiert werden kann.
[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
- Attribute
- Implementiert
Hinweise
Die Packer-Engine wendet verschiedene Transformationen auf die JAR-Eingabedatei an, sodass der Paketdatenstrom durch einen Kompressor wie gzip oder zip hoch komprimiert werden kann. Eine instance der Engine kann mit #newPacker
abgerufen werden.
Der hohe Komprimierungsgrad wird durch eine Reihe von Techniken erreicht, die in der JSR 200-Spezifikation beschrieben werden. Einige der Techniken sind sortieren, neu sortieren und co-location des Konstantenpools.
Die Pack-Engine wird mit einem Anfangszustand initialisiert, wie in ihren Eigenschaften unten beschrieben. Der Anfangszustand kann durch Abrufen der Engine-Eigenschaften (mit #properties
) und Speichern der geänderten Eigenschaften auf der Karte bearbeitet werden. Die Ressourcendateien werden ohne Änderungen übergeben. Die Klassendateien enthalten keine identischen Bytes, da das Entpacker kleinere Klassendateifeatures wie die konstante Poolreihenfolge ändern kann. Die Klassendateien sind jedoch semantisch identisch, wie in <Zitat the>Java&trade angegeben; Vm-Spezifikation</Cite>.
Standardmäßig ändert der Packer die Reihenfolge der JAR-Elemente nicht. Außerdem werden die Änderungszeit und der Deflationshinweis jedes JAR-Elements unverändert übergeben. (Alle anderen ZIP-Archivinformationen, z. B. zusätzliche Attribute, die Unix-Dateiberechtigungen erteilen, gehen verloren.)
Beachten Sie, dass das Packen und Entpacken einer JAR-Datei im Allgemeinen den Bytewise-Inhalt von Klassendateien in der JAR-Datei ändert. Dies bedeutet, dass das Packen und Auspacken im Allgemeinen alle digitalen Signaturen ungültig macht, die auf bytewise-Bildern von JAR-Elementen basieren. Um eine JAR zu signieren und zu packen, müssen Sie zuerst die JAR packen und entpacken, um sie zu "normalisieren", dann Signaturen für die entpackten JAR-Elemente zu berechnen und schließlich die signierte JAR-Datei neu zu packen. Beide Packungsschritte sollten genau die gleichen Optionen verwenden, und die Segmentgrenze muss möglicherweise auch auf "-1" festgelegt werden, um eine versehentliche Variation von Segmentgrenzen zu verhindern, wenn sich die Klassendateigrößen leicht ändern.
(Deshalb funktioniert das: Jede Neuanordnung, die der Packer von Klassendateistrukturen ausführt, ist idempotent, sodass die zweite Verpackung nicht die Reihenfolgen ändert, die von der ersten Verpackung erzeugt werden. Außerdem wird der Entpacker durch die JSR 200-Spezifikation garantiert, um ein bestimmtes byteweises Bild für jede bestimmte Übertragungsreihenfolge von Archivelementen zu erzeugen.)
Um die Abwärtskompatibilität zu gewährleisten, wird die Version der Packdatei so festgelegt, dass die Klassendateien in der JAR-Eingabedatei enthalten sind. Anders ausgedrückt: Die Version der Packdatei ist die neueste, wenn die Klassendateien die neueste sind und umgekehrt die Version der Packdatei die älteste ist, wenn die Klassendateiversionen auch die älteste sind. Für zwischengeschaltete Klassendateiversionen wird die entsprechende Packdateiversion verwendet. Beispiel: Wenn die JAR-Eingabedateien ausschließlich aus 1,5 (oder weniger) Klassendateien bestehen, wird eine 1.5-kompatible Packdatei erstellt. Dies gilt auch für Archive, die keine Klassendateien enthalten. Wenn die JAR-Eingabedateien eine 1.6-Klassendatei enthalten, wird die Version der Packdatei auf 1.6 festgelegt.
Hinweis: Sofern nicht anders angegeben, führt das Übergeben eines null
Arguments an einen Konstruktor oder eine Methode in dieser Klasse dazu, dass ein NullPointerException
ausgelöst wird.
Hinzugefügt in 1.5.
Java-Dokumentation für java.util.jar.Pack200.Packer
.
Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In Attribution License beschriebenen Begriffen verwendet werden.
Felder
ClassAttributePfx |
Gibt bei Verkettung mit einem Klassenattributnamen das Format dieses Attributs an, wobei die in der JSR 200-Spezifikation angegebene Layoutsprache verwendet wird. |
CodeAttributePfx |
Gibt bei Verkettung mit einem Codeattributnamen das Format dieses Attributs an. |
DeflateHint |
Wenn diese Eigenschaft auf |
Effort |
Wenn diese Eigenschaft auf eine einzelne Dezimalziffer festgelegt ist, verwendet der Packer den angegebenen Aufwand für die Komprimierung des Archivs. |
Error |
Die Zeichenfolge "error", ein möglicher Wert für bestimmte Eigenschaften. |
False |
Die Zeichenfolge "false", ein möglicher Wert für bestimmte Eigenschaften. |
FieldAttributePfx |
Gibt bei Verkettung mit einem Feldattributnamen das Format dieses Attributs an. |
Keep |
Die Zeichenfolge "keep", ein möglicher Wert für bestimmte Eigenschaften. |
KeepFileOrder |
Wenn diese Eigenschaft auf |
Latest |
Die Zeichenfolge "latest", ein möglicher Wert für bestimmte Eigenschaften. |
MethodAttributePfx |
Gibt bei Verkettung mit einem Methodenattributnamen das Format dieses Attributs an. |
ModificationTime |
Wenn diese Eigenschaft auf die spezielle Zeichenfolge |
Pass |
Die Zeichenfolge "pass", ein möglicher Wert für bestimmte Eigenschaften. |
PassFilePfx |
Gibt an, dass eine Datei byteweise ohne Komprimierung übergeben werden soll. |
Progress |
Der Fortschritt des Entpackers als Prozentsatz, der regelmäßig vom Entpacker aktualisiert wird. |
SegmentLimit |
Diese Eigenschaft ist eine Zahl, die die geschätzte Zielgröße N (in Bytes) jedes Archivsegments angibt. |
Strip |
Die Zeichenfolge "strip", ein möglicher Wert für bestimmte Eigenschaften. |
True |
Die Zeichenfolge "true", ein möglicher Wert für bestimmte Eigenschaften. |
UnknownAttribute |
Gibt die Aktion an, die ausgeführt werden soll, wenn eine Klassendatei mit einem unbekannten Attribut gefunden wird. |
Eigenschaften
Handle |
Ruft den JNI-Wert des zugrunde liegenden Android-Objekts ab. (Geerbt von IJavaObject) |
JniIdentityHashCode |
Gibt den Wert von |
JniManagedPeerState |
Status des verwalteten Peers. (Geerbt von IJavaPeerable) |
JniPeerMembers |
Unterstützung für Zugriff und Aufruf von Mitgliedern. (Geerbt von IJavaPeerable) |
PeerReference |
Gibt einen JniObjectReference des umschlossenen Java-Objekts instance zurück. (Geerbt von IJavaPeerable) |
Methoden
AddPropertyChangeListener(IPropertyChangeListener) |
Registriert einen Listener für PropertyChange-Ereignisse in der Eigenschaftenzuordnung. |
Disposed() |
Wird aufgerufen, wenn die instance gelöscht wurde. (Geerbt von IJavaPeerable) |
DisposeUnlessReferenced() |
Wenn keine ausstehenden Verweise auf diese instance vorhanden sind, ruft auf |
Finalized() |
Wird aufgerufen, wenn die instance abgeschlossen wurde. (Geerbt von IJavaPeerable) |
Pack(JarFile, Stream) |
Verwendet eine JarFile-Datei und konvertiert sie in ein Pack200-Archiv. |
Pack(JarInputStream, Stream) |
Verwendet einen JarInputStream und konvertiert ihn in ein Pack200-Archiv. |
Properties() |
Rufen Sie den Satz der Eigenschaften dieser Engine ab. |
RemovePropertyChangeListener(IPropertyChangeListener) |
Entfernen Sie einen Listener für PropertyChange-Ereignisse, der |
SetJniIdentityHashCode(Int32) |
Legen Sie den von |
SetJniManagedPeerState(JniManagedPeerStates) |
Die Packer-Engine wendet verschiedene Transformationen auf die JAR-Eingabedatei an, sodass der Paketdatenstrom durch einen Kompressor wie gzip oder zip hoch komprimiert werden kann. (Geerbt von IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Legen Sie den von |
UnregisterFromRuntime() |
Heben Sie die Registrierung dieses instance auf, damit die Laufzeit sie nicht von zukünftigen Java.Interop.JniRuntime+JniValueManager.PeekValue Aufrufen zurückgibt. (Geerbt von IJavaPeerable) |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine Typkonvertierung mit Überprüfung der Android-Laufzeit aus. |
JavaCast<TResult>(IJavaObject) |
Die Packer-Engine wendet verschiedene Transformationen auf die JAR-Eingabedatei an, sodass der Paketdatenstrom durch einen Kompressor wie gzip oder zip hoch komprimiert werden kann. |
GetJniTypeName(IJavaPeerable) |
Die Packer-Engine wendet verschiedene Transformationen auf die JAR-Eingabedatei an, sodass der Paketdatenstrom durch einen Kompressor wie gzip oder zip hoch komprimiert werden kann. |
PackAsync(Pack200+IPacker, JarFile, Stream) |
Die Packer-Engine wendet verschiedene Transformationen auf die JAR-Eingabedatei an, sodass der Paketdatenstrom durch einen Kompressor wie gzip oder zip hoch komprimiert werden kann. |
PackAsync(Pack200+IPacker, JarInputStream, Stream) |
Die Packer-Engine wendet verschiedene Transformationen auf die JAR-Eingabedatei an, sodass der Paketdatenstrom durch einen Kompressor wie gzip oder zip hoch komprimiert werden kann. |