Giter Site home page Giter Site logo

briefcase-android-gradle-template's Introduction

Briefcase Android Gradle Template

A Cookiecutter template for building Python apps that will run under Android.

Using this template

The easiest way to use this project is to not use it at all - at least, not directly. Briefcase is a tool that uses this template, rolling it out using data extracted from a pyproject.toml configuration file.

However, if you do want use this template directly...

  1. Install cookiecutter. This is a tool used to bootstrap complex project templates:

    $ pip install cookiecutter
    
  2. Run cookiecutter on the template:

    $ cookiecutter https://github.com/beeware/briefcase-android-gradle-template
    

    This will ask you for a number of details of your application, including the name of your application (which should be a valid PyPI identifier), and the Formal Name of your application (the full name you use to describe your app). The remainder of these instructions will assume a name of my-project, and a formal name of My Project.

  3. Add your code to the template, into the My Project/app/src/main/python directory. At the very minimum, you need to have an <app name>/__main__.py file that invokes org.beeware.android.MainActivity.setPythonApp(), providing an IPythonApp instance. This provides the hooks into the Android application lifecycle (onCreate, onResume and so on); it's up to you what your code does with those lifecycle hooks.

    If your code has any dependencies, they should be listed in the file My Project/app/requirements.txt.

If you've done this correctly, a project with a formal name of My Project, with an app name of my-project should have a directory structure that looks something like:

My Project/
    app/
        src/
            main/
                python/
                    my_project/
                        __init__.py
                        __main__.py (declares IPythonApp)
            cpp/
                ...
            java/
                ...
            res/
                ...
            AndroidManifest.xml
        build.gradle
        proguard-rules.pro
        requirements.txt
    briefcase.toml
    build.gradle
    gradle.properties
    gradlew
    gradlew.bat
    settings.gradle

You're now ready to build and run your project! Either open the My Project directory in Android Studio, or use the command line tools.

Next steps

Of course, running Python code isn't very interesting by itself - you'll be able to output to the console, and see that output in the Logcat, but if you tap the app icon on your phone, you won't see anything - because there isn't a visible console on an Android.

To do something interesting, you'll need to work with the native Android system libraries to draw widgets and respond to screen taps. The Chaquopy Java bridging library can be used to interface with the Android system libraries.

Alternatively, you could use a cross-platform widget toolkit that supports Android (such as Toga) to provide a GUI for your application. Toga automatically handles creating the IPythonApp instance and responding to the app's lifecycle hooks.

briefcase-android-gradle-template's People

Contributors

bbusenius avatar brutusthebee avatar drewbrew avatar freakboy3742 avatar iamzili avatar mhsmith avatar paulproteus avatar proneon267 avatar rmartin16 avatar t-arn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

briefcase-android-gradle-template's Issues

how in beware One can access the phone contacts of all their names and phone numbers and call them at the press of a button

What is the problem or limitation you are having?

want to access the contacts, their names and phone numbers in my programs and use them in my program, and also how can I make a phone call with a number by pressing a button. I could not find this feature in beeware. Please guide me if possible, if not, how to use the java code to do this in beeware and connect to my program and exchange data with python. I will be grateful if you answer

Describe the solution you'd like

I couldn't find way

Describe alternatives you've considered

how to use the java code to do this in beeware and connect to my program and exchange data with python. I will be grateful if you answer

Additional context

No response

Only build for ARM by default?

What is the problem or limitation you are having?

I discovered recently that the Android emulator was updated several years back to support running ARM binaries on x86 Android.

Describe the solution you'd like

So, with that in mind, is there still value in building for x86-64, by default? Or, said another way, is there value in continuing to target x86-64 as well as arm64 beyond support for the Android emulator on x86?

If not, should x86-64 be removed from default builds?

Describe alternatives you've considered

Status quo.

Additional context

I'm assuming that x86-64 builds are only done for the Android emulator; obviously, if there are other reasons, this point is moot.

Apps installed from Google Play using AAB format crash on start

Describe the bug
Since August 2021, new apps that are uploaded to Google Play must use the AAB format.
But apps that are uploaded as AAB and then installed from Google Play crash on app startup with the following error:

2021-12-28 08:28:31.847 23118-23118/? E/MainActivity: Failed to create Python app
    java.lang.Exception: Unable to compute Python version
        at org.beeware.android.MainActivity.startPython(MainActivity.java:216)
        at org.beeware.android.MainActivity.onCreate(MainActivity.java:248)
        at android.app.Activity.performCreate(Activity.java:7993)
        at android.app.Activity.performCreate(Activity.java:7982)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3246)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3410)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2017)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7397)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)

