Ciao a tutti,
ho il seguente problema ho creato un semplice editor in B4J per editare un file apk in cui devo inserire (alla fine del file possibilemente) dei parametri per poi leggerli quando viene eseguita l'apk sul dispositivo. vi posto il sorgente di quello che sono riuscito a fare...
Questo funziona bene ma l'apk risulta corrotta perchè scrivo in un offset apparentemente con byte nulli ma a quanto pare corrompe l'app.
Ho notato che editando l'apk con un editor esadecimale (es: HexWorkshop) ed aggiungendo a mano i parametri alla fine l'apk funziona in pratica esiste un equivalente di:
visual studio 6 code:
grazie in anticipo
ho il seguente problema ho creato un semplice editor in B4J per editare un file apk in cui devo inserire (alla fine del file possibilemente) dei parametri per poi leggerli quando viene eseguita l'apk sul dispositivo. vi posto il sorgente di quello che sono riuscito a fare...
B4X:
Sub Process_Globals
Private fx As JFX
Private MainForm As Form
Dim raf As RandomAccessFile
Private btnWrite As Button
Private btnRead As Button
Dim txtHost As TextField
Dim txtPort As TextField
Dim MsgBox As Msgboxes
Private btnRead As Button
Private btnOpen As Button
Dim txtPath As TextField
'blocco dialog
Dim stubName As String
Dim stubPath As String
End Sub
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
MainForm.RootPane.LoadLayout("Main") 'Load the layout file.
MainForm.Show
stubName = "myar.apk.bak"
stubPath = File.DirApp
If File.Exists(stubPath, "myar.apk") = True Then
File.Delete(stubPath, "myar.apk")
Else
File.Copy(stubPath, stubName, stubPath, "myar.apk")
End If
raf.Initialize(stubPath, "myar.apk", False)
End Sub
Public Sub Write (whost As String, wport As String)
Dim whostB() As Byte
Dim wportB() As Byte
whostB = whost.GetBytes("UTF8")
wportB = wport.GetBytes("UTF8")
raf.WriteBytes(wportB, 0, wportB.Length, 8850)'write the port + split on position 8850
raf.WriteBytes(whostB, 0, whostB.Length, 8858)'write the hostname + split on position 8858
End Sub
Sub btnWrite_Action
Try
Dim host As String
Dim port As String
host = txtHost.Text & "SPLT"
port = txtPort.Text & "SPLT"
Write(host, port)
MsgBox.Show("Done!","Info")
Catch
Log(LastException.Message)
End Try
End Sub
Sub btnRead_Action
Read
End Sub
Public Sub Read
Dim buffer(48) As Byte
Dim str As String
Dim strArr() As String
For i = 0 To buffer.Length
raf.ReadBytes(buffer, 0, buffer.Length, 8850)
str = BytesToString(buffer, 0, buffer.Length, "UTF8")
strArr = Regex.Split("SPLT", str)
Next
Log(strArr(0)) 'read port
Log(strArr(1)) 'read host
End Sub
Ho notato che editando l'apk con un editor esadecimale (es: HexWorkshop) ed aggiungendo a mano i parametri alla fine l'apk funziona in pratica esiste un equivalente di:
visual studio 6 code:
B4X:
Function WriteFile(PathToWFile As String, WriteData As String) As String 'simple Function to write the Data in a File
Open PathToWFile For Binary As #2
Put #2, , WriteData
Close #2
End Function
grazie in anticipo