Code Monkey home page Code Monkey logo

termux-gui's Introduction

Termux:GUI

This is a plugin for Termux that enables command line programs to use the native android GUI.

In the examples directory you can find demo videos, sample code is provided in the tutorials of the official language bindings.

There are also prepackaged programs you can use.

Installation notes
There is currently no release on f-droid, so the only method to install this plugin is to use the apk from the releases and the Termux apk from Github Actions.
Releases on f-droid will be provided as soon as possible. When there is a release, the f-droid badge at the top will show a version number. The f-droid builds currently don't work, Github builds are the only option for now.
See this comment for links to install Termux and its plugins from Github.

Protocol.md describes the Protocol used and the available functions you can use.
GUIProt0.proto contains the documentation of the newer Protobuf-based protocol with more features.
If you want to use overlay windows or be able to open windows from the background, go into the app settings for Termux:GUI, open the advanced section and enable "Display over other apps".

Features

  • buttons, switches, toggles, checkboxes, text fields, scrolling, LinearLayout
  • custom notifications
  • custom widgets
  • shared image buffers
  • GLES2 acceleration
  • WebView
  • Dialogs
  • Lockscreen Activities
  • Wake-lock
  • ...and more

Comparison with native apps

Native app With Termux:GUI
Has to be installed Program can be run in Termux
Full access to the Android API Access to the Android API through Termux:GUI and Termux:API
Limited to C, C++, Kotlin and Java for native development Any programming language can be used, prebuilt library for python available
Lower performance caused by IPC
Accessing files in Termux only possible via SAF Direct access to files in Termux
Has to be started with am from Termux Can be started like any other program in Termux
Can receive command line arguments and output back to the Terminal

Language Bindings

Official

Community

Not maintained by the plugin maintainer:

Using the plugin

Using this plugin requires a bit of knowledge of the Android GUI system. You can read about it in detail in the official documentation.
Relevant documentation is also linked in Protocol.md for more specific subjects.
Here is a crash-course:

Tasks

Tasks are the individual screens you can switch between. Each Task has a stack of Activities, called the back stack, with the top one being visible.

Activities

Activities are the individual screens of apps, like a home screen, a settings screen etc.
When an Activity finishes itself, it is removed from the Activity stack of its Task, showing the underlying Activity.
An Activity can also launch another Activity in the Task, adding it to the back stack on top of itself.
To not let the device do unneeded work like drawing Elements that aren't visible, the System informs Activities of certain changes.
These are the Activity lifecycle events.

Activity Lifecycle

The most important lifecycle events for you will be onDestroy, onStart and onStop. When an Activity is started, it is visible. An Activity is destroyed if the user finishes it (by dismissing it), when it finishes itself or when a configuration change occurs.
The plugin will tell you if the Activity is finishing when onDestroy is fired, so you know the Activity will be closed.
Configuration changes are handled for you, so you don't need to worry about onDestroy if the Activity is not finishing.

Views

Views are the Elements that are displayed in Activities.
They are divided into Views and Viewgroups, which can themselves contain Views or Viewgroups.
That results in a hierarchy of Elements, with one at the top.
The Viewgroups are Layouts that position the contained Views according to your configuration.

The most used Layout is LinearLayout. It simply displays Views in a horizontal or vertical list, giving each Element the same space by default.
TextViews can display text.
EditText can get text input from the user.
Buttons can be clicked.
ImageViews can display images.

With these fundamentals you can go ahead and use this plugin. If you need more sophisticated Views or Layouts look into Protocol.md for what's available.

termux-gui's People

Contributors

artemisx64 avatar dependabot[bot] avatar landfillbaby avatar tareksander avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

termux-gui's Issues

Python. Display gif in ImageView

Hi there! I really love this project, thanks for your work!
Can you suggest, please, how can I display gifs in ImageView and handle events?
First, I tried to open gif like in python bindings example, with io.open, but ImageView displays only first (0) frame. Then I tried to open image with PIL image library and loop over frames. It worked, but I cant handle events, till frame loop is not finished, but also I would like the gif to be shown infinitely. I can do this with while loop, but, again, cant handle events.
Now, I have a code like this:

from io import BytesIO
from time import sleep
from PIL import Image

file = 'some.gif'
gif = Image.open(file)