To Reproduce
Steps to reproduce the behavior:

  1. Create an AAB for the "command" example of Toga, using the Toga code from the master branch [1198c0f] and the briefcase-android-gradle-template code from the dev branch [f251575]
  2. Sign the AAB
  3. Uplad the AAB to Google Play
  4. Install the app from Google Play
  5. Run the app

The behaviour can also be tested locally:

  1. Create an AAB for the "command" example of Toga, using the Toga code from the master branch [1198c0f] and the briefcase-android-gradle-template code from the dev branch [f251575]
  2. Connect your Android phone
  3. Run bundletool build-apks with the --connected-device option
  4. Run bundletool install-apks
  5. Run the app

Expected behavior
An app installed from Google Play must start correctly. This must be true for apps uploaded as APK or AAB.

Environment:

  • Operating System: Android 10
  • Python version: 3.8
  • Software versions:
    • Briefcase: 0.3.5
    • Toga: master branch, commit [1198c0f]
    • briefcase-android-gradle-template: dev branch [f251575]

Gradle template incompatible with Kotlin 1.5.0

As of early June, Briefcase Android projects fail to build, with the message:

e: /Users/.../kotlin-stdlib-common-1.5.10.jar!/META-INF/kotlin-stdlib-common.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.16.

To Reproduce

briefcase run android with a helloworld project.

Additional context

This appears to be due to the Kotlin 1.5.0 release.

Short term, increasing the ext.kotlin_version to "1.4.30" seems to fix the problem. Increasing to "1.5.0" fails because the Kotlin-gradle-plugin is incompatible.

Longer term... this is the second time in a month that a perfectly functioning build file has stopped working because of a Kotlin-related issue. This is approximately 2 times too many. Given we're not actually relying on any key Kotlin functionality, I'm inclined to rewrite Helpers.kt in Java and avoid these problems entirely in the future.

(app-name) keeps stopping

Describe the bug
I created the apk-file, but when I run it on my device he says " (app-name) keeps stopping"

To Reproduce
according to https://docs.beeware.org/en/latest/tutorial/tutorial-0.html I did the following:

C:...>md beeware-tutorial
C:...>cd beeware-tutorial
C:...>py -m venv beeware-venv
C:...>beeware-venv\Scripts\activate.bat

(beeware-venv)C:...>python -m pip install briefcase
(beeware-venv) C:...>briefcase new

IDKwhat I entereb, but here my pyproject.toml file (
[tool.briefcase]
project_name = "beeware-tutor"
bundle = "com.tutor"
version = "0.0.1"
url = "https://tutor.com/tutor"
license = "Other"
author = 'ilyapaliy'
author_email = "[email protected]"

[tool.briefcase.app.tutor]
formal_name = "beeware-tutor"
description = "My first application"
icon = "src/tutor/resources/tutor"
sources = ['src/tutor']
requires = []

[tool.briefcase.app.tutor.macOS]
requires = [
'toga-cocoa>=0.3.0.dev20',
]

[tool.briefcase.app.tutor.linux]
requires = [
'toga-gtk>=0.3.0.dev20',
]
system_requires = [
'libgirepository1.0-dev',
'libcairo2-dev',
'libpango1.0-dev',
'libwebkitgtk-3.0-0',
'gir1.2-webkit-3.0',
]

[tool.briefcase.app.tutor.windows]
requires = [
'toga-winforms>=0.3.0.dev20',
]

Mobile deployments

[tool.briefcase.app.tutor.iOS]
requires = [
'toga-iOS>=0.3.0.dev20',
]

[tool.briefcase.app.tutor.android]
requires = [
'toga-android>=0.3.0.dev20',
]
)

(beeware-venv) C:...>cd tutor
(beeware-venv) C:...>briefcase dev
(beeware-venv) C:...>briefcase dev

(beeware-venv) C:...>briefcase create
(beeware-venv) C:...>briefcase build
(beeware-venv) C:...>briefcase run
(beeware-venv) C:...>briefcase package

