Das Java-Hilfsprogramm für die Android-Installation [] (Das Java-Hilfsprogramm für die Android-Installation), Lektion, Seite 722709
https://www.purl.org/stefan_ram/pub/java-hilfsprogramm_android (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Android-Entwicklung

Das Java -Hilfsprogramm für die Android -Installation

Zum automatischen Abrufen und Entpacken der benötigten Dateien des JDK  wird die folgende Java -Quelldatei verwendet, welche im Arbeitsverzeichnis anzulegen ist.

Da der Quellcode dieses Java -Hilfsprogramm hier lesbar ist, kann sich der Verwender davon überzeugen, daß dieses Programm nur die angeforderten Dateien auf die Festplatte kopiert und keine versteckten Funktionen enthält.

Please.java
public class Please
{ public static byte[] buffer = new byte[ 65536 ]; public static void download( final java.lang.String[] args
/* source URI, target file, number of blocks */ )throws java.io.IOException
{ java.lang.System.err.println( "download " + java.util.Arrays.toString( args ));
final java.io.InputStream input = new java.net.URL( args[ 0 ]).openStream();
final java.io.OutputStream output = new java.io.FileOutputStream( args[ 1 ]);
int i = 0; for( boolean looping = true; looping; )
{ final int count = input.read( buffer );
if( ++i % 100 == 0 ){ if( args.length > 2 )
java.lang.System.out.printf( "%9d/%s%n", i, args[ 2 ]);
else java.lang.System.out.printf( "%9d/%n", i ); }
if( count < 0 )looping = false; else output.write( buffer, 0, count ); }
input.close(); output.close(); } public static void extract( final java.lang.String[] args
/* source file, target dir */ )throws java.io.IOException
{ java.lang.System.err.println( "unzip " + java.util.Arrays.toString( args ));
final java.util.zip.ZipInputStream input = new java.util.zip.ZipInputStream
( new java.io.FileInputStream( args[ 0 ]));
{ final java.io.File folder = new java.io.File( args[ 1 ]);
if( !folder.exists() )folder.mkdir(); }
java.util.zip.ZipEntry entry = input.getNextEntry();
while( entry != null ){ if( !entry.isDirectory() )
{ final java.lang.String name = entry.getName();
final java.io.File file
= new java.io.File( args[ 1 ]+ java.io.File.separator + name );
java.io.File parent = new java.io.File( file.getParent() );
if( !parent.exists() )parent.mkdirs();
{ final java.io.FileOutputStream output = new java.io.FileOutputStream( file );
for( int length;( length = input.read( buffer )) > 0; )
output.write( buffer, 0, length );
output.close(); }} input.closeEntry(); entry = input.getNextEntry(); }} public static void create( final java.lang.String[] args /* target file */ )
throws java.io.IOException
{ final java.io.File outFile = new java.io.File( args[ 0 ]);
final java.io.PrintWriter out =
new java.io.PrintWriter( new java.io.FileOutputStream( outFile ), true );
/* file must be rendered exactly with specific binary line terminators */
out.println( "avd.ini.encoding=ISO-8859-1\n" );
out.println( "hw.dPad=yes\n" ); /* was: "hw.dPad=no\n" */
out.println( "hw.lcd.density=160\n" );
out.println( "hw.cpu.arch=arm\n" );
out.println( "hw.device.hash=-1537072293\n" );
out.println( "disk.dataPartition.size=256M\n" );
out.println( "skin.dynamic=yes\n" );
out.println( "skin.path=1024x600\n" );
out.println( "hw.keyboard=yes\n" ); /* use host device keyboard? */
out.println( "hw.cpu.model=cortex-a8\n" );
out.println( "hw.ramSize=699\n" ); /* 512 zu wenig fuer launcher? */
out.println( "hw.device.manufacturer=Generic\n" );
out.println( "hw.sdCard=yes\n" );
out.println( "sdCard.size=256M\n" ); /* for camera! */
out.println( "hw.mainKeys=no\n" ); /* do NOT want main keys? */
out.println( "hw.accelerometer=yes\n" );
out.println( "skin.name=1024x600\n" );
out.println( "abi.type=armeabi-v7a\n" );
out.println( "hw.trackBall=no\n" );
out.println( "hw.device.name=7in WSVGA (Tablet)\n" );
out.println( "hw.battery=yes\n" );
out.println( "hw.sensors.proximity=yes\n" );
//t.println( "image.sysdir.1=system-images\\android-18\\armeabi-v7a\\\n" );
out.println( "image.sysdir.1=system-images\\android-22\\armeabi-v7a\\\n" );
out.println( "hw.sensors.orientation=yes\n" );
out.println( "hw.audioInput=yes\n" );
out.println( "hw.camera.front=none\n" );
out.println( "hw.gps=yes\n" );
out.println( "vm.heapSize=32\n" ); /* 16 zu wenig fuer launcher? */
out.println( "snapshot.present=true\n" );
out.close(); }

public static void main( final java.lang.String[] args )throws java.io.IOException
{ java.lang.System.err.println( "main" + java.util.Arrays.toString( args ));
java.lang.System.err.println();
if( args.length <= 1 )
{ java.lang.System.out.println( "java please download sourcefileURI targetfilepath" );
java.lang.System.out.println( "java please extract sourcefilepath targetdirpath" );
java.lang.System.out.println( "java please create targetdirpath" ); }
else
{ final java.lang.String[] a = java.util.Arrays.copyOfRange( args, 1, args.length );
switch( args[ 0 ])
{ case "download": download( a ); break;
case "extract": extract( a ); break;
case "create": create( a ); break; }}}}

