Вверх ↑
Этот топик читают: Гость
Ответов: 286
Рейтинг: 5
#1: 2022-02-05 04:01:58 ЛС | профиль | цитата
Добрый день всем.Подскажите,может кто сталкивался с таким.При помощи ApkTool разбираю и пытаюсь скомпилировать АПК.Разбирается все нормально,а при попытке сборки такая ошибка" bbrut.directory.DirectoryException: java.nio.file.NoSuchFileException:"
Add(MainForm,14353687,98,70)
{
Width=590
Height=146
}
Add(HubEx,9059087,238,196)
{
}
Add(Edit,15735182,658,119)
{
Left=250
Top=20
Width=270
Text="apktool d My_APK_signed.apk -o INPUT_APK "
}
Add(WinExec,8347366,651,224)
{
FileName="apktool.bat"
RunEvent=1
Action="print"
Point(doConsoleExec)
Point(onConsoleTerminate)
link(Params,3430061:Text,[(664,191)(762,191)])
link(onConsoleTerminate,11449550:doMessage,[])
}
Add(Edit,3430061,756,126)
{
Left=250
Top=55
Width=265
Text="apktool b NPUT_APK"
}
Add(Button,5164603,553,224)
{
Left=15
Top=20
Width=200
Height=25
Caption="Декомпилировать\Компилировать"
link(onClick,8347366:doExec,[])
}
Add(Message,11449550,714,238)
{
Caption="Finish"
Icon=4
}


карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 4612
Рейтинг: 746
#2: 2022-02-05 13:20:16 ЛС | профиль | цитата
Если указано WinExec.FileName, то имя запускаемого файла не нужно указывать первым параметром командной строки ("apktool"). Если, конечно, файл "apktool.bat" этого не предполагает.

Кроме того, проблема может быть не в запуске, а в настройке сборки. Если запустить "apktool.bat" с параметрами из консоли Windows - получаешь ожидаемый результат?

Название темы не соответствует описанной проблеме.
карма: 26

0
Ответов: 286
Рейтинг: 5
#3: 2022-02-05 14:32:12 ЛС | профиль | цитата
В документации "apktool" написано для декомпиляции apktool d Путь\Имя.apk -o Путь\Папка сохранения.С декомпиляцией WinExec успешно справляется.Для компиляции apktool b Путь\папка с декомпилированными файлами.А вот тут ошибка
Если запустить "apktool.bat" с параметрами из консоли Windows - получаешь справку по командам
Да название темы не айс-только сейчас обратил внимание
карма: 0

0
Ответов: 4612
Рейтинг: 746
#4: 2022-02-05 19:09:28 ЛС | профиль | цитата
Пробуй получить нужный результат из консоли Windows. Тогда можно будет пробовать сделать то же на WinExec, чтобы не множить себе проблемные места.
карма: 26

0
Ответов: 286
Рейтинг: 5
#5: 2022-02-06 00:30:14 ЛС | профиль | цитата
Да в консоли все получается если apktool.jar лежит в C:\Windows.А вот WinExec с теми же параметрами только разбирает Apk но собирать не хочет.Ошибка brut.directory.DirectoryException: java.nio.file.NoSuchFileException:

Add(MainForm,14353687,98,70)
{
Width=590
Height=146
}
Add(HubEx,9059087,238,196)
{
}
Add(Edit,15735182,658,119)
{
Left=250
Top=20
Width=270
Text="C:\Windows\apktool d C:\Users\Andrey\Desktop\apktool\v.apk -o C:\Users\Andrey\Desktop\apktool\v"
}
Add(WinExec,8347366,651,224)
{
FileName="apktool.bat"
RunEvent=1
Action="print"
Point(doConsoleExec)
Point(onConsoleTerminate)
link(Params,3430061:Text,[(664,191)(762,191)])
link(onConsoleTerminate,11449550:doMessage,[])
}
Add(Edit,3430061,756,126)
{
Left=250
Top=55
Width=265
Text="C:\Windows\apktool b C:\Users\Andrey\Desktop\apktool\v"
}
Add(Button,5164603,553,224)
{
Left=15
Top=20
Width=200
Height=25
Caption="Декомпилировать\Компилировать"
link(onClick,8347366:doExec,[])
}
Add(Message,11449550,714,238)
{
Caption="Finish"
Icon=4
}


