[JAVA] Diätprogramm mit Präprozessor (Umgang mit der Größe von i-appli)

Derzeit sind die meisten Mobilgeräte Smartphones, iPhones und Androiden. Kennen Sie die Obergrenze für die Größe jeder App? Ab August 2020 ist die iOS-App 4 GB und die Android-App 100 MB groß.

Wenn man das betrachtet, gibt es einen großen Unterschied ... Ich frage mich, ob Android eine Methode verwendet, um Daten später für Spiele mit großer Kapazität herunterzuladen. Ich habe den Heap nicht im Detail geschrieben, aber da das Terminal über einige GB Speicher verfügt, sollte dies kein großes Problem sein.

Worüber ich jedoch dieses Mal sprechen möchte, ist das zukünftige Telefon (= Garakei), das vor der Geburt der Smartphones als Hauptkraft aktiv war, und die Geschichte von DoCoMos i-appli.

Ich möchte vorstellen, dass die frühe Entwicklungsmethode von DoCoMos i-appli das Ergebnis tränenreicher Bemühungen war.

Docomo i-appli Größe

Die Zeit geht zurück in die Zeit von Garake. Ich erkenne, dass es Docomos i-appli war, die die App-Welt von Garake geprägt hat, aber was war zu dieser Zeit die Obergrenze der Größe?

Im Folgenden finden Sie Informationen zur Anwendung im DoJa-1.0-Profil, die zu Beginn veröffentlicht wurde.

Modell App-Größe (KB) Heap-Kapazität(KB)
FOMA N2001 10 96
FOMA N2002 10 560
FOMA P2101V 30 1100
FOMA D2101V 10 128
FOMA P2002 10 560
FOMA SH2101V 30 1024
FOMA T2101V 30 1105

Offizielle Seite https://www.nttdocomo.co.jp/service/developer/make/content/spec/iappli/#notice05

Die minimale App-Größe betrug 10 KB und die Heap-Kapazität 96 KB. Es gibt einen separaten nativen Heap, und es scheint, dass der Speicher auf der Terminalseite ein wenig genutzt werden kann, aber diese Kapazität im reinen Java-Teil.

Die App-Größe ist eine Jar-Datei, die Bytes enthält, die aus Code und Ressourcen wie Bildern kompiliert wurden. Dies war auf 10 KB (10240 Byte) begrenzt.

Sie sind sich dessen vielleicht nur bewusst, also lassen Sie uns überprüfen, wie viel es ist. Es ist jedoch schwierig, eine i-appli-Entwicklungsumgebung zu erstellen, daher werden wir die Android-App-Größen ab August 2020 vergleichen.

Ich denke, ich habe eine App gewählt, die relativ wenige Funktionen zu haben scheint, aber MB-Einheiten sind natürlich. Da Dinge und Zeiten unterschiedlich sind, ist ein allgemeiner Vergleich nicht möglich, aber ich kann mir nicht vorstellen, dass er in 10 KB passt.

Code für die frühe App-Entwicklung

Ich weiß, dass die Größe der i-appli extrem streng ist, aber ich frage mich, wie sie hergestellt wurde. Das einzige zu kratzende Element ist das Programm.

Es ist wahr, dass Sie nicht tun können, was Sie wollen, weil Ihnen die Funktionen ausgehen, wenn Sie das Programm ausschneiden, aber es gibt eine Möglichkeit, die Größe zu reduzieren, ohne die Funktionen zu reduzieren. Das heißt, Variablennamen, Klassennamen und Methodennamen werden kleiner.

Der Code ist ziemlich angemessen geschrieben, sieht aber zum Beispiel so aus.

Vorher ändern


public class MainFrame {
 
    private static final String TITLE = "Beispiel App";
    private static final String ERROR_MESSAGE = "Ein Fehler ist aufgetreten";
 
    public void showFrame() {
        try {
            //Einige Verarbeitung
        } catch (Exception e) {
            showMessage(ERROR_MESSAGE);
        }        
    }
 
    public void showMessage(String message) {
        //Verarbeitung der Nachrichtenanzeige
    }
}

Nach der veränderung


public class F {
 
    private static final String A = "Beispiel App";
    private static final String B = "Ein Fehler ist aufgetreten";
 
    public void s() {
        try {
            //Einige Verarbeitung
        } catch (Exception e) {
            m(B);
        }
    }
 
    public void m(String s) {
        //Verarbeitung der Nachrichtenanzeige
    }
}

Wenn Sie die Anzahl der Zeichen im Variablennamen und im Methodennamen verringern, verringert sich die Anzahl der in die kompilierte Klassendatei geschriebenen Zeichen, sodass Sie mit einer Verringerung der Größe rechnen können. Auf jeden Fall ist es ein Energiesparprogramm.

Mit einem Programm dieser Größe ist es nicht unlesbar, aber es ist offensichtlich, dass es umso schlimmer wird, je mehr Sie es erstellen. Wie haben Sie dieses Problem behoben?

Präprozessor + Java

Nachdem seine Vorgänger seine Weisheit eingegrenzt hatten, entschieden sie sich für etwas, das die Java-Sprache nicht verwendet. Es ist ein Präprozessor, der häufig in C-Sprachen verwendet wird.

Schreiben Sie insbesondere den folgenden Code.

Versionscode des Präprozessors


#define _MainFrame     F
#define _TITLE         A
#define _ERROR_MESSAGE B
#define _showFrame     s
#define _showMessage   m
  
