The installer reaches the end, then closes with a plain App not installed message and no explanation. Android is suppressing the specific reason. These are the causes, in the order they are most likely to be yours.
Android refuses to install a package whose version code is lower than the installed one. This is the most common cause when you re-download an app you already have. Compare the file against the installed version — if the file is older, uninstall first, or install the newer build instead.
Updates must be signed by the same key as the app already on the device. If a developer rotated keys badly, or the file you downloaded is not the developer's build, Android reports it as a plain install error. Uninstalling first will let it install — but if the key differs because someone repackaged the app, do not do that trade for a banking or messaging app.
Android reports low storage poorly, and the extractor runs out of room mid-install. Free several hundred megabytes rather than a few. For an app whose compressed size sits close to your free space, you need roughly the unpacked size available.
On devices with app cloning, dual apps or a work profile, installing the same package into two profiles can conflict. Remove the clone, install once, then re-clone.
A truncated APK fails during extraction. Compare the downloaded file's size against the size stated on the listing page — if they differ, re-download. Verify the checksum when the source publishes one; that is the fastest way to separate corruption from a configuration problem.
If you granted your file manager install rights and then revoked them or cleared its data, the install silently fails. Re-grant Allow from this source and try again.
Android writes install failures to the system log. With developer options enabled, filter logcat for PackageManager — the line states the actual reason, such as INSTALL_PARSE_FAILED or INSTALL_FAILED_OLDER_SDK, which points straight at one of the causes above.