(Everything was cool: msi file installed the app, app worked, I was happy until I tried make apk by the following link https://docs.beeware.org/en/latest/tutorial/tutorial-5/android.html)

(beeware-venv) C:...>briefcase create android
(beeware-venv) C:...>briefcase build android
(beeware-venv) C:...>briefcase run android

cmd started to install emulator, but I don't need this, I have my own phone, hm ok.
After that I was offered 3 options:

  1. BV9500Plus (BV9500Plus0019640)
  2. @Pixel_2_API_24 (emulator)
  3. Create a new Android emulator

2

In future, you can specify this device by running:

briefcase run android -d @Pixel_2_API_24

Starting emulator Pixel_2_API_24...

Waiting for emulator to start.....
Android emulator was unable to start!

Try starting the emulator manually by running:

C:\Users\User\.briefcase\tools\android_sdk\emulator\emulator.exe @Pixel_2_API_24 -dns-server 8.8.8.8

Resolve any problems you discover, then try running your app again. You may
find this page helpful in diagnosing emulator problems.

https://developer.android.com/studio/run/emulator-acceleration#accel-vm

Trying manually > C:\Users\ilyapaliy.briefcase\tools\android_sdk\emulator\emulator.exe @Pixel_2_API_24 -dns-server 8.8.8.8
PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT
(Does not matter, emulators lag on my pc, I wanted to run it on my phone)

1

In future, you can specify this device by running:

briefcase run android -d BV9500Plus0019640

[tutor] Starting app on BV9500Plus (BV9500Plus0019640) (device ID BV9500Plus0019640)

[tutor] Stopping old versions of the app...

[tutor] Installing app...

[tutor] Launching app...

А white screen appears for a moment and then a message "beeware-tutor has stopped" or "beeware-tutor keeps stopping".
Exactly same popup style: https://www.google.com/search?q=app+has+stopped&sxsrf=ALeKk02neonS5a46uaykaMm8YrJjAx-5Pg:1606675274987&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiIrKPos6jtAhXvwosKHTW6AKEQ_AUoAXoECAcQAw&biw=1920&bih=947#imgrc=CEUEvwPbJOwqzM

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Environment:
OS Name: Microsoft Windows 10 Education
OS Build: 10.0.19042 N/A Build 19042.630
OS Version: 20H2
System Type: x64-based PC
Python 3.8.5
pip 20.2.4

  • Software versions:
    • Briefcase: 0.3.3
    • Toga: toga_core-0.3.0.dev25.dist-info
      toga_winforms-0.3.0.dev25.dist-info
    • ...

Additional context
after briefcase build android once I saw this:
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
but BUILD was SUCCESSFUL

and this 1 executed task every time:
BUILD SUCCESSFUL in 7s
28 actionable tasks: 1 executed, 27 up-to-date

[tutor] Built android\beeware-tutor\app\build\outputs\apk\debug\app-debug.apk

I tried create project with pyside2, but beeware don't support modern versions of this package.
It ask me install pyside2==5.13.0

Android build fails on 32 bit machine

Hi.
I have some errors for you.

Maybe problems just for me, but before I had problem with Java downloaded version of JDK, I had already JDK, but new one was downloaded into briefcase, which was 64 bit, but I had 32 bit version of windows. So I had to manually overwrite Java files in briefcase to 32 bit.

For create android you also need Ninja building program. For creating Ninja is needed MinGW-w64. Nobody mentioned, that I will need this programs - Ninja and MinGW-w64.

https://imgur.com/BrBwjXC after I write "briefcase build android", I encounter this errors. Clang and clang++ are in position, that is erroring. Don't know, how to fix it.

at name_of_project\android\name_of_project\gradle.properties, I am suggesting to lower default value from 1.5Gb to 1Gb. (1564 to 1024). Encountered error, that Gradle did not have enough Ram to run.

at name_of_project\name_of_project\android\name_of_project\app\build.gradle - ExternalNativeBuild section, if there is 3.6.0+ - gradle does not work, shows that there is not Cmake of version 3.6.0+. If you explicitly set number to yours Cmake version, it works. (My version 3.17.3 - value 3.6.0+ does not work, value 3.17.3 works)

Spent probably 15 hours on this errors, but I did not build my first Android app yet. Hoping for better tommorows. Thanks for your work and keep it up.

Add a splash screen

An Android app should display a splash screen to the user while the app is loading.

The template should provide a default "Made with BeeWare" version of this splash screen, but provide customization options so end-users can define their own image (in multiple sizes, if necessary). The iOS template is a guide for what is needed.

This guide may provide useful details.

android Could not determine the dependencies of task app:mergeDebugNativeLibs

Describe the bug
I followed the instructions on https://docs.beeware.org/en/latest/tutorial/tutorial-5/android.html, and when I execute briefcase build android after briefcase create android, I got the following errors.

To Reproduce
Steps to reproduce the behavior:

  1. Create an example project followed via https://docs.beeware.org/en/latest/tutorial/tutorial-0.html
  2. Followed the instructions from 0-5.

Expected behavior
build android successfully

Screenshots
build android failed with android Could not determine the dependencies of task app:mergeDebugNativeLibs

Environment:

  • Operating System: Microsoft Windows [Version 10.0.19042.1081]
  • Python version: Python 3.8.3
  • Software versions:
    • Briefcase: 0.3.5
    • Toga: 0.3.0.dev27
    • ...

Additional context

(beeware-venv) D:\code\python\beeware-tutorial\helloworld>briefcase create android

[helloworld] Generating application template...
Using app template: https://github.com/beeware/briefcase-android-gradle-template.git, branch 3.8
Using existing template (sha 97d59ef36678719a58c487cb2705b3d617f2caec, updated Sat Jun  5 14:12:50 2021)

[helloworld] Installing support package...
Using support package https://briefcase-support.org/python?platform=android&version=3.8
... using most recent revision
Python-3.8-Android-support.b3.zip already downloaded
Unpacking support package...

[helloworld] Installing dependencies...
Collecting toga-android>=0.3.0.dev20
  Using cached toga_android-0.3.0.dev27-py3-none-any.whl (26 kB)
Collecting rubicon-java>=0.2.2
  Using cached rubicon_java-0.2.5-py3-none-any.whl (23 kB)
Collecting toga-core==0.3.0.dev27
  Using cached toga_core-0.3.0.dev27-py3-none-any.whl (487 kB)
Collecting travertino>=0.1.3
  Using cached travertino-0.1.3-py3-none-any.whl (15 kB)
Installing collected packages: travertino, toga-core, rubicon-java, toga-android
Successfully installed rubicon-java-0.2.5 toga-android-0.3.0.dev27 toga-core-0.3.0.dev27 travertino-0.1.3

[helloworld] Installing application code...
Installing src/helloworld...

[helloworld] Installing application resources...
Unable to find 48px round variant for application icon; using default
Unable to find 72px round variant for application icon; using default
Unable to find 96px round variant for application icon; using default
Unable to find 144px round variant for application icon; using default
Unable to find 192px round variant for application icon; using default
Unable to find 48px square variant for application icon; using default
Unable to find 72px square variant for application icon; using default
Unable to find 96px square variant for application icon; using default
Unable to find 144px square variant for application icon; using default
Unable to find 192px square variant for application icon; using default

[helloworld] Created android\gradle\Hello World

(beeware-venv) D:\code\python\beeware-tutorial\helloworld>briefcase build android
[helloworld] Building Android APK...

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':app:mergeDebugNativeLibs'.
> Invalid revision: 3.18.1-g262b901-dirty

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

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

BUILD FAILED in 8s

Error while building project.

(beeware-venv) D:\code\python\beeware-tutorial\helloworld>

I even tried to clean the android project, but still got errors.

(beeware-venv) D:\code\python\beeware-tutorial\helloworld\android\gradle\Hello World>gradlew clean
> Task :app:externalNativeBuildCleanDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:externalNativeBuildCleanDebug'.
> Invalid revision: 3.18.1-g262b901-dirty

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

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

BUILD FAILED in 5s
2 actionable tasks: 1 executed, 1 up-to-date

(beeware-venv) D:\code\python\beeware-tutorial\helloworld\android\gradle\Hello World>gradlew assembleDebug

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':app:mergeDebugNativeLibs'.
> Invalid revision: 3.18.1-g262b901-dirty

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

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

BUILD FAILED in 3s

(beeware-venv) D:\code\python\beeware-tutorial\helloworld\android\gradle\Hello World>

I have the updated the latest android sdk.

image

image

Use separate locations for `app` and `app_packages`

Implementation notes: Right now, the user's app and the dependencies are siblings in the filesystem tree. We need to mirror how the iOS briefcase target works in terms of separating the app and app_packages.

Extend LD_LIBRARY_PATH, rather than overwriting it

pmp-p on BeeWare Gitter points out that overwriting LD_LIBRARY_PATH could conflict with the configuration provided by Android vendors. It's better to add to the LD_LIBRARY_PATH, rather than overwrite it:

Os.setenv("LD_LIBRARY_PATH", this.getApplicationInfo().nativeLibraryDir, true);

If possible, I'd prefer not to set that environment variable at all.

Can't download `Python support package for Android`

Describe the bug
Can't download Python support package for Android, the link may be wrong( https://github.com/beeware/briefcase-android-gradle-template/tree/3.8#id1)

To Reproduce
Steps to reproduce the behavior:

  1. Click Download the Python support package for Android_, in readme
  2. There is nothing

Screenshots
image

APK can still be installed on x86 emulators, but crashes

Reported on Discord by нυηтєя.

The current Android support package no longer includes x86 libraries. However, Gradle defaults to building libnative-lib.so for all ABIs, so the APK contains the following:

    66272  1981-01-01 01:01   lib/arm64-v8a/libbz2.so
       15  1981-01-01 01:01   lib/arm64-v8a/libcrypto.so
  2374640  1981-01-01 01:01   lib/arm64-v8a/libcrypto1.1.so
    26656  1981-01-01 01:01   lib/arm64-v8a/libffi.so
   133800  1981-01-01 01:01   lib/arm64-v8a/liblzma.so
    10080  1981-01-01 01:01   lib/arm64-v8a/libnative-lib.so
  2750440  1981-01-01 01:01   lib/arm64-v8a/libpython3.8.so
    37624  1981-01-01 01:01   lib/arm64-v8a/librubicon.so
   738064  1981-01-01 01:01   lib/arm64-v8a/libsqlite3.so
       12  1981-01-01 01:01   lib/arm64-v8a/libssl.so
   507800  1981-01-01 01:01   lib/arm64-v8a/libssl1.1.so
    64676  1981-01-01 01:01   lib/armeabi-v7a/libbz2.so
       15  1981-01-01 01:01   lib/armeabi-v7a/libcrypto.so
  1788528  1981-01-01 01:01   lib/armeabi-v7a/libcrypto1.1.so
    23160  1981-01-01 01:01   lib/armeabi-v7a/libffi.so
   126580  1981-01-01 01:01   lib/armeabi-v7a/liblzma.so
    13868  1981-01-01 01:01   lib/armeabi-v7a/libnative-lib.so
  2381012  1981-01-01 01:01   lib/armeabi-v7a/libpython3.8.so
    27580  1981-01-01 01:01   lib/armeabi-v7a/librubicon.so
   700916  1981-01-01 01:01   lib/armeabi-v7a/libsqlite3.so
       12  1981-01-01 01:01   lib/armeabi-v7a/libssl.so
   415348  1981-01-01 01:01   lib/armeabi-v7a/libssl1.1.so
     5620  1981-01-01 01:01   lib/x86/libnative-lib.so
    76024  1981-01-01 01:01   lib/x86_64/libbz2.so
       15  1981-01-01 01:01   lib/x86_64/libcrypto.so
  2643584  1981-01-01 01:01   lib/x86_64/libcrypto1.1.so
    28520  1981-01-01 01:01   lib/x86_64/libffi.so
   138552  1981-01-01 01:01   lib/x86_64/liblzma.so
    10344  1981-01-01 01:01   lib/x86_64/libnative-lib.so
  2746648  1981-01-01 01:01   lib/x86_64/libpython3.8.so
    37992  1981-01-01 01:01   lib/x86_64/librubicon.so
   756888  1981-01-01 01:01   lib/x86_64/libsqlite3.so
       12  1981-01-01 01:01   lib/x86_64/libssl.so
   534872  1981-01-01 01:01   lib/x86_64/libssl1.1.so

Because there's at least one x86 library in the APK, it can still be installed on x86 emulators, but it crashes on startup with the following error:

06-26 19:28:35.377  2874  2874 E MainActivity: Failed to create Python app
06-26 19:28:35.377  2874  2874 E MainActivity: java.lang.RuntimeException: Unable to find file matching pythonhome.* and x86.zip
06-26 19:28:35.377  2874  2874 E MainActivity:  at org.beeware.android.MainActivity.unpackPython(MainActivity.java:134)
06-26 19:28:35.377  2874  2874 E MainActivity:  at org.beeware.android.MainActivity.startPython(MainActivity.java:201)
06-26 19:28:35.377  2874  2874 E MainActivity:  at org.beeware.android.MainActivity.onCreate(MainActivity.java:249)
06-26 19:28:35.377  2874  2874 E MainActivity:  at android.app.Activity.performCreate(Activity.java:7136)

This can be fixed by adding the abiFilters setting to build.gradle to explicitly list the ABIs we support. That way, Gradle won't waste time building an x86 libnative-lib.so, and if you attempt to install the APK on an x86 device, it'll fail immediately with a clear error message.

Environment:

  • Operating System: Windows
  • Python version: Unknown
  • Software versions:
    • Briefcase: 0.3.6

Handle bundles with dashes in the name

Traveltips uses com.keith-magee.traveltips as it's full bundle name. However, this isn't a valid namespace for an Android package.

We need to modify the template to use a valid namespace for any valid bundle.

At the same time, we should verify that com.keith-magee.travel-tips also works. Briefcase already supports app_name and module_name to differentiate between travel-tips and travel_tips; we probably need an analogous transform for the bundle.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.