public class _MainFrame {

    private static final String _TITLE = "Beispiel App";
    private static final String _ERROR_MESSAGE = "Ein Fehler ist aufgetreten";

    public void _showFrame() {
        try {
            //Einige Verarbeitung
        } catch (Exception e) {
            _showMessage(_ERROR_MESSAGE);
        }
    }

    public void _showMessage(String s) {
        //Verarbeitung der Nachrichtenanzeige
    }
}

Die folgende Syntax bedeutet, dass der Buchstabe "_MainFrame" in den Buchstaben "F" konvertiert wird.

python


#define _MainFrame     F

Dieser Teil ist keine Java-Syntax, daher kann er natürlich nicht vom Java-Compiler kompiliert werden. Gehen wir also den Präprozessor durch. Dann ist der folgende Code abgeschlossen.

public class F {
  
    private final String A = "Beispiel App";
    private final String B = "Ein Fehler ist aufgetreten";
  
    public void s() {
        try {
            //Einige Verarbeitung
        } catch (Exception e) {
            m(B);
        }
    }
  
    public void m(String s) {
        //Verarbeitung der Nachrichtenanzeige
    }
}

Jetzt, da Sie es kompilieren können, müssen Sie es nur noch normal erstellen.

Auf diese Weise können Sie die Größe reduzieren und gleichzeitig die Lesbarkeit verbessern, indem Sie den Code mit Makros in zwei Schritten übergeben: Präprozessor → Java-Compiler. Ich denke, es war schwierig, weil ich die IDE nicht verwenden kann.

Schließlich

Dieser Artikel basiert auf der Idee, einen Präprozessor zu verwenden, den ich vor fast 10 Jahren auf einer anderen Site gesehen habe. Die Seite existiert nicht mehr, aber ich habe sie geschrieben, weil ich die Idee behalten wollte.

Recommended Posts

Diätprogramm mit Präprozessor (Umgang mit der Größe von i-appli)
[Rails / RSpec] Der Umgang mit Elementen weist einen Größenfehler von Null auf
[Android] Wie man mit dunklen Themen umgeht
Der Umgang mit dem Vorkompilieren von Assets ist fehlgeschlagen.
Umgang mit Keine Vorlage für interaktive Anfragen
[Docker-Umgebung] Umgang mit ActiveSupport :: MessageEncryptor :: InvalidMessage
[Rails] Umgang mit URL-Änderungen nach dem Rendern
Wie man mit html.erb nummeriert (nummeriert)
So aktualisieren Sie mit activerecord-import
Umgang mit dem Fehler FEHLER: Während der Ausführung von gem ... (Gem :: FilePermissionError)
Umgang mit Bundler :: Dsl :: DSLError durch Umschreiben von gemfile
Umgang mit verschiedenen Versionen von rbenv und Ruby
Wie fange ich mit schlank an?
Wie man ein Zeichen mit "~" einschließt
Android: Umgang mit "Java-Version von '10 .0.1 'konnte nicht ermittelt werden"
Wie man mssql-tools mit alpine benutzt
Projektfacette Java Version 13 wird nicht unterstützt. Wie man damit umgeht
Wie gehe ich mit dem Typ um, den ich 2 Jahre lang über das Schreiben eines Java-Programms nachgedacht habe?
So starten Sie Camunda mit Docker
Java8 / 9-Anfänger: Streamen Sie API-Suchtpunkte und wie Sie damit umgehen
So beschneiden Sie ein Bild in libGDX
So passen Sie TextPosition mit der iOS-Tastaturerweiterung an
So teilen Sie Dateien mit Docker Toolbox
So kompilieren Sie Java mit VsCode & Ant
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Verwendung von BootStrap mit Play Framework
So wechseln Sie Miniaturbilder mit JavaScript
[Hinweis] Erste Schritte mit Rspec
[Einführung in Java] So schreiben Sie ein Java-Programm
Rubinlänge, -größe, -anzahl Verwendung
[Java] So messen Sie die Programmausführungszeit
API-basierte Steuerung mit cancancan
So erreichen Sie den Dateidownload mit Feign
So aktualisieren Sie verwandte Modelle mit accept_nested_attributes_for
So setzen Sie JAVA_HOME mit dem Appassembler-Maven-Plugin von Maven
So implementieren Sie TextInputLayout mit Validierungsfunktion
So behandeln Sie Anmeldefehler mit devise
So löschen Sie Daten mit einem externen Schlüssel
So testen Sie den privaten Bereich mit JUnit
So überwachen Sie Nginx mit Docker-Compose mit Datadog
So erreichen Sie das Hochladen von Dateien mit Feign
So führen Sie Blazor (C #) mit Docker aus
So erstellen Sie eine Rails 6-Umgebung mit Docker
[Laravel] Umgang mit Fehlern aufgrund von Speichermangel, wenn Komponisten [Docker] benötigen
Herausforderung, mit verstümmelten Zeichen mit Java AudioSystem.getMixerInfo () umzugehen
So laden Sie Oracle JDK 8 U / min mit Curl herunter
[Java] So testen Sie, ob es in JUnit null ist
Wie man jeden Fall mit Mockito 1x verspottet
Wie man jeden Fall mit PowerMock + Mockito1x verspottet
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
So speichern Sie mit einer Eingabe in mehreren Tabellen
So testen Sie Interrupts während Thread.sleep mit JUnit
Verwendung des eingebauten h2db mit Federstiefel