with tg.Connection() as c:
    a = tg.Activity(c, dialog=True)
    lay = tg.LinearLayout(a)
    e = tg.ImageView(a, lay)
    button = tg.Button(a, 'Text', lay)
    for ev in c.events():
        print (ev.type, ev.value)
        for frame in range(gif.n_frames):
            gif.seek(frame)
            buf = BytesIO()
            gif.save(buf, format='PNG')
            e.setlinearlayoutparams(0)
            e.setheight(gif.height*5, px=True)
            e.setwidth(gif.width*5, px=True)
            e.setimage(buf.getvalue())
            sleep(1.5)

It's looped over all frames only one time, and till loop is not finished, events cant be handled

[question]editText view multiple roles issue

I'm currently working on a project where I need to input multiple lines of words in editText view, but I can't seem to find the correct args or method for these 2 functions:

  1. wrap around the words(switch to another line when the input reaches the limit);

  2. input multiple lines(when I hit enter, cursor moves to next line of words)

help plz

please add signed release apks

as the situation of when f-droid will be able to fix their infra and update the keys for this app is still uncertain, and you have the official keys, could you please just upload the signed apk to here?
it's MUCH nicer being able to auto-update ALL other termux addons, and termux itself, over having to MANUALLY check for app updates AND installing test-key versions which anyone could potentially misuse (tricking you into installing it)...
way nicer when you have to check ONLY this plugin's updates manually...