Testen des Java -Hilfsprogramms

Das folgende Kommandoskript sollte ein Zip -Archiv herkopieren, entpacken und anzeigen. Dies sollte nicht mehr als eine Minute dauern und setzt eine Internetverbindung und die in einer früheren Lektion angelegte Datei »env.cmd« voraus.

pleasetry.cmd
@ECHO %~f0
@CALL "env.cmd"
@SET PLEASE=%JAVA% Please
@SET DOWNLOAD=%PLEASE% download
@SET EXTRACT=%PLEASE% extract
@SET GOOGLE=http://dl.google.com/android/repository
@SET NAME=platform-tools_r19.0.1-windows @%JAVAC% Please.java
@%DOWNLOAD% "%GOOGLE%/%NAME%.zip" "%TEMP%\%NAME%.zip" 100
@%EXTRACT% "%TEMP%\%NAME%.zip" "%TEMP%\%NAME%"
@dir /B/S "%TEMP%\%NAME%" PAUSE
In der Ausgabe sollten dann unter anderem die folgenden Dateien erscheinen

platform-tools\adb.exe
platform-tools\AdbWinApi.dll
platform-tools\AdbWinUsbApi.dll

Eine mögliche Ursache für eine Störung könnte eine vorübergehende Nichterreichbarkeit oder Störung des verwendeten Webservers sein. In diesem Fall sollte es helfen, das Skript später noch einmal zu starten.

Das Skript »pleasetry.cmd« wird nach dem Ende dieser Lektion nicht mehr benötigt. Das Java -Hilfsprogramm »Please.java« wird später wieder benötigt.

Klassische Versionen *

Falls die aktuelle Version des Android -SDK Probleme bereiten sollte, kann mit dem folgenden Skript auch eine erprobte klassische Version abgerufen werden. Wenn diese verwendet werden soll, ist in den folgenden Lektionen auch jeweils das Skript für die „klassische Version“ zu verwenden.

Test.cmd
SET JDK=C:\Program Files\Java\jdk1.8.0
SET JAVAC="%JDK%\bin\javac.exe"
SET JAVA="%JDK%\bin\java.exe" %JAVAC% Please.java %JAVA% Please download "http://dl.google.com/android/repository/platform-tools_r18.0.1-windows.zip" ^
"%TEMP%\platform-tools_r18.0.1-windows.zip" 100 %JAVA% Please extract "%TEMP%\platform-tools_r18.0.1-windows.zip" "%TEMP%\platform-tools_r18.0.1-windows" dir /B/S "%TEMP%\platform-tools_r18.0.1-windows" PAUSE

Es folgt noch die klassische Version (2014) von »Please.java« mit der Zahl »18« für den Emulator.

