codelv / enaml-native-cli

CLI and package manager for building enaml-native apps
https://www.codelv.com/projects/enaml-native/
GNU General Public License v3.0
13 stars 7 forks source link

enaml-native run-android failing for task ':enaml-native:bundlePython'. #25

Open PyJay opened 4 years ago

PyJay commented 4 years ago

I have followed the steps on the README on Windows. I have:

On running enaml-native-cli run-android it fails with the following error:

(c:\dev\code\FooBar\venv) λ enaml-native run-android
[DEBUG]:   -> running cd android
[INFO]:   -> running  gradlew.bat installDebug
> Task :app:preBuild UP-TO-DATE
> Task :enaml-native:bundlePython FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':enaml-native:bundlePython'.
> A problem occurred starting process 'command 'venv/bin/enaml-native''
frmdstryr commented 4 years ago

Does running enaml-native bundle-assets directly work?

https://github.com/codelv/enaml-native/blob/master/android/build.gradle#L92

PyJay commented 4 years ago

Thanks for the quick reply. No luck

c:\dev\code\FooBar
(c:\dev\code\FooBar\venv) λ enaml-native bundle-assets
# packages in environment at c:\dev\code\FooBar\venv:
#
# Name                    Version                   Build  Channel
android-atom              0.4.3                    py37_0    codelv
android-enaml             0.10.3                   py37_0    codelv
android-libcxx            11                            0    codelv
android-msgpack           0.5.6                         0    codelv
android-python            3.7.4                    py37_1    codelv
[DEBUG] Building for 3.7m
[DEBUG]:   -> running cd c:\dev\code\FooBar\venv/android/enaml-native/src/main/jni
[INFO]:   -> running  none\ndk-build.cmd
[DEBUG]:   -> running  cd c:\dev\code\FooBar
Traceback (most recent call last):
  File "c:\dev\bin\anaconda\envs\foobar\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\dev\bin\anaconda\envs\foobar\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\dev\code\FooBar\venv\Scripts\enaml-native.exe\__main__.py", line 7, in <module>
  File "c:\dev\bin\anaconda\envs\foobar\lib\site-packages\enamlnativecli\main.py", line 1772, in main
    EnamlNativeCli().start()
  File "c:\dev\bin\anaconda\envs\foobar\lib\site-packages\enamlnativecli\main.py", line 1766, in start
    cmd.run(self.args)
  File "c:\dev\bin\anaconda\envs\foobar\lib\site-packages\enamlnativecli\main.py", line 582, in run
    self.cmds['ndk-build'].run(args)
  File "c:\dev\bin\anaconda\envs\foobar\lib\site-packages\enamlnativecli\main.py", line 513, in run
    shprint(ndk_build)
  File "c:\dev\bin\anaconda\envs\foobar\lib\site-packages\enamlnativecli\main.py", line 158, in shprint
    process = cmd(*args, **kwargs).process
  File "c:\dev\bin\anaconda\envs\foobar\lib\site-packages\pbs.py", line 454, in __call__
    cwd=call_args["cwd"], stdin=stdin, stdout=stdout, stderr=stderr)
  File "c:\dev\bin\anaconda\envs\foobar\lib\subprocess.py", line 800, in __init__
    restore_signals, start_new_session)
  File "c:\dev\bin\anaconda\envs\foobar\lib\subprocess.py", line 1207, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
frmdstryr commented 4 years ago

Is the android ndk installed?

It's saying ndk-build is missing ( https://github.com/codelv/enaml-native-cli/blob/master/enamlnativecli/main.py#L461)

PyJay commented 4 years ago

I never found a ndk-bundle dir where the Sdk was installed but with your point above I changed the android:ndk path to <userdir>AppData/Local/Android/Sdk/ndk/21.0.6113669 which had an ndk-build.

I think I'm very close now...I got an error about no devices/emulators so I set up one via Android Studio. Now I'm stuck on