карма: 0

0
Ответов: 2059
Рейтинг: 131
#6: 2022-02-06 00:49:59 ЛС | профиль | цитата
Udokanec писал(а):
если apktool.jar лежит в C:\Windows.А вот WinExec с теми же параметрами только разбирает
- Пути не прописаны.

А переменную окружения не пробовал установить?
Add(MainForm,1384434,287,147)
{
Width=689
Height=653
Position=1
Point(onClose)
Point(Close)
Point(onSplitUp)
link(onCreate,15104773:doEvent1,[])
}
Add(Dir,2564954,567,77)
{
}
Add(InlineCode,5981625,511,175)
{
@Hint=#61:Компонент позволяет развернуть переменные окружения в строке.|69:Например: %WINDIR%\explorer.exe превратится в c:\windows\explorer.exe|
WorkPoints=#66:doExpand=Развернуть переменные окружения, находящиеся в строке Str|49:doEnum=Перечислить доступные переменные окружения|49:doGet=Получить значение переменной окружения Name|60:doSet=Установить переменную окружения Name в значение Value |
EventPoints=#8:onExpand|6:onEnum|5:onGet|
DataPoints=#66:Str=Строка, переменные в которой нужно развернуть методом doExpand|50:Name=Название переменной для методов doGet и doSet|48:Value=Новое значение переменной для метода doSet|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|19: Str: THI_Event;|21: Name: THI_Event; |29: Value: THI_Event; |24: onExpand: THI_Event;|22: onEnum: THI_Event;|21: onGet: THI_Event;|52: procedure doExpand(var _Data:TData; Index:word);|50: procedure doEnum(var _Data:TData; Index:word);|49: procedure doGet(var _Data:TData; Index:word);|49: procedure doSet(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|0:|60:procedure THiAsmClass.doExpand(var _Data:TData; Index:word);|13:var Sz:Dword;|15: Src:string;|15: Dst:string;|5:begin|34: Src:=ReadString(_Data, Str,'');|50: Sz:=ExpandEnvironmentStrings(PChar(Src),nil,0);|22: SetLength(Dst, Sz);|56: ExpandEnvironmentStrings(PChar(Src), PChar(Dst), Sz);|39: SetLength(Dst, StrLen(PChar(Dst))); |34: _hi_OnEvent(onExpand, Dst); |4:end;|0:|58:procedure THiAsmClass.doEnum(var _Data:TData; Index:word);|44:var EnvBlock:PChar; i, l:integer; s: string;|5:begin|19: EnvBlock := nil; |36: EnvBlock := GetEnvironmentStrings;|25: if EnvBlock <> nil then|7: begin|15: i := 0; |15: l := 0; |10: repeat|9: begin|32: l := StrLen(@EnvBlock[i]);|19: if l > 0 then|11: begin|24: SetLength(s, l);|40: StrCopy(PChar(s), @EnvBlock[i]);|31: _hi_OnEvent(onEnum, s);|13: end; |24: Inc(i, l+1); |7: end|18: until l = 0; |37: FreeEnvironmentStrings(EnvBlock);|6: end;|2: |4:end;|0:|0:|57:procedure THiAsmClass.doGet(var _Data:TData; Index:word);|13:var Sz:Dword;|13: N:string;|13: V:string;|5:begin|33: N:=ReadString(_Data, Name,'');|46: Sz:=GetEnvironmentVariable(PChar(N),nil,0);|18: if Sz <> 0 then|8: begin|22: SetLength(V, Sz);|52: GetEnvironmentVariable(PChar(N), PChar(V), Sz);|37: SetLength(V, StrLen(PChar(V))); |27: _hi_OnEvent(onGet, V);|8: end |4:end;|0:|57:procedure THiAsmClass.doSet(var _Data:TData; Index:word);|5:begin|95: SetEnvironmentVariable(PChar(ReadString(_Data, Name,'')),PChar(ReadString(_Data, Value,'')));|4:end;|0:|4:end.|
link(Name,8298333:Value,[])
link(Value,2635825:Result,[(531,163)(573,163)])
}
Add(Memory,8298333,518,84)
{
Default=String(PATH)
}
Add(StrCat,2635825,567,126)
{
Str2="clibs"
link(Str1,2564954:CurrentDir,[])
}
Add(Hub,15104773,448,161)
{
link(onEvent1,2635825:doStrCat,[(480,167)(480,132)])
link(onEvent2,5981625:doSet,[(480,174)(480,202)])
}
Это для примера. В схеме надо установить свои параметры.
Наведи мышку на IC.

