Насколько я знаю, предотвращение декомпиляции является одной из основных причин использования NDK наряду с улучшением производительности, как упомянул Андрей.Когда дело доходит до ваших вопросов:
1) Вам необходимо убедиться, что вы скомпилировали свой собственный код для всех пяти поддерживаемых ABI, то есть x86
, x86_64
, armeabi
, armeabi-v7a
и arm64-v8a
.
2) Ничто на 100% невозможно декомпилировать, но шансы на успешную декомпиляцию вашего нативного кода намного ниже, чем декомпиляции байт-кода java.
3) Нет необходимости писать C илиC ++ код самостоятельно.Тем не менее, заголовки, содержащие API, который вы хотите предоставить Java, могут быть сгенерированы с помощью javah
.
Android Studio позволяет довольно просто писать небольшие собственные библиотеки и интегрировать их в существующие проекты, вам нужны только самые базовые знанияCMake.