it's been quite a while since the fdroid issues started, and it's apparently blocked by some internal reorganization of their own stuff, which has no clear timeline (last I checked some time ago), so would be nice to do gui scripts without resorting to having to manually check for updates for every plugin (not aware of any automatic script), or letting anyone add a secret plugin (in any of the apk one might download from somewhere, including third-party fdroid repos, or self-updaters of some apps on github which prompt to install updates directly, there's a tiny chance they might for whatever reason, be evil...even tho extremely unlikely...)

How to make soft keyboard work with SurfaceView?

I'm wondering how to toggle on the soft keyboard and receive key event from it so that I can draw texts to the SurfaceView?

I have created a SurfaceView with keyboard=true and sent RequestFocusRequest with forcesoft=true, what else should I do?

Request: more detailed KeyEvent

Currently Termux:GUI sends the same KeyEvent either on ACTION_DOWN or ACTION_UP, I'd like to be able to get more detailed KeyEvent to differentiate between them, and it would be nice to have RepeatCount and FLAG field, thank you.

Function request: clearFocus

I notice that there is no function to clear view's focus(please correct me if i am wrong), so I run into a problem :

  1. create an Activity with interceptBackButton=true and receive it's BackButtonEvent;
  2. create a single SurfaceView with keyboard=true;
  3. request SufaceView's focus and the soft keyboard shows;
  4. use back key or Activity's HideSoftKeyboardRequest to hide the soft keyboard;

as a result, I still receive keyevent with code 4(go back) instead of BackButtonEvent when pressing the back key. So maybe a function like clearFocus or hideSoftInputFromWindow is needed to stop view's keyevent I think.

SVID_20240213_231454_1.mp4

Problem in android 13

When it open android package installer its all working good, but in the app installation, termux:gui is having conflicts with termux app and it don't installs
Screenshot_20240123-132112.png

[question] How to integrate SurfaceView to make a gui for mpv

Hello, your project is very promising to me because I want to make a simple gui for mpv inside termux.
Currently, mpv only need the id to android.view.Surface to play its video through the option --wid=<ID>:

On  Android,  the  ID  is  interpreted as android.view.Surface.
Pass it as a value cast to intptr_t.
Use with --vo=mediacodec_embed and  --hwdec=mediacodec for  direct  rendering  using  MediaCodec,
or  with  --vo=gpu   --gpu-context=android (with or without --hwdec=mediacodec-copy).

Could you tell me how to integrate a SurfaceView?
In this way I can return the Surface id from its SurfaceHolder.Callback.

Would it be as simple as adding a TextView?

Leveraging react/svelte native?

Hi, I just notice this project and I really love the idea of gui from termux programs.

A lot of work is been put into view binding work with c/c++/python, it make me think that React Native, or similar projects like svelte native, did similar stuff binding java side ui api with javascript. The binding works could be very similar to this project.

Would you consider leveraging their work and put some integration with termux-gui and reacte/svelte native, or even flutter? If this could be done, then gui development in termux could be much easier. We can even run a lot of github react native projects directly without very little modifications.

base-64 error

I tried running an example from the examples. The example was the files one.
I found this error in the termyx-gui logcat:

07-05 08:12:11.809 21783 22852 W System.err: java.lang.IllegalArgumentException: bad base-64
07-05 08:12:11.810 21783 22852 W System.err: 	at android.util.Base64.decode(Base64.java:163)
07-05 08:12:11.810 21783 22852 W System.err: 	at android.util.Base64.decode(Base64.java:138)
07-05 08:12:11.810 21783 22852 W System.err: 	at android.util.Base64.decode(Base64.java:120)
07-05 08:12:11.810 21783 22852 W System.err: 	at com.termux.gui.protocol.json.v0.HandleActivityAndTask$Companion$handleActivityTaskMessage$6.invoke(HandleActivityAndTask.kt:114)
07-05 08:12:11.811 21783 22852 W System.err: 	at com.termux.gui.protocol.json.v0.HandleActivityAndTask$Companion$handleActivityTaskMessage$6.invoke(HandleActivityAndTask.kt:107)
07-05 08:12:11.811 21783 22852 W System.err: 	at com.termux.gui.protocol.shared.v0.V0Shared$Companion$runOnUIThreadActivityStarted$1$1.invokeSuspend(V0Shared.kt:247)
07-05 08:12:11.811 21783 22852 W System.err: 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
07-05 08:12:11.811 21783 22852 W System.err: 	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
07-05 08:12:11.811 21783 22852 W System.err: 	at android.os.Handler.handleCallback(Handler.java:938)
07-05 08:12:11.811 21783 22852 W System.err: 	at android.os.Handler.dispatchMessage(Handler.java:99)
07-05 08:12:11.811 21783 22852 W System.err: 	at android.os.Looper.loopOnce(Looper.java:226)
07-05 08:12:11.811 21783 22852 W System.err: 	at android.os.Looper.loop(Looper.java:313)
07-05 08:12:11.811 21783 22852 W System.err: 	at android.app.ActivityThread.main(ActivityThread.java:8669)
07-05 08:12:11.811 21783 22852 W System.err: 	at java.lang.reflect.Method.invoke(Native Method)
07-05 08:12:11.811 21783 22852 W System.err: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
07-05 08:12:11.811 21783 22852 W System.err: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

this was the output of the script (the stacktrace):

Traceback (most recent call last):
  File "/data/data/com.termux/files/home/termux-gui/./files.in", line 41, in <module>
    layout = tg.LinearLayout(a)
             ^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/usr/lib/python3.11/site-packages/termuxgui/linearlayout.py", line 16, in __init__
    ViewGroup.__init__(self, activity, activity.c.send_read_msg({"method": "createLinearLayout", "params": args}))
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/usr/lib/python3.11/site-packages/termuxgui/connection.py", line 145, in send_read_msg
    return self.__read_msg()
           ^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/usr/lib/python3.11/site-packages/termuxgui/connection.py", line 138, in __read_msg
    return tgmsg.read_msg(self._main)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/usr/lib/python3.11/site-packages/termuxgui/msg.py", line 11, in read_msg
    read = s.recv(togo)
           ^^^^^^^^^^^^
ConnectionResetError: [Errno 104] Connection reset by peer

here is a pastebin of the complete logcat.

demo test3.py cannot display image

[~]$ python test3.py 1.png
Traceback (most recent call last):
  File "/data/data/com.termux/files/home/test3.py", line 11, in <module>
    with open("icon.png","rb") as f:
FileNotFoundError: [Errno 2] No such file or directory: 'icon.png'

delete line 11

[~]$ python test3.py 1.png
/data/data/com.termux/files/usr/bin/sh: 1: identify: not found
Traceback (most recent call last):
  File "/data/data/com.termux/files/home/test3.py", line 50, in <module>
    sock.bind("\0test")
OSError: [Errno 98] Address already in use

.

.

Nodejs example

I want nodejs example to how set UnixSocket and pass it to Termux:GUI...

Provide instructions for root-forced installation to overcome the f-droid signing problem

/This looks like a great framework for development of miniapps that rely on both Termux and the standard Android gui hooks. Unfortunately, it is being held back by the lack of an f-droid signed package to provide support for sharedUID.

The solution proposed in the readme is to uninstall F-droid Termux and install the Github version. However, this results in the user losing updates; most people won't go back to Github for updates and will end up with an out of date, insecure Termux on their system after a while. Its also a giant pain in the butt.

Can I request that you provide instructions for installing the APK as root and bypassing the signature check? An alternative would be to identify the files from the APK that can be placed (as root) in /data/data/ manually and their user changed.

There are apps such as LuckyPatcher which promise to do this, but they add an extra layer of complexity and potential security issues.

Unable to install

My phone: realme c21 (rooted). I tried to install from f-droid, but installation failed. I also tried through /system/bin/pm but still no result
Screenshot_2022-02-28-08-54-36-30_66a3b1c2c181ff92b8bf945e748b6fb7
Screenshot_2022-02-28-08-53-48-28_84d3000e3f4017145260f7618db1d683

App install error

Installing on a pixel 3a with termux and the termux:styling plugin results in the error "App not installed as package conflicts with an existing package

"setBackgroundColor" is not working

Hi, I was testing Termux-gui API and discovered setBackgroundColor was not working as intended. (For example, if I create a text view and use set background color to change it to white, it wont work.). This issue also affects test15.py

"App not installed " issue on Android 11 ( redmi note 10 )

Kindly Solve this issue and give update

image

  • when i download and installed from F-Droid website
  • i tried uninstall Termux and Termux:API and install Termux:GUI, then it installed without any error .
  • Solve this problem and please give a update for this issue .

[question]How to integrate SDL2

It's not an issue just asking for help, because I haven't studied your project in depth yet

I wonder if it is possible to support SDL2 with c/c++, I have seen someone using termux-gui and ffplay.py to play video.

How to send/recv protobuf data?

It works in json but fails in protobuf.

json: https://github.com/rsuu/tgup/blob/8f2fb77e994f4a75e091e62c772d25657905920f/src/main.rs#L60

protobuf:

fn new_proto() {
    // success: Display `cconnections: 1`
    let tgui = Tgui::new(tgui::connection::ProtocolType::Proto);

    let msg = {
        let activity = NewActivityRequest {
            tid: -1,
            r#type: ActivityType::Normal.into(),
            intercept_back_button: false,
        };
        let method = Method {
            method: Some(method::Method::NewActivity(activity)),
        };

        method.encode_to_vec()
    };

    // msg:
    // [
    // 130, 1, 11, 8,
    // 255, 255, 255, 255,
    // 255, 255, 255, 255,
    // 255, 1
    // ]
    //
    dbg!(&msg);
    // let len = (msg.len() as u32).to_be_bytes();
    // tgui.send_msg(&len[..]);

    // failed: nothing happened :(
    tgui.send_msg(msg.as_slice());

    // https://github.com/termux/termux-gui/blob/4cf436042f3f1cdf7ecf7f1b344ee9f70dc01733/app/src/main/java/com/termux/gui/protocol/protobuf/v0/HandleActivity.kt#L35
    // https://github.com/tareksander/termux-gui-c-bindings/blob/ee285bca72a3102fd02a187f19f854cef68bf43f/src/activity.cpp#L6
}

conflicting names with termux app

i'am trying to install Termux:GUI on redmi 4x with installed termux app, but cannot to install.
the install will work if remove termux app first and then install gui termux, and ther install termux again, and the installation process work fine.
i think this a bad idea, because the termux:GUI app making me to work hard only for succes install lol.
Package Manager Log: unable to install, app with some name has already installed.
image screenshot :
termux-gui-err
↓↓↓↓

App can not be installed. Honor 9X

I have honor 9X and I wanted to try this app but it is not installing. This is probably something to do with architecture.

(Translation: "Aplikaci nelze nainstalovat" is "Application can not be installed" )
Screenshot_20211127_161239_com google android packageinstaller

Questions regarding this project

Hi, I have some questions regarding this project.

  1. Using Rust, I want to make a GUI application using either conrod or iced GUI library. Is it easily portable to termux-gui?
  2. Do I have to compile it for Android ARM processor? Or what would I do to compile it?
  3. Is it possible to have like some sort of a shortcut to my launcher for the GUI Linux application that will automatically launch it as soon as I press it?
  4. If I have scrollable content that can be scrolled only using the mouse wheel on Linux, then if I run it on Android (through termux-gui) would I be able to scroll using the touch screen?
  5. Am I expecting things to be difficult to configure, and have a lot of breakage?

unable to install

Screenshot_20220307-224336_Package installer

Linux localhost 4.19.152-perf-22611703-abM426BXXS3AVA1 #1 SMP PREEMPT Tue Jan 11 14:40:34 KST 2022 aarch64 Android

Cannot install by myself signed.

Because Termux did not provide a pre-compiled package before, and I added two fonts to the Styling plugin, so I have always used the APK editor to sign by myself. But now not only the GUI plugin cannot be installed, the latest version of the Widget, the API plug-in is also cannot be installed.

here is my info

## Termux App Info

**APP_NAME**: `Termux`  
**PACKAGE_NAME**: `com.termux`  
**VERSION_NAME**: `0.118.0`  
**VERSION_CODE**: `118`  
**TARGET_SDK**: `28`  
**IS_DEBUGGABLE_BUILD**: `false`  
**APK_RELEASE**: `Unknown`  
**SIGNING_CERTIFICATE_SHA256_DIGEST**: `A40DA80A59D170CAA950CF15C18C454D47A39B26989D8B640ECD745BA71BF5DC`  
##


## Termux:API App Info

**APP_NAME**: `Termux:API`  
**PACKAGE_NAME**: `com.termux.api`  
**VERSION_NAME**: `0.49`  
**VERSION_CODE**: `49`  
**TARGET_SDK**: `28`  
**IS_DEBUGGABLE_BUILD**: `false`  
**APK_RELEASE**: `Unknown`  
**SIGNING_CERTIFICATE_SHA256_DIGEST**: `A40DA80A59D170CAA950CF15C18C454D47A39B26989D8B640ECD745BA71BF5DC`  
##


## Termux:Styling App Info

**APP_NAME**: `Termux:Styling`  
**PACKAGE_NAME**: `com.termux.styling`  
**VERSION_NAME**: `0.29`  
**VERSION_CODE**: `29`  
**TARGET_SDK**: `28`  
**IS_DEBUGGABLE_BUILD**: `false`  
**APK_RELEASE**: `Unknown`  
**SIGNING_CERTIFICATE_SHA256_DIGEST**: `A40DA80A59D170CAA950CF15C18C454D47A39B26989D8B640ECD745BA71BF5DC`  
##


## Termux:Widget App Info

**APP_NAME**: `Termux:Widget`  
**PACKAGE_NAME**: `com.termux.widget`  
**VERSION_NAME**: `0.12`  
**VERSION_CODE**: `12`  
**TARGET_SDK**: `28`  
**IS_DEBUGGABLE_BUILD**: `false`  
**APK_RELEASE**: `Unknown`  
**SIGNING_CERTIFICATE_SHA256_DIGEST**: `A40DA80A59D170CAA950CF15C18C454D47A39B26989D8B640ECD745BA71BF5DC`  
##


## Device Info

### Software

**OS_VERSION**: `4.19.113-perf-g18f438a3f5fe`  
**SDK_INT**: `30`  
**RELEASE**: `11`  
**ID**: `RKQ1.200826.002`  
**DISPLAY**: `RKQ1.200826.002 test-keys`  
**INCREMENTAL**: `V12.5.7.0.RJSCNXM`  
**SECURITY_PATCH**: `2022-01-01`  
**IS_DEBUGGABLE**: `0`  
**IS_TREBLE_ENABLED**: `true`  
**TYPE**: `user`  
**TAGS**: `release-keys`  

### Hardware

**MANUFACTURER**: `Xiaomi`  
**BRAND**: `Redmi`  
**MODEL**: `M2007J17C`  
**PRODUCT**: `gauguinpro`  
**BOARD**: `gauguinpro`  
**HARDWARE**: `qcom`  
**DEVICE**: `gauguinpro`  
**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi`  
##


## Important Links

### Github

[Termux](https://github.com/termux/termux-app)  
[Termux:API](https://github.com/termux/termux-api)  
[Termux:Boot](https://github.com/termux/termux-boot)  
[Termux:Float](https://github.com/termux/termux-float)  
[Termux:Styling](https://github.com/termux/termux-styling)  
[Termux:Tasker](https://github.com/termux/termux-tasker)  
[Termux:Widget](https://github.com/termux/termux-widget)  
[termux-packages](https://github.com/termux/termux-packages)  

### Email

[[email protected]](mailto:[email protected])  

### Reddit

[r/termux](https://www.reddit.com/r/termux)  

### Wiki

[Termux Wiki](https://wiki.termux.com)  
[Termux](https://github.com/termux/termux-app/wiki)  
[termu## Termux App Info

**APP_NAME**: `Termux`  
**PACKAGE_NAME**: `com.termux`  
**VERSION_NAME**: `0.118.0`  
**VERSION_CODE**: `118`  
**TARGET_SDK**: `28`  
**IS_DEBUGGABLE_BUILD**: `false`  
**APK_RELEASE**: `Unknown`  
**SIGNING_CERTIFICATE_SHA256_DIGEST**: `A40DA80A59D170CAA950CF15C18C454D47A39B26989D8B640ECD745BA71BF5DC`  
##


## Termux:API App Info

**APP_NAME**: `Termux:API`  
**PACKAGE_NAME**: `com.termux.api`  
**VERSION_NAME**: `0.49`  
**VERSION_CODE**: `49`  
**TARGET_SDK**: `28`  
**IS_DEBUGGABLE_BUILD**: `false`  
**APK_RELEASE**: `Unknown`  
**SIGNING_CERTIFICATE_SHA256_DIGEST**: `A40DA80A59D170CAA950CF15C18C454D47A39B26989D8B640ECD745BA71BF5DC`  
##


## Termux:Styling App Info

**APP_NAME**: `Termux:Styling`  
**PACKAGE_NAME**: `com.termux.styling`  
**VERSION_NAME**: `0.29`  
**VERSION_CODE**: `29`  
**TARGET_SDK**: `28`  
**IS_DEBUGGABLE_BUILD**: `false`  
**APK_RELEASE**: `Unknown`  
**SIGNING_CERTIFICATE_SHA256_DIGEST**: `A40DA80A59D170CAA950CF15C18C454D47A39B26989D8B640ECD745BA71BF5DC`  
##


## Termux:Widget App Info

**APP_NAME**: `Termux:Widget`  
**PACKAGE_NAME**: `com.termux.widget`  
**VERSION_NAME**: `0.12`  
**VERSION_CODE**: `12`  
**TARGET_SDK**: `28`  
**IS_DEBUGGABLE_BUILD**: `false`  
**APK_RELEASE**: `Unknown`  
**SIGNING_CERTIFICATE_SHA256_DIGEST**: `A40DA80A59D170CAA950CF15C18C454D47A39B26989D8B640ECD745BA71BF5DC`  
##


## Device Info

### Software

**OS_VERSION**: `4.19.113-perf-g18f438a3f5fe`  
**SDK_INT**: `30`  
**RELEASE**: `11`  
**ID**: `RKQ1.200826.002`  
**DISPLAY**: `RKQ1.200826.002 test-keys`  
**INCREMENTAL**: `V12.5.7.0.RJSCNXM`  
**SECURITY_PATCH**: `2022-01-01`  
**IS_DEBUGGABLE**: `0`  
**IS_TREBLE_ENABLED**: `true`  
**TYPE**: `user`  
**TAGS**: `release-keys`  

### Hardware

**MANUFACTURER**: `Xiaomi`  
**BRAND**: `Redmi`  
**MODEL**: `M2007J17C`  
**PRODUCT**: `gauguinpro`  
**BOARD**: `gauguinpro`  
**HARDWARE**: `qcom`  
**DEVICE**: `gauguinpro`  
**SUPPORTED_ABIS**: `arm64-v8a, armeabi-v7a, armeabi`  
##

APK signatures does not match

I am using Termux version 0.118.0
The signature does not match.
I tried every apk file from release with no luck.

Zoom ImageView

Hello! How can I zoom in and zoom out image in ImageView? Can you help me, please

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.