Редактировалось 1 раз(а), последний 2022-02-06 00:54:33
карма: 6

0
Ответов: 286
Рейтинг: 5
#7: 2022-02-06 05:04:38 ЛС | профиль | цитата
Уважаемый flint2 я извиняюсь,но я не пойму как с этим работать.
карма: 0

0
Ответов: 2059
Рейтинг: 131
#8: 2022-02-06 10:22:35 ЛС | профиль | цитата
Да, этого тебе не нужно.
Просто я подумал, что надо указать программе несколько путей для просмотра.
Тогда не понятно почему передаются такие параметры:
C:\Windows\apktool d C:\Users\Andrey\Desktop\apktool\v.apk -o C:\Users\Andrey\Desktop\apktool\v
Почему три пути передаются в apktool.bat?
Допустим C:\Windows\apktool d это откуда, а это C:\Users\Andrey\Desktop\apktool\v.apk -o куда.
Зачем тогда C:\Users\Andrey\Desktop\apktool\v ?
И что означают буковки d, -o и v. Очевидно ключ -o означает Стандартный поток вывода.
Вообще то надо всё расписать чтобы тебя поняли.
Может так надо:
C:\Windows\apktool\apktool.bat прописать в WinExec, (папка и батник одинаково называются?), а
d C:\Users\Andrey\Desktop\apktool\v.apk -o C:\Users\Andrey\Desktop\apktool\v уже в параметры для батника? И если -o, то и -d, а не d, или так и должно быть?
И что такое V, папка? - всё расписать чтобы тебя поняли.

Редактировалось 1 раз(а), последний 2022-02-06 10:25:53
карма: 6

0
Ответов: 286
Рейтинг: 5
#9: 2022-02-06 12:00:20 ЛС | профиль | цитата
Извиняюсь.
C:\Windows\apktool это путь откуда запускается apktool.jar.d это декомпиляция.C:\Users\Andrey\Desktop\apktool\v.apk эта папка где лежит APK файл.C:\Users\Andrey\Desktop\apktool\v это папка куда декомпилируется APK файл.
apktool.jar это консольная утилита и запускается через батник.Батник запускает CMD а WinExec передает выше перечисленные параметры
карма: 0

0
Ответов: 670
Рейтинг: 140
#10: 2022-02-06 12:06:26 ЛС | профиль | цитата
Udokanec, Покажи свой "apktool.bat" который работает в консоле.
Запусти схему и покажи что пишет в Memo.

Add(MainForm,13068879,343,147)
{
Width=1048
Height=828
link(onCreate,8634872:doEvent1,[])
}
Add(WinExec,14141459,490,147)
{
FileName="cmd"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
Point(doConsoleInput)
link(onConsoleResult,4171332:doCharset,[])
}
Add(Charset,4171332,553,161)
{
link(onCharset,9149775:doAdd,[])
}
Add(Memo,9149775,616,161)
{
Width=1032
Height=789
Align=5
Font=[Lucida Console,12,0,0,204]
ScrollBars=3
}
Add(Hub,8634872,392,161)
{
link(onEvent1,14141459:doConsoleExec,[])
link(onEvent2,1309304:doString,[(424,174)(424,181)])
}
Add(FormatStr,1309304,434,175)
{
Mask="SET\r\n"
link(onFString,14141459:doConsoleInput,[(473,181)(473,174)])
}

