o2e / OLLVM-9.0.1

OLLVM-9.0.1-NDK-21.3.6528147(ndk-r21d)
Other
130 stars 39 forks source link

M1是不是不能用AndroidStudio进行NDK开发 #2

Open BRYNHILDRINTHEDARKNESS opened 2 years ago

BRYNHILDRINTHEDARKNESS commented 2 years ago

按照你的教程操作完了之后出现错误 显示The C compile

o2e commented 2 years ago

这个肯定是可以的,手上没有M1我自己也没实践过上面的说明都是根据理论和网络上的一些资料凑出来的,仅能提供一些思路(甚至会误导),不保证能通过(我本机是成功的),报错只能多研究研究,这玩意没有基础不好上手,我也不是很懂 只能查资料。

BRYNHILDRINTHEDARKNESS commented 2 years ago

大佬 你的mac是不是intel的? M1我解决了 需要改ndk-build 然后就可以编译armv7的so 但是体积会很大

o2e commented 2 years ago

是intel的,体积大是正常的,这与你写的混淆参数有关,你可以修改一下参数,例如 bcf_loop=3 改成 bcf_loop=1bcf_prob=40改成 bcf_prob=30。这些值越大代表混淆程度越高(代码复杂性提高 生成的虚假代码越多 同时代码性能下降)。你可以根据代码的重要性来调整参数,或者你可以把非常需要保护的代码抽取到一个单独so进行高强度混淆(注意 代码量越少 被分析成功的概率越高 可适当插入一些其他的功能一起打包混淆视听) 。

BRYNHILDRINTHEDARKNESS commented 2 years ago

大佬方不方便提供联系方式?方便后面交流

o2e commented 2 years ago

不太方便,有问题可以在这里继续issues,如果刚好了解的话一般会回复

BRYNHILDRINTHEDARKNESS commented 2 years ago

好的 关于你说的抽取到一个单独的so进行高强度加密 是指生成so之后在外部进行加密?还是说怎么样

BRYNHILDRINTHEDARKNESS commented 2 years ago

另外体积大就算没混淆生成的so也是intel平台的十几倍

o2e commented 2 years ago

好的 关于你说的抽取到一个单独的so进行高强度加密 是指生成so之后在外部进行加密?还是说怎么样

是抽取出来一个单独做一个lib库子模块,为它单独设置更高的混淆参数,一个app里面不是有多个so文件嘛 相当于独立出来编译

没混淆还是大那么多就是有问题了,我是配置cmake编译的 就和说明一样 没有发现异常,ndk-build太难用了实在用不明白 或许你可以试试cmake 如果你的项目都是ndk-build不好切换就算了 只能自己加油了💪🏻

BRYNHILDRINTHEDARKNESS commented 2 years ago

我就是按照你的说明 用cmake的方式弄的 但是还是体积很大

BRYNHILDRINTHEDARKNESS commented 2 years ago

可能跟架构有关系 intel和M1 PRO

BRYNHILDRINTHEDARKNESS commented 2 years ago

大佬你用的mac是哪个处理器的

o2e commented 2 years ago

MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) 2.3 GHz 四核Intel Core i7 应该和cpu无关吧 我这里测试 混淆会增大 1-3倍左右

BRYNHILDRINTHEDARKNESS commented 2 years ago

有关系的,我在M1里面用androidstudio开发ndk直接跑失败,用intel的相同的操作就可以跑的通,而且我在m1的ndk里面增加了一个指令就可以跑了 可能是rosetta2转译的原因

BRYNHILDRINTHEDARKNESS commented 2 years ago

这个配置编译速度怎么样?另外是不是散热不是很好

BRYNHILDRINTHEDARKNESS commented 2 years ago

mac有一个通病 intel平台的除了能跑AS里面带的安卓模拟器,其余的第三方比如说夜神、雷电之类的模拟器根本不能用

BRYNHILDRINTHEDARKNESS commented 2 years ago

或者大佬能不能指导指导我你是如何进行编译的,可能我的操作有什么地方不对

o2e commented 2 years ago

是散热不行 我就是文档那样操作的

o2e commented 2 years ago

要不你整个macOS的 Intel虚拟机跑下试试?

BRYNHILDRINTHEDARKNESS commented 2 years ago

m1只能跑arm版本的windows

o2e commented 2 years ago

我是说你可以找个台式机跑macOS虚拟机 这样就是Intel的环境了

BRYNHILDRINTHEDARKNESS commented 2 years ago

这个试过了 可以 就是M1不行

BRYNHILDRINTHEDARKNESS commented 2 years ago

大佬 生成的时候出现这种问题是什么原因

error
BRYNHILDRINTHEDARKNESS commented 2 years ago

大佬cmake里面-- strip-all这个命令是不是用不了 用这个命令就出现found not command

o2e commented 2 years ago

你要strip什么 编译输出的so 还是 静态lib库

BRYNHILDRINTHEDARKNESS commented 2 years ago

输出so

o2e commented 2 years ago

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden")

o2e commented 2 years ago

buildTypes { release {

        ndk {
            debugSymbolLevel = "FULL"
        }  }
BRYNHILDRINTHEDARKNESS commented 2 years ago

大佬 mac是不是不能用strip这个命令 是不是需要用debugSymbolLevel = "FULL"代替

o2e commented 2 years ago

可以用 但好像不是那样用的 xxxabi-linux-android-strip 有这么个工具在ndk里面 然后要单独拿这个东西去做 strip 你就直接用debugSymbolLevel就行了 AGP自动处理的

o2e commented 2 years ago

好像也可 加个 -s 什么的在编译命令里面 记不清

BRYNHILDRINTHEDARKNESS commented 2 years ago

大佬 Application.mk这一段翻译成cmake应该如何写 application mk

o2e commented 2 years ago

CMAKE_C_FLAGS 是C CMAKE_CXX_FLAGS 是CPP

o2e commented 2 years ago

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} 你要写的")

BRYNHILDRINTHEDARKNESS commented 2 years ago

就是说 上面的APP_CFLAGS就用set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} 你要写的") APP_CPPFLAGS就用set(CMAKE_CPP_FLAGS "${CMAKE_C_FLAGS} 你要写的")是不 APP_LDFLAGS用什么

o2e commented 2 years ago

https://www.baidu.com/s?wd=cmake%20APP_LDFLAGS https://cmake.org/cmake/help/v3.12/envvar/LDFLAGS.html http://cn.voidcc.com/question/p-zxkbxfwv-kx.html

BRYNHILDRINTHEDARKNESS commented 2 years ago

感谢大佬 不太懂这些东西

BRYNHILDRINTHEDARKNESS commented 2 years ago

其实主要是清除这些函数 符号表什么的防止ida查看

BRYNHILDRINTHEDARKNESS commented 2 years ago

大佬 按照你的方式用 debugSymbolLevel = "FULL”但是没什么改变 最后我用的aarch64-linux-android-strip体积确实变小了 但是放进idapro还是会显示定义的函数 貌似没有隐藏掉

BRYNHILDRINTHEDARKNESS commented 2 years ago

确切地说应该是去掉程序的符号表和重定位表