Size: a a a

Android NDK (C++) — русскоговорящее сообщество

2020 March 10

k

k1ceargy in Android NDK (C++) — русскоговорящее сообщество
Тоже самое получается
источник

0

0x1de in Android NDK (C++) — русскоговорящее сообщество
Ярослав
Никто не будет декопилировать твою либу🌚
Будет или нет это уже другой вопрос. Меня интересует как правильно к этому вопросу подходят пропиетарные  компании
источник

k

k1ceargy in Android NDK (C++) — русскоговорящее сообщество
Ярослав
Так что если твоё приложение не имеет какой то ценности его не будут смотреть
Даже логику очень крутых приложение не могут изменить
источник

Я

Ярослав in Android NDK (C++) — русскоговорящее сообщество
k1ceargy
Даже логику очень крутых приложение не могут изменить
Я знаю😁
источник

k

k1ceargy in Android NDK (C++) — русскоговорящее сообщество
0x1de
Будет или нет это уже другой вопрос. Меня интересует как правильно к этому вопросу подходят пропиетарные  компании
Всё проверки и прочее главное сделать на Натив уровне, без вызова JNI
источник

0

0x1de in Android NDK (C++) — русскоговорящее сообщество
k1ceargy
Всё проверки и прочее главное сделать на Натив уровне, без вызова JNI
Ну тут просто, so будут разные. Просто чтобы поменял mode собрал закинул so в jniLibs и все. Главное чтобы код из про версии в free не попал
источник

k

k1ceargy in Android NDK (C++) — русскоговорящее сообщество
0x1de
Ну тут просто, so будут разные. Просто чтобы поменял mode собрал закинул so в jniLibs и все. Главное чтобы код из про версии в free не попал
А если библиотеку подменить
источник

k

k1ceargy in Android NDK (C++) — русскоговорящее сообщество
В теории можно
источник

0

0x1de in Android NDK (C++) — русскоговорящее сообщество
Самое главное минимизировать вероятность ошибок при рефакторинге и сократить время
источник

Я

Ярослав in Android NDK (C++) — русскоговорящее сообщество
0x1de
Самое главное минимизировать вероятность ошибок при рефакторинге и сократить время
Я как раз видел через #define в некоторых приложениях разделение на про и фри
источник

0

0x1de in Android NDK (C++) — русскоговорящее сообщество
k1ceargy
Не пробовал так, но скорее всего можно)
Просто странная вещь, я взял собрал тестовую программу добавил макрос и запустил её в gdb. Int pro это функция которая объявлена внутри макроса.
Команда disass pro выдала асм код
источник

k

k1ceargy in Android NDK (C++) — русскоговорящее сообщество
Может быть отладочная инфа
источник

0

0x1de in Android NDK (C++) — русскоговорящее сообщество
k1ceargy
Может быть отладочная инфа
Да там вся функция. Потом Mode pro поставил. Результат такой же
источник

D

Dmitriy in Android NDK (C++) — русскоговорящее сообщество
0x1de
Да там вся функция. Потом Mode pro поставил. Результат такой же
Используйте директиву препроцессора ifdef/else для условной компиляции
Лучше менять содержимое функции, но можно убирать целые функции
источник

Я

Ярослав in Android NDK (C++) — русскоговорящее сообщество
Dmitriy
Используйте директиву препроцессора ifdef/else для условной компиляции
Лучше менять содержимое функции, но можно убирать целые функции
+
источник

0

0x1de in Android NDK (C++) — русскоговорящее сообщество
Dmitriy
Используйте директиву препроцессора ifdef/else для условной компиляции
Лучше менять содержимое функции, но можно убирать целые функции
Сейчас проверю. Благодарю за совет
источник

0

0x1de in Android NDK (C++) — русскоговорящее сообщество
Dmitriy
Используйте директиву препроцессора ifdef/else для условной компиляции
Лучше менять содержимое функции, но можно убирать целые функции
Благодарю за совет, работает

#include <stdio.h>
#include <string.h>

#define PRO
#ifdef PRO
int pro_version(){
   printf("THIS IS PRO VERSION\n");
   return 0;
}
#endif
#ifdef  FREE
int free_version(){
   printf("THIS IS FREE VERSION\n");
   return 0;
}
#endif
int main() {
#ifdef PRO
   pro_version();
#endif
#ifdef FREE
   free_version();
#endif
   return 0;
}

(gdb) disass pro_version
Dump of assembler code for function pro_version:
  0x0000000000401112 <+0>:  push   %rbp
  0x0000000000401113 <+1>:  mov    %rsp,%rbp
  0x0000000000401116 <+4>:  mov    $0x402004,%edi
  0x000000000040111b <+9>:  callq  0x401030 <puts@plt>
  0x0000000000401120 <+14>:  mov    $0x0,%eax
  0x0000000000401125 <+19>:  pop    %rbp
  0x0000000000401126 <+20>:  retq  
End of assembler dump.
(gdb) disass free_version
No symbol "free_version" in current context.
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
0x1de
Ребят есть 2 версии апк, про и бесплатная, в них используется нативный код. По сути бесплатная версия повторяет часть кода про версии. Сейчас я поддерживаю 2 версии отдельно и часто при изменении кода, приходится копипастить. Хотелось бы не заморачиваться так и просто работать с про версией, а при необходимости в макросе менять #define MODE pro на free.
Вопросы:
1)

int test() {
#if MODE == pro
Этот код попадёт в конечный скомпилированный so файл если MODE free?
Его можно будет декомпилировать?
#endif
}

2) макрос можно применять функциям целиком?

#if MODE == pro
int test() {
return 0;
}
#endif
Эх, жаль не во всех языках такое есть. Очень удобно. Мне сейчас тоже приходится поддерживать две версии программы. Постоянный копипаст.
источник

I

Ivansuper in Android NDK (C++) — русскоговорящее сообщество
0x1de
Благодарю за совет, работает

#include <stdio.h>
#include <string.h>

#define PRO
#ifdef PRO
int pro_version(){
   printf("THIS IS PRO VERSION\n");
   return 0;
}
#endif
#ifdef  FREE
int free_version(){
   printf("THIS IS FREE VERSION\n");
   return 0;
}
#endif
int main() {
#ifdef PRO
   pro_version();
#endif
#ifdef FREE
   free_version();
#endif
   return 0;
}

(gdb) disass pro_version
Dump of assembler code for function pro_version:
  0x0000000000401112 <+0>:  push   %rbp
  0x0000000000401113 <+1>:  mov    %rsp,%rbp
  0x0000000000401116 <+4>:  mov    $0x402004,%edi
  0x000000000040111b <+9>:  callq  0x401030 <puts@plt>
  0x0000000000401120 <+14>:  mov    $0x0,%eax
  0x0000000000401125 <+19>:  pop    %rbp
  0x0000000000401126 <+20>:  retq  
End of assembler dump.
(gdb) disass free_version
No symbol "free_version" in current context.
В int main() не обязательно делать ифдеф : ) можно в начале сделать через ифдеф 2 разных имплементации функции с одним именем print_version() и переключаться между ними. Это просто совет, а то можно очень сильно засрать код командами препроцессора
источник

0

0x1de in Android NDK (C++) — русскоговорящее сообщество
Ivansuper
В int main() не обязательно делать ифдеф : ) можно в начале сделать через ифдеф 2 разных имплементации функции с одним именем print_version() и переключаться между ними. Это просто совет, а то можно очень сильно засрать код командами препроцессора
Тогда уж внутри самой функции
источник