карма: 14

0
Ответов: 286
Рейтинг: 5
#11: 2022-02-06 12:16:37 ЛС | профиль | цитата
По простому.Батник запускает apktool.jar а в запущенной консоли мне нужно вставить эти 3 пути

Microsoft Windows [Version 10.0.19042.1466]
(c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

C:\Users\Andrey\AppData\Roaming\HiAsm_AltBuild>SET
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Andrey\AppData\Roaming
CommonProgramFiles=C:\Program Files (x86)\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=DESKTOP-3CNGVD7
ComSpec=C:\Windows\system32\cmd.exe
DriverData=C:\Windows\System32\Drivers\DriverData
FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer
FPS_BROWSER_USER_PROFILE_STRING=Default
HOMEDRIVE=C:
HOMEPATH=\Users\Andrey
LOCALAPPDATA=C:\Users\Andrey\AppData\Local
LOGONSERVER=\\DESKTOP-3CNGVD7
NUMBER_OF_PROCESSORS=4
OneDrive=C:\Users\Andrey\OneDrive
OS=Windows_NT
Path=C:\Program Files\Java\jdk-17.0.1\bin;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files\Java\jdk-17.0.1\bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=AMD64
PROCESSOR_IDENTIFIER=AMD64 Family 23 Model 24 Stepping 1, AuthenticAMD
PROCESSOR_LEVEL=23
PROCESSOR_REVISION=1801
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files (x86)
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\Andrey\AppData\Local\Temp
TMP=C:\Users\Andrey\AppData\Local\Temp
USERDOMAIN=DESKTOP-3CNGVD7
USERDOMAIN_ROAMINGPROFILE=DESKTOP-3CNGVD7
USERNAME=Andrey
USERPROFILE=C:\Users\Andrey
VBOX_HWVIRTEX_IGNORE_SVM_IN_USE=1
windir=C:\Windows

C:\Users\Andrey\AppData\Roaming\HiAsm_AltBuild>

Блин забыл как добавлять файлы
apktool.bat
@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul

set java_exe=java.exe

if defined JAVA_HOME (
set java_exe="%JAVA_HOME%\bin\java.exe"
)

rem Find the highest version .jar available in the same directory as the script
setlocal EnableDelayedExpansion
pushd "%~dp0"
if exist apktool.jar (
set BASENAME=apktool
goto skipversioned
)
set max=0
for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB
:skipversioned
popd
setlocal DisableDelayedExpansion

rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
if "%~1"=="" goto load
if not "%~2"=="" goto load
set ATTR=%~a1
if "%ATTR:~0,1%"=="d" (
rem Directory, rebuild
set fastCommand=b
)
if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
rem APK file, unpack
set fastCommand=d
)

:load
%java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %*

rem Pause when ran non interactively
for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause

--- Добавлено в 2022-02-06 12:24:35

Опять не так сформулировал мысль.Батник запускает apktool.jar.Аpktool.jar запускается в консоли.И вот туда мне нужно ввести эти параметры "C:\Windows\apktool d C:\Users\Andrey\Desktop\apktool\v.apk -o C:\Users\Andrey\Desktop\apktool\v"

--- Добавлено в 2022-02-06 12:28:27

Пойдет процесс декомпилясии APK/Он у меня проходит нормально.
А вот когда я ввожу "C:\Windows\apktool b C:\Users\Andrey\Desktop\apktool\v" для сборки APK вылазит ошибка brut.directory.DirectoryException: java.nio.file.NoSuchFileException:

Редактировалось 2 раз(а), последний 2022-02-06 12:28:27
карма: 0

