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.
Das Packermodul wendet verschiedene Transformationen auf die Eingabe-JAR-Datei an, wodurch der Paketdatenstrom von einem Kompressor wie gzip oder ZIP stark 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
Das Packermodul wendet verschiedene Transformationen auf die Eingabe-JAR-Datei an, wodurch der Paketdatenstrom von einem Kompressor wie gzip oder ZIP stark komprimiert werden kann. Eine Instanz des Moduls kann mithilfe #newPacker
von .
Der hohe Grad der Komprimierung wird mit einer Reihe von Techniken erreicht, die in der JSR 200-Spezifikation beschrieben sind. Einige der Techniken sind Sortierung, Neusortierung und Koposition des Konstantenpools.
Das Packmodul wird in einen Anfangszustand initialisiert, wie in den folgenden Eigenschaften beschrieben. Der Anfangszustand kann bearbeitet werden, indem die Moduleigenschaften (mithilfe #properties
von ) abgerufen und die geänderten Eigenschaften auf der Karte gespeichert werden. Die Ressourcendateien werden ohne Änderungen übergeben. Die Klassendateien enthalten keine identischen Bytes, da der Entpacker frei ist, kleinere Klassendateifeatures wie die Konstantenpoolreihenfolge zu ändern. Die Klassendateien sind jedoch semantisch identisch, wie in <zitate>The Java&trade angegeben; Spezifikation</Zitat> des virtuellen Computers.
Standardmäßig ändert der Packer nicht die Reihenfolge von JAR-Elementen. Außerdem wird 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 eines JAR im Allgemeinen den Bytewise-Inhalt von Klassendateien im JAR ändern wird. Dies bedeutet, dass das Packen und Entpacken im Allgemeinen alle digitalen Signaturen ungültig machen, die auf Bytewise-Bildern von JAR-Elementen basieren. Um einen JAR zu signieren und zu packen, müssen Sie zuerst das JAR packen und entpacken, um es zu normalisieren, dann Signaturen für die entpackten JAR-Elemente zu berechnen und schließlich das signierte JAR neu zu packen. Beide Verpackungsschritte sollten genau die gleichen Optionen verwenden, und die Segmentgrenze muss möglicherweise auch auf "-1" festgelegt werden, um versehentliche Variationen von Segmentgrenzen zu verhindern, da sich die Klassendateigrößen geringfügig ändern.
(Hier ist dies der Grund, warum dies funktioniert: Jede Neuanordnung des Packers erfolgt durch klassenfile-Strukturen idempotent, sodass die zweite Verpackung die Bestellungen, die von der ersten Verpackung hergestellt werden, nicht ändert. Außerdem wird der Entpacker durch die JSR 200-Spezifikation garantiert, um ein bestimmtes Bytewise-Bild für jede bestimmte Übertragungsbestellung von Archivelementen zu erzeugen.)
Um die Abwärtskompatibilität aufrechtzuerhalten, ist die Version der Packdatei so eingestellt, dass die Klassendateien in der Eingabe-JAR-Datei enthalten sind. Mit anderen Worten, die Packdateiversion ist die neueste, wenn die Klassendateien die neueste sind und umgekehrt die Packdateiversion die älteste ist, wenn die Klassendateiversionen ebenfalls die älteste sind. Für Versionen der Zwischenklassendatei wird die entsprechende Packdateiversion verwendet. Beispiel: Wenn die Eingabe-JAR-Dateien ausschließlich aus 1.5 -Klassendateien (oder weniger) bestehen, wird eine 1.5-kompatible Packdatei erstellt. Dies ist auch bei Archiven der Fall, die keine Klassendateien enthalten. Wenn die Eingabe-JAR-Dateien eine 1.6-Klassendatei enthalten, wird die Paketdateiversion auf 1.6 festgelegt.
Hinweis: Sofern nicht anders angegeben, wird das Übergeben eines null
Arguments an einen Konstruktor oder eine Methode in dieser Klasse dazu führen, dass ein NullPointerException
Fehler ausgelöst wird.
Hinzugefügt in 1.5.
Java-Dokumentation für java.util.jar.Pack200.Packer
.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.
Felder
ClassAttributePfx |
Wenn sie mit einem Klassenattributnamen verkettet werden, wird das Format dieses Attributs mithilfe der in der JSR 200-Spezifikation angegebenen Layoutsprache angegeben. |
CodeAttributePfx |
Wenn sie mit einem Codeattributnamen verkettet werden, wird das Format dieses Attributs angegeben. |
DeflateHint |
Wenn diese Eigenschaft festgelegt |
Effort |
Wenn diese Eigenschaft auf eine einzelne Dezimalziffer festgelegt ist, verwendet der Packer den angegebenen Aufwand beim Komprimieren 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 |
Wenn sie mit einem Feldattributnamen verkettet werden, wird das Format dieses Attributs angegeben. |
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 |
Wenn sie mit einem Methodenattributnamen verkettet werden, wird das Format dieses Attributs angegeben. |
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 bytewise übergeben werden soll, ohne Komprimierung. |
Progress |
Der Fortschritt des Entpackers als Prozentsatz, der vom Entpacker regelmäßig aktualisiert wird. |
SegmentLimit |
Diese Eigenschaft ist eine Zahl, die die geschätzte Zielgröße N (in Byte) 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 auszuführende Aktion an, wenn eine Klassendatei, die ein unbekanntes Attribut enthält, gefunden wird. |
Eigenschaften
Handle |
Ruft den JNI-Wert des zugrunde liegenden Android-Objekts ab. (Geerbt von IJavaObject) |
JniIdentityHashCode |
Gibt den Wert |
JniManagedPeerState |
Status des verwalteten Peers. (Geerbt von IJavaPeerable) |
JniPeerMembers |
Mitgliedszugriff und Aufrufunterstützung. (Geerbt von IJavaPeerable) |
PeerReference |
Gibt eine JniObjectReference der umbrochenen Java-Objektinstanz zurück. (Geerbt von IJavaPeerable) |
Methoden
AddPropertyChangeListener(IPropertyChangeListener) |
Registriert einen Listener für PropertyChange-Ereignisse in der Eigenschaftenzuordnung. |
Disposed() |
Wird aufgerufen, wenn die Instanz verworfen wurde. (Geerbt von IJavaPeerable) |
DisposeUnlessReferenced() |
Wenn keine offenen Verweise auf diese Instanz vorhanden sind, wird nichts aufgerufen |
Finalized() |
Wird aufgerufen, wenn die Instanz abgeschlossen wurde. (Geerbt von IJavaPeerable) |
Pack(JarFile, Stream) |
Übernimmt ein JarFile und konvertiert es in ein Pack200-Archiv. |
Pack(JarInputStream, Stream) |
Verwendet einen JarInputStream und konvertiert ihn in ein Pack200-Archiv. |
Properties() |
Ruft den Satz der Eigenschaften dieses Moduls ab. |
RemovePropertyChangeListener(IPropertyChangeListener) |
Entfernen Sie einen Listener für PropertyChange-Ereignisse, hinzugefügt von der |
SetJniIdentityHashCode(Int32) |
Legen Sie den von |
SetJniManagedPeerState(JniManagedPeerStates) |
Das Packermodul wendet verschiedene Transformationen auf die Eingabe-JAR-Datei an, wodurch der Paketdatenstrom von einem Kompressor wie gzip oder ZIP stark komprimiert werden kann. (Geerbt von IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Legen Sie den von |
UnregisterFromRuntime() |
Heben Sie die Registrierung dieser Instanz auf, damit die Laufzeit sie nicht aus zukünftigen Java.Interop.JniRuntime+JniValueManager.PeekValue Aufrufen zurückgibt. (Geerbt von IJavaPeerable) |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
JavaCast<TResult>(IJavaObject) |
Das Packermodul wendet verschiedene Transformationen auf die Eingabe-JAR-Datei an, wodurch der Paketdatenstrom von einem Kompressor wie gzip oder ZIP stark komprimiert werden kann. |
GetJniTypeName(IJavaPeerable) |
Das Packermodul wendet verschiedene Transformationen auf die Eingabe-JAR-Datei an, wodurch der Paketdatenstrom von einem Kompressor wie gzip oder ZIP stark komprimiert werden kann. |
PackAsync(Pack200+IPacker, JarFile, Stream) |
Das Packermodul wendet verschiedene Transformationen auf die Eingabe-JAR-Datei an, wodurch der Paketdatenstrom von einem Kompressor wie gzip oder ZIP stark komprimiert werden kann. |
PackAsync(Pack200+IPacker, JarInputStream, Stream) |
Das Packermodul wendet verschiedene Transformationen auf die Eingabe-JAR-Datei an, wodurch der Paketdatenstrom von einem Kompressor wie gzip oder ZIP stark komprimiert werden kann. |