使用 laravel 函数构建 gradle assemble apk
Posted
技术标签:
【中文标题】使用 laravel 函数构建 gradle assemble apk【英文标题】:Build gradle assemble apk using laravel function 【发布时间】:2022-01-11 02:17:22 【问题描述】:我目前正在 larval 函数中调用主 python 文件,在该主 python 文件中我正在调用另外 2 个文件(PowerShell 和子 python 文件)问题是当 Laravel 函数被触发时它只调用主python 文件,但是当我使用终端调用主 python 文件时,所有文件的执行如下:
Laravel 函数:
public function initialize(Request $request)
$store_name = $request->get('store_name', 1);
if (empty($store_name))
return 'Missing store name';
else
$processes = File::get("/root/flask/android_api/processes.txt");
File::put('/root/flask/android_api/url.txt', $store_name );
$process = new Process(['python3.6', '/root/flask/android_api/buildAPK.py']);
$process->run();
if (!$process->isSuccessful())
throw new ProcessFailedException($process);
else
return 'Starting the processes to build';
在我的主要 python 文件中:
try:
p = subprocess.Popen(["/usr/bin/pwsh",
"/root/flask/android_api/set_apk_builder.ps1", '-ExecutionPolicy',
'Unrestricted',
'./buildxml.ps1'],
stdout=sys.stdout)
p.communicate()
except:
file = open ("/root/flask/android_api/log.txt", "w")
file.write ("fail")
file.close()
import slack
// call(["python", "/root/flask/flask.py"])
os.system('python3.7 /root/flask/flask.py')
编辑:
现在我将构建更改为直接从 laravel 函数生成 apk 使用这个命令:
public function initialize(Request $request)
$store_name = $request->get('store_name', 1);
if (empty($store_name))
return 'Missing store name';
else
return shell_exec('cd /var/www/html/androidProject && chmod +x gradlew && ./gradlew assembledemoDebug');
但是,命令行返回 Gradle 命令 build is started 但它不会创建文件夹并生成 apk
当前文件夹结构 /var/www/html 里面 html 是项目文件夹和 laravel 项目
注意:在我在 Laravel 函数中调用 Gradle 构建命令之前,我曾经调用 python 文件并且该 python 文件正在调用 Gradle 命令,但我遇到了同样的问题,没有创建 apk,但是当我从bash 命令它工作正常
【问题讨论】:
第一次运行没有try/except
以查看完整的错误消息。
你为什么要运行flask.py
两次?第一个call
,下一个os.system
?顺便说一句:您使用模块 flask
所以最好不要使用单词 flask
作为脚本名称和文件夹名称,因为稍后 import flask
可能会尝试加载您的脚本/文件夹而不是模块 flask
我确实尝试过,除了在开始时没有尝试,但什么也没发生,当我处理代码时,我两次调用 flask.py 是错误的,我正在双向测试,但我在提问之前删除了 cmets,问题现在更新了一个评论
如果它没有改变,那么也许你应该每隔几行保存文件/日志信息以查看执行了哪一行。也许它表明可能是什么问题。如果您没有得到任何信息,那么我们不知道问题出在哪里,我们也无能为力。
@furas 问题已更新
【参考方案1】:
有两种方法可以做到这一点:
首先是将您的命令包含到一个 .sh 文件中,您应该使用此命令使其可执行:
chmod +x 文件.sh
然后你应该使用 Symfony 进程从 laravel 调用该文件,以便获取日志进程和错误的详细信息:
使用 Symfony\Component\Process\Process; 使用 Symfony\Component\Process\Exception\ProcessFailedException;
$process = new Process('sh /folder_name/file_name.sh');
$process->run();
if (!$process->isSuccessful())
throw new ProcessFailedException($process);
echo $process->getOutput();
然后在您希望运行的文件中包含所有命令。
其次,您可以使用
运行这些命令$output = shell_exec('ls -lart');
then echo "<pre>$output</pre>";
您需要将所有可写文件移动到 Laravel 的公共目录中,因为那里应该是所有内容都可以编辑的地方。'=
我实际上建议第一个,因为您不需要将某些文件夹的所有者更改为 www-data 以授予写入权限。
【讨论】:
以上是关于使用 laravel 函数构建 gradle assemble apk的主要内容,如果未能解决你的问题,请参考以下文章
C++学习(三九七)Android Stdudio(AS)提高构建速度的方法
AS Gradle task构建失败CompilationFailedException解决
AOP 面向切面编程Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(代