0
Ответов: 670
Рейтинг: 140
#12: 2022-02-06 12:48:57 ЛС | профиль | цитата
Udokanec, Попробуй
Add(WinExec,8347366,490,112)
{
FileName="apktool.bat"
RunEvent=1
Action="print"
Point(doConsoleExec)
Point(onConsoleTerminate)
Point(doConsoleInput)
link(onConsoleTerminate,11449550:doMessage,[])
}
Add(Button,5164603,350,126)
{
Left=15
Top=20
Width=200
Height=25
Caption="Декомпилировать\Компилировать"
link(onClick,14833570:doEvent1,[])
}
Add(Message,11449550,553,126)
{
Caption="Finish"
Icon=4
}
Add(Hub,14833570,399,126)
{
link(onEvent1,8347366:doConsoleExec,[])
link(onEvent2,2689014:doString,[])
}
Add(FormatStr,2689014,434,133)
{
Mask="C:\Windows\apktool d "C:\Users\Andrey\Desktop\apktool\v.apk" -o "C:\Users\Andrey\Desktop\apktool\v"\r\n"
link(onFString,8347366:doConsoleInput,[])
}


Редактировалось 1 раз(а), последний 2022-02-06 12:50:31
карма: 14

0
Ответов: 286
Рейтинг: 5
#13: 2022-02-06 13:06:17 ЛС | профиль | цитата
Нет не работает.
карма: 0

0
Ответов: 670
Рейтинг: 140
#14: 2022-02-06 13:24:07 ЛС | профиль | цитата
Udokanec писал(а):
Нет не работает.

А так?
Add(MainForm,10989090,476,133)
{
Height=436
}
Add(WinExec,8347366,721,140)
{
FileName="apktool.bat"
WorkingDir="C:\Windows\"
RunEvent=1
Point(doConsoleExec)
Point(doConsoleInput)
Point(onErrorExec)
Point(onConsoleResult)
Point(onConsoleError)
Point(onConsoleTerminate)
link(onErrorExec,4243533:doWork2,[])
link(onConsoleResult,3170289:doWork2,[])
link(onConsoleError,14340203:doWork2,[])
link(onConsoleTerminate,14340203:doWork3,[(795,181)])
}
Add(Button,5164603,588,140)
{
Left=15
Top=20
Width=200
Height=25
Caption="Декомпилировать"
link(onClick,9275401:doString,[])
}
Add(FormatStr,13856403,651,182)
{
Mask="b C:\Users\Andrey\Desktop\apktool\v"
link(onFString,220270:doWork3,[(697,188)])
}
Add(FormatStr,9275401,651,140)
{
Mask=" d C:\Users\Andrey\Desktop\apktool\v.apk -o C:\Users\Andrey\Desktop\apktool\v"
link(onFString,220270:doWork2,[])
}
Add(Button,4865148,588,182)
{
Left=15
Top=55
Width=200
Height=25
Caption="Компилировать"
link(onClick,13856403:doString,[])
}
Add(HubEx,220270,693,140)
{
link(onEvent,8347366:doExec,[])
}
Add(Memo,11652268,861,154)
{
Top=100
Width=384
Height=297
ScrollBars=3
}
Add(Charset,1187958,819,154)
{
link(onCharset,11652268:doAdd,[])
}
Add(HubEx,4243533,791,154)
{
link(onEvent,1187958:doCharset,[])
}
Add(HubEx,3170289,791,161)
{
Angle=3
link(onEvent,4243533:doWork3,[])
}
Add(HubEx,14340203,791,168)
{
Angle=3
link(onEvent,3170289:doWork3,[])
}


Редактировалось 1 раз(а), последний 2022-02-06 13:31:11
карма: 14

0
Ответов: 286
Рейтинг: 5
#15: 2022-02-06 13:44:40 ЛС | профиль | цитата
Так я уже пробовал.И да путь должен быть без ковычек.

--- Добавлено в 2022-02-06 13:57:20

Я извиняюсь работает,но не создает файл АРК

Редактировалось 1 раз(а), последний 2022-02-06 13:57:20
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)