Starting: Intent { cmp=com.foobar.foobar/.MainActivity }
Error type 3
Error: Activity class {com.foobar.foobar/com.foboar.foobar.MainActivity} does not exist.
[DEBUG]:   -> running  cd c:\dev\code\foobar

EDIT: I think the issue still may be in bundle-assets. I will try to debug that further and add to this comment.

PyJay commented 4 years ago

I started from scratch. bundle-assets works now but I keep getting this error when running build-android or run-android. Any ideas?

Steps followed:

image

frmdstryr commented 4 years ago

Please post the error when running the bundle command directly

PyJay commented 4 years ago

The bundle-asset command works fine but was having issue with the build-android command.

Used a breakpoint to add the --stacktrace option (as I couldn't get the extra arg option to work).

Looks like it expects c:\dev\code\foobar\venv\bin\enamlnative to exist but there is no bin folder. There is enamlnative.exe in the Scripts folder though.

Command and stack trace below:

(c:\dev\code\foobar\venv) λ enaml-native build-android
c:\dev\bin\anaconda\envs\foobar\lib\site-packages\atom\scalars.py:227: FutureWarning: Unicode is deprecated and will be removed in atom 0.6.0
  warnings.warn(FutureWarning(msg))
[DEBUG]:   -> running cd android
> c:\dev\bin\anaconda\envs\foobar\lib\site-packages\enamlnativecli\main.py(1276)run()
-> shprint(gradlew, 'assembleDebug', *args.extra, _debug=True)
(Pdb) shprint(gradlew, 'assembleDebug', '--stacktrace', _debug=True)
[INFO]:   -> running  gradlew.bat assembleDebug --stacktrace
> Task :app:preBuild UP-TO-DATE
> Task :enaml-native:bundlePython FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':enaml-native:bundlePython'.
> A problem occurred starting process 'command 'venv/bin/enaml-native''

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':enaml-native:bundlePython'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:95)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:119)
        at org.gradle.api.internal.tasks.execution.ResolvePreviousStateExecuter.execute(ResolvePreviousStateExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:93)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:45)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:94)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:67)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'venv/bin/enaml-native''
        at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:232)
        at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:209)
        at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:356)
        at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:86)
        at org.gradle.internal.operations.CurrentBuildOperationPreservingRunnable.run(CurrentBuildOperationPreservingRunnable.java:42)
        ... 3 more
Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'venv/bin/enaml-native'
        at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
        at net.rubygrapefruit.platform.internal.WindowsProcessLauncher.start(WindowsProcessLauncher.java:22)
        at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
        at org.gradle.process.internal.ExecHandleRunner.startProcess(ExecHandleRunner.java:97)
        at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:70)
        ... 4 more
Caused by: java.io.IOException: Cannot run program "venv/bin/enaml-native" (in directory "C:\dev\code\foobar"): CreateProcess error=2, The system cannot find the file specified
        at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
        ... 8 more
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
        ... 9 more

* Get more help at https://help.gradle.org

BUILD FAILED in 2s
1 actionable task: 1 executed
PyJay commented 4 years ago

Does running enaml-native bundle-assets directly work?

https://github.com/codelv/enaml-native/blob/master/android/build.gradle#L92

I finally got this working today by changing the commandLine path from venv/bin/enaml-native to c:/dev/bin/conda/envs/foobar/Scripts/enaml-native.exe

    task bundlePython(type: Exec) {
        workingDir "../../../" // root enaml-native dir
        if (project.hasProperty("preReleaseBuild")) {
            commandLine "c:/dev/bin/conda/envs/foobar/Scripts/enaml-native.exe", "bundle-assets", "--release"
        } else {
            commandLine "c:/dev/bin/conda/envs/foobar/Scripts/enaml-native.exe", "bundle-assets"
        }
    }

Then I just had to install JAVA jdk, upgrade gradle to latest version (JDK 14 was throwing an error with the existing version of gradle - https://github.com/gradle/gradle/issues/10248#issuecomment-604468247)