ios静态库反编译
㈠ iOS static library,dynamic library和framework有什么区别
在开发过程中只用过static library静态库,按照网上的资料来看,iOS系统只支持静态库,而不支持动态库。
framework 一般情况下就是 对library的封装,同时封装了对应的header文件、以及引用的资源文件(如果有)
静态库
链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
动态库
链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。
总结来说:其实就是加载时机和加载次数的不同。
㈡ ios开发 静态库不支持arm64会有什么影响
一:什么是静态库,来自网络 程序编译一般需经预处理、编译、汇编和链接几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中。
㈢ ios 静态库包含第三方怎么处理
如果有源码,直接普通的静态库生成方式就可以吧
㈣ ios a静态库 能反编译吗
.a静态库不能进行反编译,反汇编的可能性也极低。
静态库:静态库仅在程序启动时被连接使用,程序运行时将不再需要该静态库。
与静态库相对的是动态库:程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
㈤ ios 什么是静态库
一:什么是静态库,来自网络
程序编译一般需经预处理、编译、汇编和链接几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。
静态库和动态库是两种共享程序代码的方式,它们的区别是:静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的复本,因此节省了很多内存。
————通俗的讲就是把一些重要的或者公共代码编写成一个静态库文件给他人或者团队调用。类似与delphi里面的dll。
二:如何制作静态库
网上其实类似的有很多。可以参考制作。
http://blog.csdn.net/pjk1129/article/details/7255163
http://www.cnblogs.com/beginor/archive/2012/04/20/2459244.html
想说明的一点,真机测试和模拟器测试的静态库制作方法是不同的,不然别人调用会出现问题。下面会讲。
三:如何调用静态库
如果您需要同时使用真机和模拟器平台进行测试,您可以使用如下方式调用静态库:
1、 配置TARGETS-Build Settings-Library Search Paths 在TARGETS-Build Settings-Library Search Paths中加入$(SRCROOT)/lib/Release$(EFFECTIVE_PLATFORM_NAME),其中$(SRCROOT)变量为工程源代码根目录$ (EFFECTIVE_PLATFORM_NAME)变量为您编译时选择的编译方式即“iphoneos”或“iphonesimulator”采用该种方式加载Xcode可在根据您的实际编译环境自动选择所需要的库文件,根据您的工程目录结构不同,实际输入的变量内容可能会有所不同,请根据实际情况自行调整。
通俗的讲就是 如果是模拟器运行,就是在TARGETS-Build Settings-Library Search Paths 添加"$(SRCROOT)/lib/Release-iphoneos" (备注:/lib/Release-iphoneos这个是你的项目文件名下文件夹位置)
如果是在真机测试,就是在TARGETS-Build Settings-Library Search Paths 添加"$(SRCROOT)/lib/Release-iphonesimulator"
其实可以把2个文件合并成一个。不然每次不同的编译还要重新换路径麻烦。
将/Users/user/Desktop/libPrint.a替换成合并后的路径。
lipo -create /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Procts/Release-iphonesimulator/libPrint.a /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Procts/Release-iphoneos/libPrint.a -output /Users/pjk1129/Desktop/libPrint.a
㈥ ios开发怎么把第三方框架打包进静态库
在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把核心代码打包成静态库,只暴露头文件给程序员使用(比如:友盟、网络地图等第三方的sdk)
静态库和动态库的存在形式
静态库:.a 和 .framework
动态库:.dylib 和 .framework
静态库和动态库的区别
静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存
注意:项目中如果使用了动态库,会苹果拒接
静态库文件的版本(4种)
真机-Debug版本
真机-Release版本
模拟器-Debug版本
模拟器-Release版本
Debug(调试)版本
1、含完整的符号信息,以方便调试
2、不会对代码进行优化
Release(发布)版本
1、不会包含完整的符号信息
2、的执行代码是进行过优化的
3、的大小会比Debug版本的略小
4、在执行速度方面,Release版本会更快些(但不意味着会有显着的提升)
所以我们一般开发中都打包Release(发布)版本,提供外界
㈦ iOS打包Framework静态库,从Framework里加载本地html,怎么加载
方法/步骤 方法一: 通过webview的delegate方法 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 在上面这个函数中,通过截取NSURLRequest解析js中传递过来的参数,和网址再根据参数来调用已定义好的方法。 但现在我们介绍另外一种方法。 方法二:我们用 javascriptCore.framework 这个库。 首先在建立一个UIWebView,代码如下: #import "webview.h" #import <JavaScriptCore/JavaScriptCore.h> @implementation webview -(id)initWithFrame:(CGRect)frame { self=[super initWithFrame:frame]; if( self ){ self.webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 310, self.bounds.size.width, 300)]; self.webview.backgroundColor=[UIColor lightGrayColor]; NSString *htmlPath=[[NSBundle mainBundle] resourcePath]; htmlPath=[htmlPath :@"html/index.html"]; NSURL *localURL=[[NSURL alloc]initFileURLWithPath:htmlPath]; [self.webview loadRequest:[NSURLRequest requestWithURL:localURL]]; [self addSubview:self.webview]; JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; context[@"log"] = ^() { NSLog(@"+++++++Begin Log+++++++"); NSArray *args = [JSContext currentArguments]; for (JSValue *jsVal in args) { NSLog(@"%@", jsVal); } JSValue *this = [JSContext currentThis]; NSLog(@"this: %@",this); NSLog(@"-------End Log-------"); }; } return self; } @end 在上面代码中,我们先引入了javascriptCore.framework这个库,然后webview那一套就不多说了,注意我加载一个静态网页。然后我用 JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; 获取该UIWebview的javascript执行环境。 在该javascript执行环境中,定义一个js函数,注意关键点来了,这个函数的执行体完全是 objective-c代码写的,也就是下面: context[@"jakilllog"] = ^() { NSLog(@"Begin Log"); NSArray *args = [JSContext currentArguments]; for (JSValue *jsVal in args) { NSLog(@"%@", jsVal); } JSValue *this = [JSContext currentThis]; NSLog(@"-------End Log-------"); }; oc端已经写好了,我们现在进行html部分。 看看UIWebView 中所加载的 html及其js代码是如何写的。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="description" content=""> <meta name="viewport" content="width=device-width; initial-scale=1.0"> <script type="text/javascript" src="index.js"></script> </head> <button id="hallo" onclick="buttonClick()"> 点击button</button> </body> </html> 上面html定义了一个button,然后引用index.js,点击button的响应函数为buttonClick() 。 该函数在index.js中定义,如下 function buttonClick() { jakilllog("hello world"); } 注意,jakilllog("hello world"); 函数名jakilllog才是我们oc端调用的 oc端调用时的代码。 context[@"jakilllog"] = ^() { NSLog(@"Begin Log"); NSArray *args = [JSContext currentArguments]; for (JSValue *jsVal in args) { NSLog(@"%@", jsVal); } JSValue *this = [JSContext currentThis]; NSLog(@"-------End Log-------"); }; 现在的流程是,点击button按钮,响应buttonClick(),去掉用buttonClick()这个方法 function buttonClick() { jakilllog("hello world"); } 然后执行jakilllog("hello world"); 并传参“hello world“ 这个函数。这个函数实现在我们oc端,所以调用方法: context[@"jakilllog"] = ^() { NSLog(@"Begin Log"); NSArray *args = [JSContext currentArguments]; for (JSValue *jsVal in args) { NSLog(@"%@", jsVal); } JSValue *this = [JSContext currentThis]; NSLog(@"-------End Log-------"); };
㈧ [iOS]一个静态库是用armv6生成的,我用xcode5.0打包的时候报错,提示好像说这个静态库不能armv7
静态库分为真机版和模拟器版本,打包用真几版本。
Architectures 选择第一个选项,不要选择arm64那个,选另外一个
㈨ iOS怎么重新打包静态库,使得模拟器和真机都可以使用
样对面引入静态库来开发非常方便因此非常需要打包成通用静态库方便调试1、学习查看静态库文件信息命令lipo -info xxxxxxxxxx.a 显示结i386mac上架构(模拟器) armv6/armv7ios架构(真机); 2、打包命令lipo -create "完整路径/lib.a" "完整路径/lib.a" -output "输出路径/lib.a" 执行成功使用查看命令查看