使用 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的主要内容,如果未能解决你的问题,请参考以下文章

Gradle学习笔记

C++学习(三九七)Android Stdudio(AS)提高构建速度的方法

AS Gradle task构建失败CompilationFailedException解决

Gradle

AOP 面向切面编程Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(代

加快AS的Gradle Build速度