Posts: 1
Threads: 0
Thanks Received: 0 in 0 posts
Thanks Given: 0
Joined: Jun 2025
Good day,
Not sure if I'm doing this correctly. I am seeking assistance with installing the modded APK on a One plus 12 running Android 15.
I tried installing with Shizuku, however I received an error that I am assuming is a compatibility error.
Can I be provided with instructions on how to install on a One plus 12 running Android 15.
Posts: 334
Threads: 87
Thanks Received: 179 in 104 posts
Thanks Given: 201
Joined: Sep 2014
22-06-2025, 12:42 PM
(This post was last modified: 22-06-2025, 01:01 PM by MangaD. Edited 3 times in total.
Edit Reason: Add markdown block
)
(22-06-2025, 07:07 AM)Cr7mb Wrote: Good day,
Not sure if I'm doing this correctly. I am seeking assistance with installing the modded APK on a One plus 12 running Android 15.
I tried installing with Shizuku, however I received an error that I am assuming is a compatibility error.
Can I be provided with instructions on how to install on a One plus 12 running Android 15.
Hello @ Cr7mb,
Thank you very much for your post and for the detailed information regarding the error that you are receiving. Thanks to your details, I was able to figure out the problem, but unfortunately, unable to solve it.
Your phone—OnePlus 12 [1][2]—uses a 64-bit CPU architecture and, in your case, Android 15.
After some googling, it appears that there are some issues with 32-bit app compatibility for your device.
Different Android devices use different CPUs, which in turn support different instruction sets. Each combination of CPU and instruction set has its own Application Binary Interface (ABI). The currently supported ABIs for Android are: armeabi-v7a
arm64-v8a
x86
x86_64
Unfortunately, HFX ships only support for armeabi-v7a , which is for 32-bit ARM CPUs. In order for this app to work with your device, one of two conditions should be met:
- Your device supports 32-bit apps (which should be the case, but we have to verify it)
- The app provides support for
arm64-v8a (which, unfortunately, I cannot do—explained below)
For curious and hacky minds, below are the fruits of my investigation for the conditions mentioned above:
Is it possible to add an abi to an old apk which the developer no longer maintains? When opening the apk file I see the lib/armeabi-v7a directory. I'd like to add more architectures, such as lib/x86_64 . Is there a reverse engineering way of doing this?
Adding new architecture support (like x86_64 ) to an old, unmaintained APK is technically possible but challenging and involves reverse engineering. The lib/armeabi-v7a directory indicates the APK currently supports 32-bit ARM devices. Adding a new architecture like x86_64 requires native libraries (.so files) compiled for that architecture, which you likely don’t have since the developer no longer maintains the app. Here’s a breakdown of the process, challenges, and considerations:
Process Overview
- Decompile the APK: Use tools like APKTool or Jadx to extract the APK’s contents, including the
AndroidManifest.xml , resources, and native libraries.
- Analyze Native Libraries: Check the
lib/armeabi-v7a directory for .so files. These are the native libraries for ARMv7. You need equivalent .so files for x86_64 .
- Obtain or Rebuild Native Libraries:
- If the app uses open-source libraries, find or compile
x86_64 versions of those libraries.
- If the libraries are proprietary, you’d need to reverse-engineer or recreate them, which is complex and may require significant expertise.
- Add New Architecture:
- Create a
lib/x86_64 directory in the APK structure.
- Place the
x86_64 .so files in this directory, ensuring they match the names and versions of the armeabi-v7a libraries.
- Rebuild the APK: Use APKTool to repackage the modified APK.
- Sign the APK: Sign the rebuilt APK with a new key using apksigner or jarsigner, as the original developer’s signature will no longer be valid.
- Test the APK: Install and test the APK on an
x86_64 device or emulator to ensure compatibility.
Tools Needed
- APKTool: For decompiling and rebuilding the APK.
- Jadx or dex2jar: For decompiling Java/Kotlin code to inspect the app’s logic.
- Android NDK: To compile native libraries for
x86_64 if source code is available.
- apksigner or jarsigner: For signing the modified APK.
- Android Studio/Emulator: For testing on different architectures.
Challenges
- Missing Native Libraries:
- Without the source code or precompiled
x86_64 libraries, you’d need to recreate the .so files. This could involve reverse-engineering the armeabi-v7a libraries using tools like Ghidra or IDA Pro, which is time-consuming and requires advanced knowledge.
- If the libraries are proprietary, recreating them may violate copyright or licensing terms.
- Library Dependencies:
- Native libraries often depend on specific versions of other libraries or system APIs. Ensuring compatibility for
x86_64 can be difficult.
- JNI Compatibility:
- The app’s Java/Kotlin code interacts with native libraries via JNI (Java Native Interface). You must ensure the
x86_64 libraries expose the same functions and signatures as the armeabi-v7a versions.
- App Behavior:
- Some apps include architecture-specific logic in their Java/Kotlin code. Adding
x86_64 support may require modifying the decompiled code, which can introduce bugs.
- Legal and Ethical Issues:
- Modifying and redistributing an APK without permission may violate the app’s terms of service or intellectual property laws. Ensure you have the right to modify the APK (e.g., for personal use or with permission).
- Performance and Testing:
- The modified APK may crash or behave unexpectedly on
x86_64 devices if the new libraries are not perfectly compatible. Thorough testing is essential.
Alternative Approaches
- Use an Emulator:
- Instead of modifying the APK, run it on an
x86_64 device using an emulator or compatibility layer (e.g., Android’s built-in ARM translation layer). Modern Android devices often include ARM-to-x86 translation, though it may impact performance.
- Check for Updates or Alternatives:
- Search for newer versions of the app or similar apps that support
x86_64 . Check posts on X or forums for community patches or unofficial updates.
- Wrapper Libraries:
- If the native libraries are simple, you could create wrapper
.so files for x86_64 that translate calls to the armeabi-v7a libraries via a compatibility layer. This is complex and requires deep knowledge of both architectures.
Step-by-Step Example (High-Level)
- Decompile the APK:
apktool d app.apk
This creates a folder with the APK’s contents.
- Inspect Libraries:
Check
app/lib/armeabi-v7a for .so files (e.g., libexample.so ).
- Compile
x86_64 Libraries (if source available):
Use the Android NDK to build x86_64 versions:
ndk-build APP_ABI=x86_64
- Add Libraries:
Create
app/lib/x86_64 and copy the x86_64 .so files there.
- Rebuild the APK:
apktool b app
- Sign the APK:
Generate a key and sign:
keytool -genkey -v -keystore mykey.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
apksigner sign --ks mykey.keystore app/dist/app.apk
- Test:
Install on an
x86_64 emulator or device:
adb install app.apk
Recommendations
- If you’re not experienced with reverse engineering or native code, this process can be daunting. Consider seeking help from communities on X, Reddit (e.g., r/androiddev), or reverse-engineering forums.
- If the app is critical, explore open-source alternatives that support
x86_64 natively.
- Always back up the original APK and work in a clean environment to avoid accidental data loss.
Legal Note
Modifying an APK without permission may violate laws or terms of service, especially if you distribute the modified version. Proceed only for personal use or with explicit permission from the developer.
If you need specific guidance on any step (e.g., decompiling or compiling libraries), let me know, and I can provide more detailed instructions!
The .so files in the lib/armeabi-v7a directory are:
- libCore.so
- libc++_shared.so
- libysshared.so
- libc++.so
The .so files you listed in the lib/armeabi-v7a directory (libAppCore.so , libc++_shared.so , libysshared.so , libc++.so ) provide some clues about the APK’s native dependencies. To add support for a new architecture like x86_64 , you need equivalent .so files for that architecture. Below, I’ll analyze each file, outline the process to add x86_64 support, and address reverse-engineering options, assuming the app is unmaintained.
Analysis of .so Files
libAppCore.so :
- Likely a custom library containing the app’s core native functionality.
- Without source code, creating an
x86_64 version requires reverse-engineering this library or obtaining it from an alternative source (e.g., a newer version of the app).
libc++_shared.so :
- This is the shared C++ Standard Library used by apps built with the Android NDK. It’s a standard library, so you can obtain an
x86_64 version from the Android NDK.
- Ensure the version matches the one in
armeabi-v7a to avoid compatibility issues.
libysshared.so :
- Likely another custom or third-party library specific to the app (possibly obfuscated or proprietary).
- Similar to
libAppCore.so , you’ll need to reverse-engineer or source an x86_64 version.
libc++.so :
- This appears to be a static or alternative version of the C++ Standard Library. It’s less common to see both
libc++.so and libc++_shared.so in the same APK, so verify their roles (e.g., one might be a legacy or misnamed file).
- Like
libc++_shared.so , an x86_64 version can likely be sourced from the NDK.
Steps to Add x86_64 Support
-
Decompile the APK:
Use APKTool to extract the APK’s contents:
apktool d app.apk
This creates a folder (app ) with lib/armeabi-v7a and other files.
-
Source x86_64 Libraries:
- For
libc++_shared.so and libc++.so :
- Download the Android NDK (e.g., r26 or earlier, matching the app’s API level if known).
- Find
x86_64 versions in NDK_PATH/toolchains/llvm/prebuilt/<platform>/sysroot/usr/lib/x86_64-linux-android/ .
- Copy the appropriate versions (ensure ABI and API level compatibility).
- For
libAppCore.so and libysshared.so :
- Option 1: Check for Existing Libraries:
- Search for newer versions of the app or related APKs that support
x86_64 . Extract their lib/x86_64 directories.
- Check open-source repositories or X posts for community forks or patches.
- Option 2: Rebuild from Source (if available):
- If the app or its libraries are open-source, locate the source code (e.g., on GitHub).
- Use the NDK to compile for
x86_64 :
ndk-build APP_ABI=x86_64
- Option 3: Reverse-Engineer:
- Use tools like Ghidra or IDA Pro to analyze
libAppCore.so and libysshared.so .
- Reimplement the functionality in C/C++ and compile for
x86_64 . This is complex, requiring expertise in assembly, JNI, and the app’s logic.
- Alternatively, create wrapper libraries that translate
armeabi-v7a calls to x86_64 , but this is error-prone.
-
Add x86_64 Libraries:
- Create a
lib/x86_64 directory in the decompiled APK (app/lib/x86_64 ).
- Place the
x86_64 .so files (libAppCore.so , libc++_shared.so , libysshared.so , libc++.so ) in this directory, ensuring identical names and compatible versions.
-
Update APK Configuration (if needed):
- Check
AndroidManifest.xml or apktool.yml for ABI restrictions (e.g., abiFilters in the original build).
- If the app explicitly limits ABIs, modify the manifest or smali code to allow
x86_64 . Use Jadx to inspect the decompiled Java/Kotlin code for ABI checks.
-
Rebuild the APK:
Repackage the APK using APKTool:
apktool b app
This generates app/dist/app.apk .
-
Sign the APK:
Since the original signature will be invalid, create a new key and sign:
keytool -genkey -v -keystore mykey.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
apksigner sign --ks mykey.keystore app/dist/app.apk
-
Test the APK:
Install on an x86_64 device or emulator:
adb install app/dist/app.apk
Test thoroughly, as mismatched libraries or JNI issues may cause crashes.
Reverse-Engineering Considerations
- Analyzing
libAppCore.so and libysshared.so :
- Load these files into Ghidra or IDA Pro to inspect their functions and JNI bindings.
- Identify dependencies (e.g.,
libc++_shared.so ) and exported functions called by the app’s Java/Kotlin code.
- Reimplementing these libraries for
x86_64 requires understanding their purpose (e.g., graphics, networking, or crypto).
- JNI Compatibility:
- Use Jadx to decompile the APK’s DEX files and locate JNI calls (e.g.,
System.loadLibrary or native method declarations).
- Ensure the
x86_64 libraries expose the same JNI functions as the armeabi-v7a versions.
- Challenges:
- Reverse-engineering proprietary libraries is time-intensive and may require debugging crashes on
x86_64 devices.
- Obfuscated code or anti-tampering mechanisms could complicate modifications.
Alternative Solutions
- ARM Translation:
- Many
x86_64 Android devices (e.g., emulators or Intel-based tablets) include ARM translation (via libhoudini or similar). Test the unmodified APK on an x86_64 device to see if it runs without changes.
- Community Resources:
- Search X or forums like XDA Developers for patches or unofficial APKs with
x86_64 support.
- Example X search: “app name x86_64 apk” or “app name native library patch.”
- Emulation:
- Run the app in an ARM emulator (e.g., Android Studio’s AVD with ARM64 or ARMv7 images) instead of modifying it.
Legal and Ethical Notes
- Modifying the APK, especially proprietary libraries, may violate the app’s license or local laws. Proceed only for personal use or with permission.
- Distributing the modified APK could infringe on intellectual property rights.
Recommendations
- Start by sourcing
x86_64 versions of libc++_shared.so and libc++.so from the NDK, as these are standard.
- For
libAppCore.so and libysshared.so , check for open-source versions or community patches before attempting reverse-engineering.
- If reverse-engineering is necessary, begin with Ghidra to analyze the libraries and focus on their JNI interfaces.
- Test incrementally (e.g., add one library at a time) to isolate issues.
If you need help with a specific step (e.g., extracting NDK libraries, using Ghidra, or debugging JNI), let me know, and I can provide detailed guidance!
Unfortunately, libCore.so and libysshared.so are not open source. Is there a way for an Android device with 64-bit architecture to run an apk that contains only lib/armeabi-v7a ?
Yes, an Android device with a 64-bit architecture can often run an APK that contains only lib/armeabi-v7a (32-bit ARMv7a libraries) due to Android’s compatibility features, but success depends on the device, Android version, and app requirements. Since libCore.so and libysshared.so are not open-source, modifying the APK to add x86_64 support is complex, so leveraging compatibility layers is a better approach. Here’s how it works and what you can try:
How 64-bit Devices Handle 32-bit APKs
- 32-bit ABI Support:
- Most 64-bit Android devices support 32-bit apps via a dual-ABI setup (e.g.,
arm64-v8a and armeabi-v7a ). The system loads the armeabi-v7a libraries when running the 32-bit app.
- Android 10 (API 29) and later deprecated 32-bit-only apps, but many devices still include 32-bit runtime support for backward compatibility.
- ARM Translation Layer:
- On
x86_64 devices (e.g., Intel-based Android tablets or emulators), Android often includes an ARM-to-x86 translation layer (e.g., libhoudini for ARM emulation).
- This layer translates
armeabi-v7a instructions to x86_64 , allowing the app to run without native x86_64 libraries.
- NDK Compatibility:
- The app’s libraries (
libCore.so , libysshared.so , libc++_shared.so , libc++.so ) are built for armeabi-v7a . If they don’t rely on 64-bit-specific features, they should work on a 64-bit device.
Steps to Run the APK on a 64-bit Device
- Check Device Compatibility:
- Verify your device’s architecture:
adb shell getprop ro.product.cpu.abi
If it returns arm64-v8a , it’s a 64-bit ARM device. If it’s x86_64 , it’s an x86_64 device.
- Check if 32-bit support is available:
adb shell getprop ro.product.cpu.abilist
Look for armeabi-v7a or armeabi in the list.
- Install the APK:
- Enable ARM Translation (for x86_64 Devices):
- If your device is
x86_64 , check if it has an ARM translation layer like libhoudini . Some devices (e.g., Intel-based tablets or emulators) include it by default.
- If missing, you may need to root the device and install a translation layer (e.g.,
libhoudini from XDA Developers or similar sources). This is risky and device-specific.
- Example: For Android emulators, use an
x86_64 image with Google Play support, which often includes ARM translation.
- Test the App:
- Run the app and monitor for crashes or errors using Logcat:
adb logcat
- Common issues include missing dependencies or JNI mismatches, but these are unlikely if the APK works on 32-bit ARM devices.
- Force 32-bit Mode (if needed):
Potential Issues and Workarounds
- No 32-bit Support:
- Some modern devices (e.g., high-end phones on Android 12+) disable 32-bit support to comply with Google Play’s 64-bit requirement. Check your device’s documentation or X posts for confirmation.
- Workaround: Use an emulator with 32-bit support (e.g., Android Studio’s AVD with an
armeabi-v7a or arm64-v8a image).
- Missing Translation Layer (x86_64 Devices):
- If the app fails on an
x86_64 device, it may lack ARM translation. Rooting and adding libhoudini is an option, but it’s complex and not guaranteed.
- Workaround: Test on an ARM64 device instead, as they’re more likely to support
armeabi-v7a natively.
- Library Dependencies:
- If
libCore.so or libysshared.so rely on system libraries unavailable in 64-bit mode, the app may crash. Use Logcat to diagnose.
- Workaround: Mock or stub missing dependencies by modifying the APK, but this requires reverse-engineering.
- Performance:
- ARM translation on
x86_64 devices can be slow. If performance is poor, consider an ARM64 device or emulator.
Alternative Approaches
- Use an Emulator:
- Set up an Android emulator in Android Studio with an
arm64-v8a or armeabi-v7a image. These support 32-bit apps natively.
- Example: Create an AVD with Android 9 (API 28) and
arm64-v8a for best compatibility.
- Older Device:
- Test the APK on an older 32-bit ARM device or a 64-bit device with robust 32-bit support (e.g., running Android 9 or earlier).
- Community Patches:
- Search X or XDA Developers for unofficial APKs or patches for your app. Use terms like “[app name] x86_64” or “[app name] 64-bit compatibility.”
- Example: Some communities provide repacked APKs with added ABIs.
- Contact Developer:
- If possible, check if the developer has an unpublished 64-bit version or plans to release one.
Legal Note
- Modifying the APK (e.g., forcing 32-bit mode) or installing translation layers may violate the app’s terms or local laws. Proceed only for personal use.
- Distributing modified APKs is likely illegal.
Recommendations
- First, try installing the APK on your 64-bit device without changes. If it’s an ARM64 device, it’s likely to work.
- If you have an
x86_64 device, test in an emulator with ARM translation (e.g., Android Studio AVD).
- If the app fails, use Logcat to identify errors before attempting modifications.
- Avoid rooting or adding translation layers unless you’re comfortable with the risks.
If you share your device’s architecture (arm64-v8a or x86_64 ) or Android version, I can tailor the advice further. Let me know if you need help with Logcat, emulator setup, or APK modification!
What if the device is ARM 64-bit? Will is support armeabi-v7a ? This is a OnePlus 12 running Android 15.
A OnePlus 12 with a 64-bit ARM architecture (likely arm64-v8a , powered by the Snapdragon 8 Gen 3) running Android 15 can typically support APKs with only armeabi-v7a libraries, such as those containing libCore.so , libysshared.so , libc++_shared.so , and libc++.so . However, there are nuances to consider due to Android’s evolving 64-bit requirements and device-specific configurations. Below, I’ll explain the compatibility, potential issues, and steps to ensure the APK runs on your device.
Compatibility of armeabi-v7a on a 64-bit ARM Device
- 32-bit ABI Support:
- Most 64-bit ARM Android devices, including the OnePlus 12, support 32-bit apps via the
armeabi-v7a ABI. The Android OS maintains a 32-bit runtime environment alongside the 64-bit one, allowing armeabi-v7a libraries to load natively.
- The OnePlus 12’s
arm64-v8a architecture is backward-compatible with armeabi-v7a , meaning it can execute 32-bit ARM instructions without translation.
- Android 15 Behavior:
- Starting with Android 10 (API 29), Google encouraged 64-bit apps, and Android 15 (API 35) further tightens 32-bit restrictions, especially for apps targeting newer APIs. However, devices still support 32-bit apps for backward compatibility unless explicitly disabled by the manufacturer.
- OxygenOS 15 (OnePlus’s Android 15 implementation) likely retains 32-bit support, as OnePlus devices historically support both 32-bit and 64-bit ABIs.
- Library Compatibility:
- The APK’s libraries (
libCore.so , libysshared.so , libc++_shared.so , libc++.so ) are designed for armeabi-v7a . These should load correctly on the OnePlus 12 unless they rely on deprecated APIs or missing system dependencies.
Steps to Run the APK on Your OnePlus 12
- Verify Device ABIs:
- Confirm the OnePlus 12 supports
armeabi-v7a :
adb shell getprop ro.product.cpu.abilist
You should see arm64-v8a,armeabi-v7a,armeabi in the output.
- If you don’t have ADB, download an app like CPU-Z from the Play Store to check supported ABIs.
- Install the APK:
- Transfer the APK to your OnePlus 12 and install it via a file manager or ADB:
adb install app.apk
- Enable “Install from unknown sources” in Settings > Apps > Special app access if prompted.
- If installation fails, it may indicate an API mismatch (e.g., the app targets an old SDK incompatible with Android 15).
- Test the App:
- Force 32-bit Mode (if needed):
- If the app fails due to 64-bit enforcement, modify the APK to ensure 32-bit library loading:
- Decompile with APKTool:
apktool d app.apk
- Edit
app/AndroidManifest.xml , adding android:extractNativeLibs="true" to the <application> tag:
<application ... android:extractNativeLibs="true">
- Rebuild and sign the APK:
apktool b app
keytool -genkey -v -keystore mykey.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
apksigner sign --ks mykey.keystore app/dist/app.apk
- Install the modified APK:
adb install app/dist/app.apk
- Check for API Compatibility:
- If the app targets an old Android version (e.g., pre-API 24), it may crash on Android 15 due to stricter security or deprecated APIs.
- Use Jadx to inspect the APK’s
AndroidManifest.xml for its minSdkVersion and targetSdkVersion . If targetSdkVersion is too low, you may need to patch the app (advanced reverse-engineering).
Potential Issues and Workarounds
- No 32-bit Support:
- Unlikely, but if OnePlus disabled 32-bit support in OxygenOS 15, the APK won’t run natively.
- Check X posts or OnePlus forums for user reports on 32-bit app compatibility (e.g., search “OnePlus 12 Android 15 32-bit app”).
- Workaround: Use an emulator with 32-bit support (e.g., Android Studio AVD with
arm64-v8a or armeabi-v7a image).
- Library Loading Errors:
- If
libCore.so or libysshared.so depend on deprecated system libraries, they may fail to load.
- Workaround: Analyze errors via Logcat and consider injecting compatible libraries into the APK (requires reverse-engineering).
- JNI Issues:
- If the app’s Java/Kotlin code expects specific behavior from
armeabi-v7a libraries, it may crash.
- Workaround: Use Jadx to inspect JNI calls and ensure compatibility, but this is complex without source code.
- Performance:
- Running 32-bit libraries on a 64-bit device may slightly impact performance, but the OnePlus 12’s hardware should handle it well.
Alternative Approaches
- Android Emulator:
- If the APK fails on the OnePlus 12, run it in an emulator:
- Set up Android Studio with an AVD using an
arm64-v8a image (e.g., Android 9 or 10 for better compatibility).
- Install the APK via ADB.
- Older Device:
- Test the APK on an older Android device with
armeabi-v7a or arm64-v8a support (e.g., running Android 9–12).
- Community Patches:
- Search X or XDA Developers for modified APKs or workarounds for your app. Use terms like “[app name] OnePlus 12” or “[app name] Android 15.”
- Example: XDA may have threads on OxygenOS 15’s 32-bit compatibility.
- Downgrade Android (Risky):
- Downgrading to Android 14 could improve compatibility if Android 15’s restrictions are the issue, but this voids warranties and risks bricking the device. Only attempt with expert guidance.
Legal Note
- Modifying the APK (e.g., forcing 32-bit mode) is for personal use only and may violate the app’s terms or local laws.
- Do not distribute modified APKs, as this could infringe on intellectual property rights.
Recommendations
- Start by installing the unmodified APK on your OnePlus 12. Given its
arm64-v8a architecture and OxygenOS 15, it’s likely to work if the app’s minSdkVersion and targetSdkVersion are compatible.
- If it fails, check Logcat for errors and consider forcing 32-bit mode via APK modification.
- If issues persist, test in an
arm64-v8a emulator or search X/XDA for OnePlus 12-specific advice.
- The OnePlus 12’s hardware and OS make it a strong candidate for running
armeabi-v7a apps, so native execution should be feasible in most cases.
If you encounter specific errors during installation or runtime, share them, and I can guide you through Logcat analysis or APK patching. Let me know if you need help setting up ADB, an emulator, or other tools!
Can you join Discord so we can run some tests together?
![[Image: random.php?pic=random]](https://hf-empire.com/images/banners/random.php?pic=random)
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
The meaning of life is to give life a meaning.
Stop existing. Start living.
|