Please.java
public class Please
{ public static byte[] buffer = new byte[ 65536 ]; public static void download( final java.lang.String[] args
/* source URI, target file, number of blocks */ )throws java.io.IOException
{ java.lang.System.err.println( "download " + java.util.Arrays.toString( args ));
final java.io.InputStream input = new java.net.URL( args[ 0 ]).openStream();
final java.io.OutputStream output = new java.io.FileOutputStream( args[ 1 ]);
int i = 0; for( boolean looping = true; looping; )
{ final int count = input.read( buffer );
if( ++i % 100 == 0 ){ if( args.length > 2 )
java.lang.System.out.printf( "%9d/%s%n", i, args[ 2 ]);
else java.lang.System.out.printf( "%9d/%n", i ); }
if( count < 0 )looping = false; else output.write( buffer, 0, count ); }
input.close(); output.close(); } public static void extract( final java.lang.String[] args
/* source file, target dir */ )throws java.io.IOException
{ java.lang.System.err.println( "unzip " + java.util.Arrays.toString( args ));
final java.util.zip.ZipInputStream input = new java.util.zip.ZipInputStream
( new java.io.FileInputStream( args[ 0 ]));
{ final java.io.File folder = new java.io.File( args[ 1 ]);
if( !folder.exists() )folder.mkdir(); }
java.util.zip.ZipEntry entry = input.getNextEntry();
while( entry != null ){ if( !entry.isDirectory() )
{ final java.lang.String name = entry.getName();
final java.io.File file
= new java.io.File( args[ 1 ]+ java.io.File.separator + name );
java.io.File parent = new java.io.File( file.getParent() );
if( !parent.exists() )parent.mkdirs();
{ final java.io.FileOutputStream output = new java.io.FileOutputStream( file );
for( int length;( length = input.read( buffer )) > 0; )
output.write( buffer, 0, length );
output.close(); }} input.closeEntry(); entry = input.getNextEntry(); }} public static void create( final java.lang.String[] args /* target file */ )
throws java.io.IOException
{ final java.io.File outFile = new java.io.File( args[ 0 ]);
final java.io.PrintWriter out =
new java.io.PrintWriter( new java.io.FileOutputStream( outFile ), true );
/* file must be rendered exactly with specific binary line terminators */
out.println( "avd.ini.encoding=ISO-8859-1\n" );
out.println( "hw.dPad=yes\n" ); /* was: "hw.dPad=no\n" */
out.println( "hw.lcd.density=160\n" );
out.println( "sdcard.size=128M\n" );
out.println( "hw.cpu.arch=arm\n" );
out.println( "hw.device.hash=-1537072293\n" );
out.println( "disk.dataPartition.size=200M\n" );
out.println( "skin.dynamic=yes\n" );
out.println( "skin.path=1024x600\n" );
out.println( "hw.keyboard=yes\n" ); /* use host device keyboard? */
out.println( "hw.cpu.model=cortex-a8\n" );
out.println( "hw.ramSize=699\n" ); /* 512 zu wenig fuer launcher? */
out.println( "hw.device.manufacturer=Generic\n" );
out.println( "hw.sdCard=yes\n" );
out.println( "hw.mainKeys=no\n" ); /* do NOT want main keys? */
out.println( "hw.accelerometer=yes\n" );
out.println( "skin.name=1024x600\n" );
out.println( "abi.type=armeabi-v7a\n" );
out.println( "hw.trackBall=no\n" );
out.println( "hw.device.name=7in WSVGA (Tablet)\n" );
out.println( "hw.battery=yes\n" );
out.println( "hw.sensors.proximity=yes\n" );
out.println( "image.sysdir.1=system-images\\android-18\\armeabi-v7a\\\n" );
out.println( "hw.sensors.orientation=yes\n" );
out.println( "hw.audioInput=yes\n" );
out.println( "hw.camera.front=none\n" );
out.println( "hw.gps=yes\n" );
out.println( "vm.heapSize=32\n" ); /* 16 zu wenige fuer launcher? */
out.println( "snapshot.present=true\n" );
out.close(); }

public static void main( final java.lang.String[] args )throws java.io.IOException
{ java.lang.System.err.println( "main" + java.util.Arrays.toString( args ));
java.lang.System.err.println();
if( args.length <= 1 )
{ java.lang.System.out.println( "java please download sourcefileURI targetfilepath" );
java.lang.System.out.println( "java please extract sourcefilepath targetdirpath" );
java.lang.System.out.println( "java please create targetdirpath" ); }
else
{ final java.lang.String[] a = java.util.Arrays.copyOfRange( args, 1, args.length );
switch( args[ 0 ])
{ case "download": download( a ); break;
case "extract": extract( a ); break;
case "create": create( a ); break; }}}}

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722709 stefan_ram:722709 Das Java-Hilfsprogramm für die Android-Installation Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722709, slrprddef722709, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/java-hilfsprogramm_android