-
2017-12-03 22:31:45
前言
在接入360 Android SDK时遇到在有些机型的Android机器上报错,具体错误提示为:
Failure to initialize! Your hardware does not support this application
Unity生成的原生包可以正常运行,那问题很明显出在360 SDK身上。遇到问题时,我的习惯首先是去想自己哪里有问题,排除掉自身原因,在找其他问题。翻看了360 SDK接入文档,怀疑是签名不对,因为360 SDK只支持V1签名,我编译Android project 使用的是Gradle 2.2版本。检查build.gradle文件内容如下:
android { ... defaultConfig { ... } signingConfigs { release { storeFile file("myreleasekey.keystore") storePassword "password" keyAlias "MyReleaseKey" keyPassword "password" v2SigningEnabled false } } }
是按照官方设置做的,那这里就没啥问题。排除完自己的问题,就去问360SDK的同学了。
沟通问题
在我连续加了十几次对方包打听的QQ后,终于接受了我的请求。在这里不得不感叹以前公司和360有合作关系时,都是运营同学拉个群,任何问题都是及时解答。现在只能通过这种无限骚扰的方式才能沟通。沟通过后,让我自己查明我所用的引擎支持哪些动态库,不用的就删除。真是无语啊,你提供的动态库,文档里也不说明一下,而让开发者自己去研究你提供的库,是否适配游戏。
后面又找之前的同事,专业接入SDK的同学问了下是否遇到此类问题,说没遇到过这个问题。提供了思路,让我挨个添加,使用二分法定位那个库不支持。跑去提供的文件看了下目录结构,大概明白了啥情况。目录结构如下:
- arm64-v8a
- liblegend.so
- libonlywechat_plugin.so
- libqhsdk.so
- armeabi
- liblegend.so
- libonlywechat_plugin.so
- libqhsdk.so
- armeabi-v7a
- liblegend.so
- libonlywechat_plugin.so
- libqhsdk.so
- mips
- liblegend.so
- libonlywechat_plugin.so
- libqhsdk.so
- mips64
- liblegend.so
- libonlywechat_plugin.so
- libqhsdk.so
- x86
- liblegend.so
- libonlywechat_plugin.so
- libqhsdk.so
- x86_64
- liblegend.so
- libonlywechat_plugin.so
- libqhsdk.so
看了一下Unity官方文档,说明如下:
Android: OS 4.1 or later; ARMv7 CPU with NEON support or Atom CPU
Unity设置里: File->BuildSetting->Android->PlayerSetting->Device Filter,这里只有Armv7,x86的选项。删除掉多余的so文件,问题解决。
动态库和静态库
动态库和静态库都是程序代码编译后导出不同类型的库文件。
静态库特性如下:
1. 在程序链接时,静态库将被写入可执行文件
2. 程序在启动时,静态库将被加载到代码区
3. 每个进程的静态库是独立的动态库特征如下:
1. 程序在链接时,只写入动态库的路径
2. 程序在需要时加载动态库
3. 所有进程共享一份动态库首先搞清楚动态库,也就是so文件后。我就更加不明白了,既然so文件是自己需要时加载,为啥360SDK自带的so文件会导致Unity报错?
ABI简介
不同的CPU对应不同的指令集,为了兼容不同的CPU,在生成动态文件时,可以指定不同的CPU生成对应的文件。文件对应的类型就是API(Application binary interface)。具体文档参考这里。
为不同类型CPU设备生成对应的动态文件,如果不指定生成对应CPU架构的APP,所有动态文件将包含在APP中。
程序运行时如何找到对应的动态库?
1. 默认路径加载
2. 指定的路径加载Android APP在安装时会生成如下目录:
/data/data/<package_name>/lib/lib<name>.so list 我们应用,目录如下: libil2cpp.so liblegend.so libmain.so libonlywechat_plugin.so libqhsdk.so libunity.so libxlua.so
程序在安装时,安装程序将扫描:
1. lib/<primary-abi>/lib<name>.so // 设备主ABI,设备对应cpu支持的ABI 2. lib/<secondary-abi>/lib<name>.so // 设备辅助ABI,如果主ABI没有,使用辅助ABI
刨根问底
测试使用的一加5手机,小米5,都有问题,骁龙825和骁龙820肯定是支持arm64-v8a。如果是360 SDK自己使用这些库那肯定没有问题。为啥Unity会报错?只能说Unity在启动时加载了所有放在lib目录下的库。由于so文件带有cpu使用信息,Unity只支持armabi-v7a,x86。这样整个问题算是清楚了。
更多相关内容 - arm64-v8a
-
ios动态库注入把越狱手机上自制的动态库安装到普通手机上
2022-03-22 10:30:06文章目录查看依赖库执行命令查看程序依赖的动态库名字用machoview查看安装insert_dylib 查看依赖库 先进入app包所在目录 执行命令查看程序依赖的动态库名字 otool -L 可执行程序名 例如:得到5个动态库 otool -L ...文章目录
预备条件
本文假设你已经学会了在越狱手机上使用tweak给app添加自制的动态库.dylib
如果不会请查看下面这个目录,里面有我写的关于tweak的文章
tweak教程目录导出越狱手机上的app包和自己注入的动态库
usb链接手机,登录root账户
使用下面工具查看要读取的app包目录MJAppTools -l
例如:
# 04 【testCrackPwd】 <tdw.testCrackPwd> /private/var/containers/Bundle/Application/9692FA06-4755-406C-A3F0-66651CA1BC05/testCrackPwd.app
导出自己写的tweak动态库文件
使用iFunBox到Device\Library\MobileSubstrate\DynamicLibraries目录下查找你写的.dylib扩展名的tweak动态库文件
例如我这里的是testCrack.dylib查看依赖库
先进入app包所在目录
执行命令查看程序依赖的动态库名字
otool -L 可执行程序名
例如:得到5个动态库
otool -L testCrackPwd testCrackPwd: /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1858.112.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3) /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1858.112.0) /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 5522.2.101)
注意L要大写
用machoview查看
打开 Load Commands里面的 LC_LOAD_DYLIB开头的都是动态库
然后Load Commands段落的结尾添加LC_LOAD_DYLIB(自己的动态库),就可以注入自己的动态库了.一定要在结尾,否则被插入后面的位置就往后移动了.安装insert_dylib
地址
https://github.com/Tyilo/insert_dylib
下载好,以后选择release编译,然后把product文件夹下的insert_dylib 可执行文件,复制到 usr/local/bin 目录下,这样就可以在任意目录下运行了把动态库插入到app里
- 先把动态库dylib文件放到app包里,跟可执行文件放在同一目录,例如下面把testCrack.dylib 和可执行文件testCrackPwd放在同一目录
insert_dylib @executable_path/动态库名 app包名 --all-yes
executable_path 意思是动态库就在可执行文件同一目录 --all-yes是自动替你输入2次y和回车
例如:insert_dylib @executable_path/tweak_crack.dylib testCrackPwd --all-yes
这种结尾没有 --weak的app加载找不到动态库会闪退,添加 --weak的不会闪退
例如:insert_dylib @executable_path/动态库名 app包名 --all-yes --weak
insert_dylib @executable_path/tweak_crack.dylib testCrackPwd --all-yes --weak
之后在app包里会多出一个文件以_patched结尾
把它拖拽到machoview里查看Load Commands段结尾,发现已经多了我们添加的动态库
LC_LOAD_DYLIB开头的,如下图:
–weak 加载动态库找不到不闪退的是这样 LC_LOAD_WEAK_DYLIB开头的,如下图
optool 代替insert_dylib 更方便
安装动态库
optool install -c load -p "@executable_path/tweak_crack.dylib" -t testCrackPwd
删除动态库
optool uninstall -p "@loader_path/libsubstrate.dylib" -t tweak_crack.dylib
删掉 libsubstitute.0.dylib
optool uninstall -p /usr/lib/libsubstitute.0.dylib -t libsubstrate.dylib
添加/usr/lib/libstdc++.6.dylib
optool install -c load -p "/usr/lib/libstdc++.6.dylib" -t libsubstrate.dylib
查看自己写的动态库都依赖哪些库
otool -L 自己的动态库名
例如:testCrack.dylib
otool -L testCrack.dylib
显示结果:
testCrack.dylib (architecture armv7): /Library/MobileSubstrate/DynamicLibraries/testCrack.dylib (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1858.112.0) /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1858.112.0) /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 5522.2.101) /System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1.11.0) /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1300.23.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3) testCrack.dylib (architecture arm64): /Library/MobileSubstrate/DynamicLibraries/testCrack.dylib (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1858.112.0) /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1858.112.0) /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 5522.2.101) /System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1.11.0) /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1300.23.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3) testCrack.dylib (architecture arm64e): /Library/MobileSubstrate/DynamicLibraries/testCrack.dylib (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1858.112.0) /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1858.112.0) /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 5522.2.101) /System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1.11.0) /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1300.23.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)
这里出现了3次 /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
Cydia是越狱的动态库,其他的都是系统的动态库.或者用machoview打开 testCrack.dylib
也会找到段落LC_LOAD_DYLIB(CydiaSubstrate)如下图:
把这个越狱手机的动态库,从越狱手机上用iFunbox复制到app包里,如下图,虽然在iFunbox显示0b,复制到mac上就会显示真实大小150k
把app包里的_patched结尾的可执行文件覆盖原来的可执行文件
如下图:
testCrackPwd_patched改成testCrackPwd
修改越狱动态库的加载路径
/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate
看上面CydiaSubstrate的路径,是越狱手机的路径,现在要把这个路径修改成跟自己的动态库动态库相同路径,使用下面指令,@loader_path是指被修改的动态库的路径是加载路径,表示自己的动态库和被修改的动态库是相同路径
install_name_tool -change 旧的动态库路径 @loader_path/越狱动态库名 自己的动态库名
例如上面的例子完整指令如下:
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib tweak_crack.dylib
运行结果显示会让 testCrack.dylib的armv7 arm64 arm64e 的签名无效
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: warning: changes being made to the file will invalidate the code signature in: testCrack.dylib (for architecture armv7) /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: warning: changes being made to the file will invalidate the code signature in: testCrack.dylib (for architecture arm64) /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: warning: changes being made to the file will invalidate the code signature in: testCrack.dylib (for architecture arm64e)
使用machoview查看自己的动态库 testCrack.dylib,里面依赖的越狱动态库cydiaSubstrate里面的路径已经被修改了
给自己的动态库重签名
因为刚才我们修改了自己动态库里面加载越狱动态库的路径所以,文件签名被破坏了,使用指令重签名,这个签名不能使用ios App Signer工具,ios App Signer只会对最外层的app包重签名.
获取证书idsecurity find-identity -v -p codesigning
得到结果,下面其中一行是我要的 前面的数字 是我要的id :
07CA4B77ED192A9294DB84EBD74BC5159793DF695) 07CA4B77ED192A9294DB84EBD74BC5159793DF69 "Apple Development: guangyu shi (6NRAA7665L)"
使用指令重签名动态库
codesign -fs 证书id 自己的动态库名 codesign -fs 证书id 越狱动态库名
例如下面:
codesign -fs 07CA4B77ED192A9294DB84EBD74BC5159793DF69 tweak_crack.dylib codesign -fs 07CA4B77ED192A9294DB84EBD74BC5159793DF69 libsubstrate.dylib
对外面app包重签名
使用ios app signer重签名,下面是我写的关于这个工具的教程
ios重签名工具ios-app-signer的使用
生成新的ipa包把ipa包安装到手机上
用爱思助手或者其他工具,安装ipa包到手机上,发现这个app会运行自己写的动态库.
-
【Android 逆向】APK 文件格式 ( Android 应用安装 | Zip 文件格式 | 使用 Python 代码提取 APK 文件 )
2021-10-28 22:35:43一、Android 应用安装、 二、APK 文件格式、 三、使用 Python 提取 APK 文件、
一、Android 应用安装
APK 是 Android 应用的安装文件 , 现在也有 AAB 格式的 , AAB 安装包也可以导出 APK 安装文件 ;
应用安装时 , 会将 APK 安装包拷贝到 /data/app/packageName/ 目录下的 base.apk ,
如 : 某应用会将 apk 文件拷贝到
/data/app/com.qidian.QDReader-GTqLCxuMlq6CJtnOVz1LgQ==/base.apk
位置 ;APK 安装目录参考 【Android 逆向】应用安装目录 ( Android 应用的默认安装目录 | 查找 Android 应用的安装目录 | 查询当前正在运行的应用包名 | 根据包名查询应用安装路径 ) 博客 ;
/data/data/package.name/lib
是应用自带的 so 动态库 , 在应用安装时安装的文件 ;/data/data/com.qidian.QDReader/lib
文件是软链接文件 , 真实的文件地址是/data/app/com.qidian.QDReader-GTqLCxuMlq6CJtnOVz1LgQ==/lib/arm
地址 , 这是应用的安装目录 ;lrwxrwxrwx 1 root root 66 2021-10-26 10:10 lib -> /data/app/com.qidian.QDReader-GTqLCxuMlq6CJtnOVz1LgQ==/lib/arm
参考 【Android 逆向】应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 ) 博客 ;
二、APK 文件格式
Android 的 APK 安装包使用的数据格式就是 zip 格式 , 直接使用 zip 工具解压即可 , 也可以将文件命后缀改为 .zip 后解压 ;
Zip 文件格式中 , 每个文件都是由 文件头 + 文件数据 + 数据描述符 构成 , 如果有多个文件 , 则上面的 文件头 + 文件数据 + 数据描述符 数据 重复存放 即可 ;
Zip 文件中 还有一个 核心目录 , 以及 目录结束标识 ;
在 010 Editor 工具中 , 打开 apk 文件 , 然后选择 " 菜单栏 / 模板 / Zip 模板 " , 即可以 Zip 格式解析该 APK 文件 ;
50 4B 03 04
开始的文件 , 就是 Zip 文件 , 这是 Zip 文件的标识 ;
三、使用 Python 提取 APK 文件
使用 Python 提取 APK 文件完整代码 :
import os # 如果没有使用 pip install zipfile 安装 import zipfile # 提取 APK 中的文件 def extract_apk(apk_path: str): # 创建 ZipFile 实例对象 zip_file = zipfile.ZipFile(apk_path) # 解压目录 , 删除 "app.apk" 的后 4 个字符 ".apk" , 即 "app" out = apk_path[:-4] # 创建目录 os.mkdir(out) # 提取 zip 文件 zip_file.extractall(out) # 关闭 zip 文件 zip_file.close() def main(): extract_apk('app.apk') if __name__ == '__main__': main()
执行后会将 app.apk 文件解压到 app 目录中 ;
-
【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )
2021-06-08 19:51:34一、APK 文件结构、 二、APK 打包流程、 三、APK 安装流程、 四、安卓虚拟机、
一、APK 文件结构
Android 应用的安装包时 以 " .apk " 为后缀的 APK 文件 ;
APK 是 " Android Package " 的缩写 ;
将打包好的 APK 文件安装到 Android 手机中 , 就是可运行的应用程序 ;
APK 文件结构 :
① assets : 资源文件 , 该目录下的资源文件不经过 aapt 工具编译 ;
② lib : 存放 动态库 “.so” 文件 , NDK 中 C / C++ 调用的函数库 ;
③ META-INF : 该目录中存放 apk 的签名文件 ;
- CERT.SF : 摘要加密 , 使用私钥 对 摘要明文 加密后的 密文信息 , 是加密文件 , 如果要解密该文件 , 必须使用与私钥配对的公钥进行解密 ;
- CERT.RSA : 文件是签名证书文件 , 存放的是公钥和加密算法的描述 ;
- MANIFEST.MF : 文件摘要 , 存放程序清单文件 , 包含了 APK 安装包 中所有文件的 摘要明文 ;
- 剩余文件 : 都是可忽略的资源文件 ;
④ res : 资源文件 , 经过了 aapt 工具编译后的文件 ; 这个目录下的文件不再介绍 , 太熟悉了 ;
⑤ AndroidManifest.xml : 清单文件 , 声明了 Application , 组件 , 权限 , 元数据 等信息 ;
⑥ classes.dex : Dalvik 字节码文件 , Android 中的可执行文件 , 可以在 Android 系统中运行 ;
⑦ resources.arsc : 资源文件映射表 , 使用 aapt 编译 res 目录下的资源文件形成的文件 , 用于根据 id 查找资源路径 ;
二、APK 打包流程
APK 打包流程 :
① 使用 AAPT 工具打包资源文件 , 生成 R.java , resources.ap 文件 ;
② 使用 AIDL tool 工具 , 处理 AIDL 文件 , 生成对应的 Java 文件 ;
③ 使用 javac 工具编译 Java 源码为 class 字节码文件 ;
④ 使用 dx 工具将 class 字节码文件打包成 dex 字节码文件 , 这是 Dalvik 虚拟机字节码文件 ;
⑤ 使用 apkbuilder 工具生成未签名的 apk 文件 ;
⑥ 使用 jarsigner 工具对 apk 文件进行签名 , 生成签名后的文件 ;
⑦ 使用 zipalign 工具对签名后的 apk 文件进行对齐操作 ;
三、APK 安装流程
APK 4 4 4 种安装方式 :
① 系统程序安装 ;
② 使用应用市场安装 ;
③ 手机自带安装 ;
④ 使用 ADB 调试工具安装 ;
APK 安装流程 :
① 将 APK 安装包复制到 /data/app 目录下解压 , 扫描安装包 ;
② 将 dex 文件保存 /data/dalvik-cache 目录中 ;
③ 在 /data/data/包名 下创建对应 apk 包名的应用数据目录 ;
系统自带程序在 /system/app 目录下 , 获得 adb root 权限后才能删除 ;
应用卸载 , 就是将 /data/app/ , /data/dalvik-cache/ , /data/data/ 等目录下的相关文件删除 ;
四、安卓虚拟机
虚拟机是一个可以运行 class , odex , oat 可执行文件的运行环境 ;
常见的虚拟机有 Java 虚拟机 , Dalvik 虚拟机 , ART 虚拟机 ;
Java 虚拟机 :
运行的 class 字节码文件 , 运行程序时解码 class 文件中的内容 ;
基于栈架构 , 需要频繁在栈上读写数据 , 造成较多的指令分派 , 更多的内存访问次数 , 比较耗费 CPU 时间 ;编译时 : Java 源码 , 使用 javac 编译器 , 编译成 class 字节码文件 ;
运行时 : 类加载器通过 Java 类库验证字节码 , 验证通过会后进入 Java 虚拟机 , 进入 Java 解释器 或 即时编译器 , 然后进入运行时系统 , 之后进入操作系统 , 然后调用硬件 ;
Dalvik 虚拟机 :
基于 JIT 机制 ( 即时编译技术 ) , Android 5.0 5.0 5.0 以下使用的虚拟机是 Dalvik 虚拟机 , 该虚拟机的可执行文件是 dex 文件 , 该文件比 class 字节码文件更小 ;
JIT ( Just In Time ) 即时编译技术 , 对应 Dalvik 虚拟机 ;
基于寄存器架构 , 通过寄存器间接访问数据 , 该方式比基于栈架构速度更快 ;
ART 虚拟机 :
Android 5.0 5.0 5.0 以上使用的虚拟机是 ART 虚拟机 ;
AOT ( Ahhead Of Time ) 预编译技术 , 对应 ART 虚拟机 ;
Java 虚拟机 / Dalvik 虚拟机 / ART 虚拟机 都向上层提供了 3 3 3 个接口 ,
JNI_GetDefaultJavaVMInitArgs
JNI_CreateJavaVM
JNI_GetCreatedJavaVMS ;虚拟机之间可实现无缝衔接 ;
Dalvik 虚拟机 与 ART 虚拟机区别 : 虚拟机中有个 persist.sys.dvlvik.vm.lib 字段 ,
如果该字段存储的是 libdvm.so , 该虚拟机是 Dalvik 虚拟机 ;
如果该字段存储的是 ;ibart.so , 该虚拟机是 ART 虚拟机 ;
Dalvik 虚拟机 与 ART 虚拟机可执行文件 :
Dalvik 虚拟机加载 dex 文件加载时不是直接加载 dex 文件 , 加载执行的是 odex 文件 , odex 文件是通过 dexopt 工具对 dex 进行优化生成的 ;
ART 虚拟机加载 dex 文件时加载的是 oat 文件 , oat 文件时通过 dex2oat 工具对 dex 文件进行优化生成的 ;
-
OA系统+手机版源码t源代码
2016-12-06 21:36:06回收站 --- 删除的文件,可恢复或者彻底删除 扩展应用: 资产管理--- 管理固定资产、仪器、办公用品等 培训管理--- 管理培训信息 会议管理 --- 各项会议会议、上传会议记录 车辆管理 --- 车辆信息、使用、维修... -
Android_动态加载.so文件,解决apk安装包过大的问题.
2018-11-07 16:38:51依赖的so都是音视频的必要的核心SDK,不能删除,但是又不想上传一个超级大的apk到市场, 那么解决的方案就是浪费用户流量,毕竟现在网速那么快,流量也几乎等于不要钱了… 这叫从技术角度伪减小apk,其实在用到的时候还是... -
怎么在手机上查看建筑模型图??
2020-12-22 21:52:36一、BIMBOX功能介绍:BIM文件内的多个视图与图纸:一个Revit文件中包含多个二维、三维视图、以及平立剖面、图纸等,BIMBox可将其无损解析并将其呈现在浏览器上。文件详细信息:可查看文件大小、修改时间、修改者,以及... -
Python 程序打包成 exe 可执行文件
2020-12-08 21:11:50可执行文件:对于非码农用户或者一些小白用户,你让他装个 Python 同时还要折腾一堆依赖库,那简直是个灾难。对于此类用户,最简单的方式就是提供一个可执行文件,只需要把用法告诉他即可。比较麻烦的是需要针对不同... -
iOS Hacker 重签名实现无需越狱注入动态库 dylib
2017-08-15 10:31:47iOS Hacker 重签名实现无需越狱注入动态库 dylib一、获取 ipa 文件iOS 的应用都是打包成 ipa 的文件格式,ipa 文件实际上就是 zip 格式的文件,通过 unzip 可以解压,和安卓下的 apk 包类似。App Store 下载完应用,... -
exo是什么文件?
2020-12-19 04:27:46匿名用户1级2014-07-21 回答扩展名是文件名的一部分,每个文件的名中最后一个小点后边的部分(文件可以无扩展名)就是文件的扩展名,通常文件扩展名由3或4个不同的字符组成,可以是数字、字母、符号.你可以把文件的扩展... -
潜藏在手机中的新威胁:免安装应用安全指北
2021-11-17 11:33:28OPPO子午实验室在Black Hat Asia黑帽大会上分享了针对免安装应用的研究与分析成果,如何从普通接口调用到应用权限的远程命令执行,我们将在本篇文章中进行更为详尽的分析。 -
【Google Play】App Bundle 使用详解 ( 简介 | 应用内更新 | 即时更新 | 灵活更新 )
2021-07-19 17:57:36一、App Bundle 简介、 二、App Bundle 定制化分发、 1、应用内更新、 ①、即时更新、 ②、灵活更新、 -
动态库gsap、视觉差parallax-js、手势库hammerjs、打字库typed、多页签通信、xss和csrq、axios获取上传文件...
2021-12-13 11:13:39又复杂又杂的一周,react和vue的增查改的不同,react偏向原生的js写法,vue有v-modal双向数据绑定功能,所以vue的增查改就一个v-modal,而react就要三个方法类,还望大家注意~~,来说说这周用到的库吧,动态库gsap,... -
class文件与dex文件解析
2019-12-18 23:42:56这篇笔记是我去年的时候创建的,结果放到草稿箱里给忘记了,大写的尴尬啊,所以急忙给补上了,此处鄙视一下自己!今天的正题——解析class文件和dex文件。 -
Android6.0动态权限申请及RxPermissions权限库使用
2017-12-05 11:17:54android.permission.DELETE_CACHE_FILES,允许应用删除缓存文件 删除应用 android.permission.DELETE_PACKAGES,允许程序删除应用 电源管理 android.permission.DEVICE_POWER,允许访问底层电源... -
出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法
2017-09-28 16:08:27无奈还是没搞定,我就在猜测是不是静态库版本的问题,因为我的Xcode已经升级到了最新的版本,而项目是挺老的项目了,所以秉承着打破砂锅问到底的精神果断去下载老版本的Xcode,通常我们可以在App Store应用商店中... -
Android移动应用开发从入门到精通--详细书签版
2013-02-08 11:45:33本书不仅适合android应用程序开发人员阅读,还能为qa测试人员提供指导。另外本书还可以帮助项目经理更好地管理项目进程和项目团队,帮助市场推广人员更好地把握市场、创造令人瞩目的销售业绩。 作译者 Shane ... -
Android应用程序安装过程解析(源码解析)
2017-03-02 15:36:33Android应用程序安装过程解析 1.程序安装的4大步骤 (1) 拷贝apk文件到指定目录 在Android系统中,apk安装文件是会被保存起来的,默认情况下,用户安装的apk首先会被拷贝到 /data/app 目录下。 /data/app... -
Android应用漏洞及常见解决方案
2021-01-12 19:33:49源文件安全2.1 应用完整性2.2 程序签名包2.3 Java代码加壳程度2.4 Java代码混淆2.5 SO文件加固2.6 H5文件加固2.7 Java层关键函数风险2.8 资源文件泄露风险2.9 单元测试配置三. 数据存储风险3.1 WebView明文存储密码... -
如何获得更小的应用文件尺寸?来了解下 Android App Bundle
2018-10-15 17:00:00对于手机用户来说,“存储空间不足” 警告有时会显得非常烦人。时至今日,手机存储容量仍然是有限的。虽然存储容量多年来一直在增长,但是填充在我们手机里的东西:音乐、应用、游戏... -
Android 动态加载sd卡里面so库
2018-09-26 21:03:38有些so文件太大,可以从手机内存或者sd卡里面拷贝到运行的应用程序里面。接口都是之前打包在里面了。还可以做so更新,就是把之前拷贝进行删除,然后进行不重新打包apk,进行重新拷贝进去。 1,封装好的类 package... -
【电脑怎么打开apk文件】电脑如何打开apk文件_电脑上怎么打开apk-系统城
2021-07-06 02:38:492020-08-11 15:45:00 浏览量:7000apk文件一般都是安卓手机的软件,当然,我们也可以用windows系统打开。但是苹果系统怎么办呢?有些朋友想要通过苹果电脑玩安卓的手机游戏,却不知道从何下手,那么apk文件用苹果... -
Android应用加固原理
2019-12-18 23:11:49打包资源文件,包括res和assets文件夹下的资源、AndroidManifest.xml文件、Android基础类库 aidl 将.aidl接口文件转换成.java文件 javaComiler 编译java文件,生成.class字节码文件 dex ... -
大体了解Android应用安装过程及原理
2020-03-24 14:03:54Android应用安装的流程及路径: ...system/app 系统自带的应用程序,无法删除 data/app 用户程序安装的目录,有删除权限。安装时把apk文件复制到此目录 data/data 存放应用程序的数据 Data/dalvik-cache 将apk... -
❤️垃圾大学,想自学 Java 可以吗?难吗?毕业后能找到一份 6k左右的工作吗?
2021-08-30 09:13:02CSDN 上收到一条私信,内容大致...互联网时代最不缺的就是学习资源,学习教程,网上随便找找,就能找到一大筐,只要你能每天花 6-8 个小时用于高效学习,半年就能入门 Java 了。 高效学习期间,一定要杜绝抖音、游戏的 -
Android 将自己的应用改为系统应用
2016-11-30 16:19:11所谓系统程序就是system/app目录中的程序,普通应用转换成系统程序后有稳定、减少...第一种:使用ADB命令将app安装在system/app目录下转载:android 将自己的应用改为系统应用这种方法的原理就是:1、把apk文件移动到 -
快应用简介
2019-04-20 10:01:18快应用是一种新的应用形态,以往的手机端应用主要有两种方式:网页、原生应用;网页无需安装,却体验不是很好;原生应用体验流畅,却需要从应用商店下载安装,难以一步直达用户;快应用的出现,就是希望能够让用户... -
第1章 数据库系统概论---数据库原理及应用
2022-02-23 17:04:30课程学习目标 ...CO4:掌握数据库应用编程技术及其开发工具的使用,培养数据库应用编程能力,同时培养解决复杂工程问题的数据库应用系统开发能力。 本课程教学内容 数据库系统概论 数据库关系模型 结构 -
vc++ 应用源码包_1
2012-09-15 14:22:12详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动... -
部署手机文件要点
2010-12-02 17:09:00部署的附加文件列表格式是:一行一个文件,每行格式为 文件名|本地磁盘目录|目标路径|注册表否Visual Studio 环境准备 本文使用的WindowsMobile开发环境是Visual Studio 2008版本,要求在安装VS2008的...