android 15 blocks some older apps from being installed altogether. That includes the live wallpaper. I have been using it for years and wanted to continue using it.
I couldn't find the original source repo, only related code. This is a java applet made by the same creator, based on the android live wallpaper: https://github.com/cmatsuoka/asciiquarium-applet This is the original perl source code: https://github.com/cmatsuoka/asciiquarium
We actually don't need to do much to get it working again. The only reason modern android rejects the install is because of the absence of the minimum android SDK version defined in the android manifest in the SDK.
to fix that we need:
- adb - to install the app, you can also copy the SDK to the phone if you prefer
- apktool - to unpack and repack the APK
- apksigner
- keytool (part of JDK)
I am using nixos, so I did this to install the packages into a new temporary shell:
nix-shell -p adb apktool apksigner openjdk- We start by extracting the app:
apktool d org.helllabs.android.asciiquarium_1.3.apk- Now we need to edit the AndroidManifest.xml in the extracted folder to add the minSdkVersion. The resulting file should look something like this.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.helllabs.android.asciiquarium">
<!-- This is the important part!! The following line specifies the SDK versions -->
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="24" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:enabled="true" android:icon="@drawable/icon" android:label="@string/app_name" android:name="LiveWallpaperService" android:permission="android.permission.BIND_WALLPAPER">
<intent-filter android:priority="1">
<action android:name="android.service.wallpaper.WallpaperService"/>
</intent-filter>
<meta-data android:name="android.service.wallpaper" android:resource="@xml/wallpaper"/>
</service>
<activity android:exported="true" android:label="@string/app_name" android:name=".Settings"/>
</application>
</manifest>- now we need to package the app up into a apk again.
apktool b org.helllabs.android.asciiquarium_1.3 -o org.helllabs.android.asciiquarium_1.3_modern.apk- The app isn't correctly signed now since we did some changes. We need to sign it. To do that we use keytool to generate signing keys.
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias- Now we can use apksigner to sign our new APK.
apksigner sign --ks my-release-key.jks --out org.helllabs.android.asciiquarium_1.3_modern_signed.apk org.helllabs.android.asciiquarium_1.3_modern.apkthats it. install it via adb using
adb install org.helllabs.android.asciiquarium_1.3_modern_signed.apk or copy it to your phone and install it normally.