The dependency map shows what can change alone
An application may load one primary library that loads transitive dependencies. Third-party SDKs can include native components that depend on exports or a particular initialization order.
Record library names, direct and transitive dependencies, load entry points, initialization timing, and callers. A change in one SO may otherwise fail only when another library loads later.
- Primary and transitive dependencies
- System and third-party libraries
- Load entry and initialization order
- Earliest failure stage
JNI registration constrains symbol treatment
Static registration relies on naming conventions, while dynamic registration usually binds Java methods to native functions during initialization. They impose different constraints on visibility, renaming, and load timing.
Before changing exports or function representation, identify how every important entry is registered, whether reflection or third-party code calls it, and how both Java and native failures will be diagnosed.
ABI is an execution boundary, not a label
arm64-v8a, armeabi-v7a, and x86_64 use different instructions, linked outputs, and dependencies. A successful build or emulator launch for one ABI does not establish another target architecture.
Inspect the ABIs in the final APK, then verify dependency resolution, application launch, critical JNI calls, error handling, and third-party SDK paths on each target architecture.
- Final package contains target ABI
- Every dependency resolves
- Critical JNI paths repeat
- Uncovered architectures are explicit
Accept protection strength with loading stability
Symbol reduction, string treatment, and function virtualization remove different clues. No single action represents complete native protection, and application launch or frequently executed functions require special performance attention.
Begin with a small set of valuable functions with clear inputs and outputs. Expand scope on the same candidate and keep a recoverable version for every configuration change.
Apply the guidance to a real application
Provide the stack, critical paths, target systems, and current candidate so Yudun can recommend a focused protection and compatibility review.