android集成sdk
❶ Android集成sdk后错误分析出现问题,求解答
第一步,添加ADT。
打开eclipse,进入工作界面后点击菜单栏的help,选择install new software.进入后点击添加(add)按钮。这里添加的ADT可以是你实现就下载好的ADT文件,也可以直接下载,如果是事先下载好的文件,那么选择下载的路径即可。这里组要注意的是,下载的文件一定是压缩文件。
第二步,加载ADT。
选择Add后,输入要输入的名字和地址。地址如一定要输入正确。输入地址后会搜索一会。稍等片刻,就会出现需要加载的内容,选择第一个开发工具(Develpe tools)中的所有组件。
这里需要注意的是如果eclipse提示错误,无法进行下一步的话那么就是eclipse的版本有问题,请更换其他版本在进行下载。
第三步,下载开发平台攻工具。
在安装ADT插件完成之后,在eclipse的菜单界面会多一个ADT的管理器,点击进入。
第四步,选择要开发的平台版本进行下载。
进入后会出现android的各种平台版本,一般是从2.1开始,也有更早的。现在的手机一般都是2.3以上的版本了,所以之前的版本可以不下载。因为高版本支持低版本,而低版本不能运行高版本,所以下载时不要只选择4.1或4.0而不下载其他的。
第五步,安装SDK版本插件。
点击安装后,会弹出安装界面,这时一定要现在接受全部,否则系统没安装玩一个就会停止继续问是否接受,所以直接点击accept all,这样就不会不断的提示安装了。
第六步,检查安装是否完成。
有时候虽然点击选择了某些插件,但是也会出现安装不上的问题,所以要检查一下是否有未安装成功的。如果想要再将这些未安装的按上,那么重新勾选后重复上一步即可。
❷ 一些Android开发中常用的第三方sdk
1、Share SDK官网 www.mob.com。免费集成注册短信验证码,友好的分享功能。
2、环信sdk。主要是集成,聊天相关sdk。
3、Ping++聚合支付告告。解决集成支付sdk。
4、友盟分享、统计。
5、网络统计
6、极光推送、个推推送
7、360加固服务
8、网络加固、统计服务弊友仔
9、融云通讯---即时通讯
10、容联 云通讯
11、极速数据、阿凡达数据、聚租汪合数据
❸ taro 怎么集成 android sdk
【CSDN 编者按】小程序这个由微信带头的产物,格外鲜明地体现了移动互联网的“时机”这个词,早在微信小程序之前,有力推轻应用的网络,有来自 HTML5 中国产业联盟的 DCloud 所主张的流应用,但最终却都已经淹没在了移动互联网的历史长河之中。唯有微信小程序风生水起,更是带动了巨头们的争相入场。
小程序迎来了专属于中国移动互联网的群雄逐鹿的时代。
本文作者王安即是流应用的创造者,作为移动领域的老兵,他依然在矢志不移地构建移动开发工具框架及生态,从原生应用到 HTML5 再到如今的小程序,他是这段历史的见证者、参与者。从这篇文章中,我们能够鲜活地看到小程序的技术演进历程,以及对于所有开发者来说,终将去往何处。
作者 | 王安
责编 | 唐小引
封图 | CSDN 付费下载自东方 IC
出品 | CSDN(ID:CSDNnews)
中国特色的移动互联网时代
伴随着QQ 小程序面向用户开放,这个手机端月活 7 亿的巨无霸正式入场。小程序,终于成为了超级 App 的标配。
盘点下已经支持小程序的超级 App:
微信、企业微信、QQ、支付宝、高德地图、手机淘宝、网络、网络贴吧、网络地图、今日头条、抖音……
这些璀璨耀眼的名字,背后都是巨大的流量。
在这群超级 App 的支持下,中国的移动互联网格局被彻底改变。
这个有中国特色的移动互联网时代,被称为“小程序时代”。
这是继手机支付后,中国的移动互联网领先世界的第二个代表事物。
中国的技术标准、开发者生态,第一次得到大规模的普及应用,而且很明显,小程序在功能和体验上均超过了 HTML5。
中国人能建立开发者生态吗?这个命题曾一度让人怀疑。
小程序完成了这一步突破,这是一场值得歌颂的中国技术生态发展史。
让我们来回顾下这场技术生态革命,是如何开始,又将要去向何方。
罗马不是一天建成的
小程序不是一天发明出来的
HTML5 于 2007 年在 W3C 立项,与 iPhone 发布同年。
乔布斯曾期待 HTML5 能帮助 iPhone 打造起应用生态系统。
但 HTML5 的发展速度并不如预期,它虽然成功地实现了打破 IE+Flash 垄断局面的目标,却没有达到承载优秀的移动互联网体验的地步。
于是在 iPhone 站稳脚跟后,发布了自己的 App Store,开启了移动互联网的原生应用时代。
随后的 Android,本来是基于 Linux 的 OS,与之同期的 MeeGo 等竞争对手采用 C + HTML5 的双模应用生态策略,然而 C 的开发难度太大,HTML5 体验又不行。Android 依靠 java 技术生态,在竞争中脱颖而出。
于是在移动互联网初期,应用生态被定了基调 —— 原生开发。
在那个时候,硬件不行,也没有其他办法,原生开发才能在低配硬件上带来商用体验。
但大家都在怀念 HTML,那种无需安装更新、即点即用,直达二级页面的特点,一直让人迷恋。
图源:CSDN 付费下载自东方 IC
国内有一批做浏览器的厂商,尝试去改进 HTML5,他们提出了轻应用的概念。
通过给 WebView 扩展原生能力,补充 JS API,让 HTML5 应用可以实现更多功能。
不过这类业务没有取得成功,HTML5 的问题不止是功能不足,性能体验是它更严重的问题,而体验问题,不是简单地扩展 JS 能力能搞定的。
这类业务发展的顶峰,是微信的 JS SDK。
作为国内事实上最大的手机浏览器,微信为它的浏览器内核扩充了大量 JS API,让开发者可以用 JS 调用微信支付、扫码等众多 HTML5 做不到的功能。
微信 JS SDK 说明文档
但微信团队对这套方案的体验仍然不满意,微信钱包栏目里打车、理财等很多应用虽然嵌入了 JS SDK,但每次点击要等半天白屏,让人用着很痛苦,他们在业内开始寻找新的解决方案。
业内早有专业团队看到了相同的问题。
与浏览器不同,Hybrid 应用是另一个细分领域。它们为开发者提供使用 JS 编写跨平台应用的工具,为了让 JS 应用更接近原生应用的功能体验,这个行业的从业者做出了很多尝试。
笔者所在的 DCloud 即是其中之一,我们提出了改进 HTML5 的“性工能”障碍的解决方案 —— 通过工具、引擎优化、开发模式调整,让开发者可以通过 JS 写出更接近原生 App 体验的应用。
多 WebView 模式,原生接管转场动画、下拉刷新、Tab 分页,预载 WebView……各种优化技术不停迭代,终于让 Hybrid 应用取得了性能体验的突破。
Hybrid 应用和普通的轻应用相比,还有一个巨大的差别:一个是 Client/Server,一个是 Browser/Server。简单来说,Hybrid 应用是 JS 编写的需要安装的 App,而轻应用是在线网页。
C/S 的应用在每次页面加载时,仅需要联网获取 JSON 数据;而 B/S 应用除了 JSON 数据外,还需要每次从服务器加载页面 DOM、样式、逻辑代码,所以 B/S 应用的页面加载很慢,体验很差。
可是这样的 C/S 应用虽然体验好,却失去了 HTML5 的动态性,仍然需要安装、更新,无法即点即用、直达二级页面。
那么 C/S 应用的动态性是否可以解决呢?对此,我们提出了流应用概念,把之前 Hybrid 应用里的运行于客户端的 JS 代码,先打包发布到服务器,制定流式加载协议,手机端引擎动态下载这些 JS 代码到本地,并且为了第一次加载速度更快,实现了应用的边下载边运行。
就像流媒体的边下边播一样,应用也可以实现边用边下。
在这套方案的保障下,终于解决了之前的各种难题:让 JS 应用功能体验达到原生,并且可即点即用、可直达二级页面。
如今看来,这已经变成了常识。但在当年,先驱们做了无数艰辛探索。
这套技术,需要让客户端引擎提前预置在手机上,就像流媒体的普及,建立在 Flash 的装机量巨大的基础上,那么普及这个客户端引擎就变得很重要。
2015 年,360 和 DCloud 合作,在 360 手机助手里内嵌了这个客户端引擎,推出了业内第一个商用的小程序,360 称之为 360 微应用。
微应用实现了在 360 手机助手的应用下载页面,同时出现了“秒开”按钮,点击后直接使用。
并且在 360 手机助手的扫码里,应用的分享里,都实现了扫码获得一个应用,点击分享消息获得一个应用。
在 360 手机助手 3.4 版本中上线的中国第一个小程序
为了做大生态,DCloud 把这套技术标准,捐献给了 HTML5 中国产业联盟,随后,联盟开始推动更多的超级 App 和手机厂商加入,共同推进动态 App 产业的发展。
然而事情并不顺利,巨头们有自己的利益诉求。虽然有一批厂商同意加入联盟共建生态,但最关键的角色,真正的国民应用“微信”,最终决定自立标准、自研引擎,当然技术原理与流应用是基本一致的。
2016 年 1 月 11 日,微信公开课,张小龙罕见露面,公布了微信应用号的计划,为这个大事件亲自站台。
2016 年 9 月 21 日,微信宣布更名应用号为小程序,面向首批开发者内测。从此,这个词被正式定了下来,“小程序”,成为后续一个时代的代名词。而“流应用”、“微应用”则淹没在历史长河中成为一个令人唏嘘的故事。
2017 年 1 月 9 日,微信公开课,小程序面向用户正式推出。
从此后,阿里巴巴、手机厂商联盟、网络、今日头条,陆续推出了自己的小程序平台,其中也有很多波折与故事,在有偶然、有必然的过程中,形成了今天的局面。
小程序大潮卷入了更多人,并形成了更大的浪潮,最终迎来了不可逆转的小程序时代。
生态难,难于上青天
发明能解决功能体验和动态性的技术方案,虽然难,但不是最难的事情。
最难的是开发者生态的建设。
最初 HTML5 中国产业联盟的策略是在 HTML5 上扩展强化,复用现有的 HTML5 生态。
当微信的标准完全自立重建时,业内人士都悬着一颗心。
在全球,基于 Web 的技术生态已经非常成熟,各种开发工具、框架、组件、模板...提升着开发者的效率。
小程序丢弃了国际标准组织 W3C 的 DOM 和 Window 标准,仅仅采用基础 JavaScript。这意味着 HTML5 生态的各种轮子无法复用,要完全重造一个新的小程序开发生态。
当初微信推广 JS SDK 时,是那么地顺其自然,开发者纷纷开始使用,因为对于开发者,只是在他们的 H5 版本上补充一些 API 而已。
而小程序初期,充满了开发者的质疑声:我的业务迭代那么久,让我重新做一个版本,你的生态到底能不能支撑我的投入?
微信用持续而快速的版本升级、高管的站台,告诉大家微信做小程序的决心,并最终通过 2017 年底的跳一跳,引爆了小程序。
从此大家的问题不再是我要不要做小程序了,而转向了:既然要做,怎么才能提升小程序的开发效率、降低开发成本?
任何一种技术,或者开发模式的演进,在不断成熟的过程中,都遵循着类似的成熟规律:
技术标准 -> 基础平台 -> 开发工具 -> 培训市场 -> 框架诞生 -> 周边生态逐步完善 -> 轮子之上的轮子
在 HTML5 生态里,已经发展到最终极的形态,比如 Vue 是一个重要框架,而基于 Vue 的各种丰富的 UI 库、测试框架,则是轮子之上的轮子。
多层轮子代表着生态的繁荣,也意味着开发者的开发效率更高。
可微信的全新标准出现时,它把开发者推回了原始社会,一切都要重来。
这在当时看来,并不是一个必然会成功的事情(其实直到现在,比如图表类轮子,小程序仍然比不过 HTML5)。
时至今日,讨论这个标准的选择对错已经没有意义。当支付宝、网络、今日头条都开始参考这个标准做小程序时,时代已经不可阻挡。
所幸,最终的结果是,中国人做成了。在国际标准之外,在中国,终于建立起了自己的技术生态。
并且这个生态,给用户带来了更好的体验,给开发者带来了更多流量和变现效率的提升,这是一个比 HTML5 更优秀的生态。
野蛮的技术生态成长速度
两年时间,中国的小程序开发者如何从原始社会进阶到现代文明?这也是一段有趣的历史。
我们来看看小程序技术生态是如何快速成长,走完上面所说的这套技术成熟路线,也就是从技术标准到轮子之上的轮子的。
在 Web 世界里,已经成熟到了原生 JS 用量很少的时代了,开发人员大量使用 Vue 等框架,并且在 Vue 的基础之上,又有更多轮子。
当中国的开发人员面临重头开始时,他们感受到效率对比的差距,既然时代已不可阻挡,那就拥抱它。勤劳的中国技术人开始蓬勃地建设起了小程序各种周边技术生态。
其中比较重要的是开发框架的迭代,我们看看每个小程序开发框架为什么会诞生、流行和衰落。
最初的微信小程序,一片荒蛮,一份文档 + 一个难用的 IDE,很多效率工具比如 npm、预处理器这些都不支持,而这些已经是大型项目离不开的工具。
于是,第一个标志性的框架出现了 —— WePY。
WePY 紧随微信小程序在 2017 年发布,原本是腾讯其他部门的一个个人工程师的作品。在那个年代,WePY 有效地解决了小程序不支持 npm、预处理器的痛点,被引爆后,腾讯官方才把这个框架收编到官方的 GitHub 下。
不过WePY也面临很多问题,它使用了私有语法,这让它在生态建设上面临很大难度,IDE 着色、语法提示、语法校验、格式化、人员招聘培训等各方面问题制约着它的流行和普及。
面对这些问题,人们开始思考,有什么更好的方式,可以复用现有技术生态来快速完善小程序生态?
这时候下一个重要框架借势诞生,美团前端在 2018 年初开源了MPVue。
MPVue 采用 Vue 语法来开发小程序,通过对 Vue.js 的底层改造,实现了编译到微信小程序。
MPVue良好地借助了 Vue 的技术生态,周边工具如 IDE、校验器、格式化等支持直接复用、人员招聘培训等生态建设压力大幅下降,受到了大量开发者的欢迎。
看着熟悉 Vue 的开发者终于有了趁手的轮子,那熟悉 React 的开发者怎会无动于衷?
京东团队是 React 的重度用户,还自研了 JDreact,于是他们开发了 Taro 框架,一款基于 React 语法编写小程序的框架。
但 Taro 并不是想简单做一个MPVue在 React 世界里的翻版,Taro 相比MPVue,想要解决更多重要问题。
Taro 面世较晚,此时微信、支付宝、网络、头条都已发布或宣传了自己的小程序,开发者面临一个多端开发和适配的问题。
于是 Taro 率先支持多端开发,它甚至还能发布到 H5 和 App。
图源:京东凹凸实验室
当时小程序领域还有一个重要变化,微信开始支持小程序自定义组件。
组件是一个成熟框架不可缺的东西,不管是 Vue 还是 React 都有丰富的组件生态。
在过去,MPVue时代,是把 Vue 组件也编译成页面模板,这带来一个很大的性能问题,在复杂页面里(比如长列表)使用组件,更新组件状态会导致整个页面的数据全部从 JS 逻辑层向视图层通讯一次,大量数据通讯会非常卡顿。
注意:小程序的逻辑层运行在 V8 或JSCore下,和视图层是分离的,通讯阻塞很容易引发性能问题。
于是 Taro 把 React 组件编译为新出的微信小程序自定义组件,这种组件在数据更新时,只会更新组件内部的数据,而不是整个页面更新数据,从而大幅减少了数据通信量。
这一轮的后浪推前浪很猛,Taro 在性能和多端支持上,都超越了MPVue。
看着 React 阵营取得如此成绩,Vue 阵营自然会继续追击。
我们基于 Vue 开发了 uni-app,它实现了自定义组件编译模式,并在算法上做了很多优化。另外,之前MPVue对 Vue 的语法支持度不太完善,比如过滤器等不支持,在 uni-app 中我们进行了解决。
同样,uni-app 也看到了前浪的其他问题:Taro 虽然迈出了多端的第一步,但多端支持能力比较弱,每个平台仍然各自开发大量代码。核心原因,是Taro 在 H5 端和 App 端,并不是一个完整的小程序技术架构,无法保持最大程度的统一。
于是 uni-app 在 App 端,使用了一个技术架构相同的小程序引擎,本身就可以直接运行小程序应用,这个引擎搭配小程序代码打包为 App,开发者一行代码不用改,可以同时发布小程序和 App。
当然,其 App 引擎从 Hybrid 应用起家,它提供的 API 要比小程序多很多,因为 App 的需求会比小程序丰富,它还支持把 WebView 渲染引擎替换为 Weex 渲染引擎。
之后 uni-app 又发布了 H5 版的小程序引擎,原理与小程序的 PC 模拟器相同,实现了良好的跨 H5 版的发布。于是 uni-app 比较完美地实现了开发一次,7 个平台发布。
第一层轮子就这样迅速发展了起来,Web 世界里最成熟的 Vue、React 技术生态被导入了小程序开发生态中。然后轮子之上的轮子开始如火如荼的建设。
以 UI 库为例,之前的 UI 库,有 Vue 库、React 库,有 PC 库、H5 库和小程序库,种类繁多,甚至说混乱。
比如在 Vue 阵营中,Vant 和 iView 这两个 UI 库,都是同时维护两个版本,它们即有 H5 版,又有小程序版。
不止框架作者麻烦,开发者想在多端使用这些 UI 库时,会发现在不同端还需要引入不同的 UI 库,写法都不一样,这让开发者很崩溃。
既然已经可以多端开发应用,于是在多端开发的领域里,开始出现轮子之上的轮子,多端 UI 库。
首先是 Taro 推出了 Taro UI,实现了 H5 和小程序 UI 库的统一,不过可惜 Taro UI 不支持 App 端。
然后 uni-app 推出了 uni UI,这个 UI 库同时支持多家小程序、H5、App。
由于 uni-app 和 MPVue 同属 Vue 阵营,它们的组件是互通的。于是这两家联合举办了一场插件大赛,建立了插件市场。
在中国的前端开发者领域,有很多和国外不一样的地方:一个是国内有小程序,第二个是国内 Vue 的开发者体量远超过 React 和 Angular。这里面很大的原因,是 Vue.js 的作者尤雨溪,是中国人。
Vue 和 React 网络指数对比
在庞大的 Vue 用户体量支持下,uni-app 和 MPVue 的周边生态迅速发展起来,开发工具、周边轮子、教育培训等生态快速完善。目前在 Vue 阵营下,开发者在 Web 生态下所需的轮子,在多端开发下基本也都有了。
短短两年时间,小程序开发生态里几拨迭代,轮子之上的轮子不断涌现,快速进入了成熟期。
结语
产业还在继续发展,每当底层有重大技术变更时,上层框架世界就会发生新机会。
当年 HTML5 标准不统一,浏览器兼容性问题严重,诞生了 jQurey 的机会。而在移动互联网下半场,浏览器兼容已经不再是核心问题,jQurey 的地位被更适合移动互联网的 Vue 替代。
我们不知道未来还会有什么新的框架出世,但我们知道方向:
对于开发者而言,总是会向着更高的开发效率、更高的性能、更高的投入产出比前进。
对于开发商,目前的小程序,虽然发展了 2 年,但流量增长空间仍然巨大,微信之外,很多超级 App 的势能将逐渐释放,整个小程序产业的日活总量有数亿的提升空间。
如果开发商能追上这拨红利,就能获得更多增长。而多端框架的出现,可以帮助开发商更好的把握这拨红利。
中国的技术发展,此刻正在经历一个分水岭,从全面的技术进口,到开始建设自己的标准和开发者生态。迟早,会开始向外输出,引领世界的进步。
不管中美是否开打贸易战,这一转变都是必须做的事情。
中国的移动支付、小程序、5G,很多领域已经走在了全球前面。中国人发明的 Vue 已经在影响全球。
虽然还有很多困难仍需克服,但我们每个开发者,都是新时代的见证者,更是新生态的建设者!
作者简介:王安,DCloud 公司创始人,HTML5 中国产业联盟秘书长。2003 年开始从事移动互联网工作,十几年编程和商业经验,连续创业者。
声明:作者独立观点,不代表 CSDN 立场
❹ Android 集成三方SDK编译时classes.jar文件冲突
这几天的任务是将mapbox的工程合到程序中去,但是合并过程却出现了问题
合并方法:在app的build.gradle中添加
dependencies {
compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:0.7.4@aar'){
transitive=true
}
}
但是合并后会报错:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
这个错误是由于jar包冲突,解决方法如下:
方法一:找到冲突包,将冲突包删除,一般冲突包为'com.android.support:appcompat-v7:22.2.0'或者'com.android.support:support-v4:22.2.0',但是我删除冲突包后,依然报错,于是使用方法二
方法二:因为我的冲突包是'com.android.support:support-v4:22.2.0',所以找到项目根目录-build-intermediates-dex-cache-cache.xml文件,将其中跟v4有关的全部删除,然后clean project,然后将compile改为provided如下:
dependencies {
compile 'com.vividsolutions:jts:1.13'
compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.jakewharton:disklrucache:2.0.2'
provided 'com.android.support:support-v4:21.0.0'
}
❺ 如何使内测应用集成蒲公英 Android SDK,实现自定义反馈信息功能
注册应用获取 App ID
App ID:唯一标识一个应用的 ID,在蒲公英上的每一个 App 都有一个唯一的 App ID,开发者可以在应用管理页面首页查看。
导入 SDK
Eclipse用户
下载蒲公英 Android SDK(包含异常上报,在线更新,摇一摇反馈等功能)。
将 jar 包复制到工程的 libs 目录下面。
Android Studio 用户
添加代码到 project 下的 build.gradle 文件中:
allprojects {
repositories {
jcenter()
maven { url "https://raw.githubusercontent.com/Pgyer/mvn_repo_pgyer/master" }
}
}
然后在 mole 下的 build.gradle 文件中添加依赖即可:
dependencies {
compile 'com.pgyersdk:sdk:2.4.0'
}
Android Studio 工程示例代码
Android Studio 用户除了可以使用以上方法集成 SDK 外,也可以使用和 Eclipse 用户相同的方法来集成 SDK 。
配置 AndroidManifest
<!-- 必选-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取网络状态 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 网络通信-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 获取设备信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取MAC地址-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 读写sdcard,storage等等 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 允许程序录制音频 -->
<!-- 可选-->
<uses-permission android:name="android.permission.READ_LOGS" /> <!-- 获取logcat日志 -->
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 可选-->
<activity android:name="com.pgyersdk.activity.FeedbackActivity"/>
<!-- 必选-->
<meta-data
android:name="PGYER_APPID"
android:value="" >
</meta-data>
</application>
上报 Crash 异常
一、注册Crash接口(必选)
1、在 application 中集成,可以有机会捕捉更多的异常(推荐)
import com.pgyersdk.crash.PgyCrashManager;
import android.app.Application;
public class PgyApplication extends Application {
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
PgyCrashManager.register(this);
}
}
在 AndroidManifest.xml 注意修改 android:name=".PgyApplication"此处的名字对应上面继承 Application 的类名。
<application
android:name=".PgyApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
</application>
在 activity 中集成
import com.pgyersdk.crash.PgyCrashManager;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PgyCrashManager.register(this);
}
}
解除注册可以调用以下方法:
PgyCrashManager.unregister();
二、符号表配置(可选)
通过 progurad 工具混淆时,工程目录下会自动生成符号表文件 mapping.txt
在后台配置符号表文件
上报 catch 异常
try
{
}
catch (Exception e)
{
PgyCrashManager.reportCaughtException(MainActivity.this, e);
}
❻ 【Android】集成乐播SDK实现投屏功能(一)环境配置
在App模块的build.gradle文件下添加如下配置
如果集成过程中觉得aar的体积过大可以删除过滤掉的CPU架构的so文件夹。将aar文件后缀修改成zip然后用压缩软件打开并删除jni目录下非必须的so文件夹,然后保存把后缀再次修改成aar。
或者
下一节:关键方法配置
❼ android中第三方广告sdk集成
Android中第三方SDK集成方式通常都示例代码,直接复制就可以用的,例如网络推广平台,那就集成好的sdk只需要改一下自己的key即可使用,集成非常简单。
❽ android集成分享sdk后怎么代码混淆
为了保护代码被反编译,android引入了混淆代码的概念
1.设置混淆
在工程下找到project.properties文件
在文件中加入proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt这个是系统的
也可以用自己的混淆文件(这样就可以配置一些自己的东西),去sdk.dir}/tools/proguard/ 下复制proguard-android.txt文件到本地工程中
然后设置成proguard.config=proguard-android.txt
project.properties文件:
[java] view plain
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
proguard.config=proguard-android.txt
# Project target.
target=android-17
-injars androidtest.jar【jar包所在地址】
-outjars out【输出地址】
-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】
-optimizationpasses 5
-dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】
- 【指定不去忽略非公共的库类。 】
-dontpreverify 【不预校验】
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【优化】
-keep public class * extends android.app.Activity【不进行混淆保持原样】
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public abstract interface com.asqw.android.Listener{
public protected <methods>; 【所有方法不进行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【对该方法不进行混淆】
}
-keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】
native <methods>;
}
-keepclasseswithmembers class * { 【保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。】
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {【保护指定类的成员,如果此类受到保护他们会保护的更好 】
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {【保护指定的类文件和类的成员】
public static final android.os.Parcelable$Creator *;
}
=====================================常见异常===================================
参考:http://blog.csdn.net/vrix/article/details/7100841
加入第三方jar包之后常出现的几个异常:
proguard returned with error code 1.See console
情况1:
Proguard returned with error code 1. See console
Error: C:/Documents (系统找不到指定文件)
后来发现是因为将整个工程放到了桌面上,而桌面的目录是C:/Documents and Settings/Administrator/桌面,在这里面有空格,而proguard进行发编译的时候是不允许有空格的
如果换了正确路径还不好用的话,直接删除proguard就好了
注意:SDK和程序路径最好不要有空格符
情况2:
Proguard returned with error code 1. See console
异常:
java.lang.
解决办法:将proguard.cfg中的"-dontpreverify"改成“-dontoptimize”
参考文章:http://groups.google.com/group/android-developers/browse_thread/thread/eca3b0f5ce6ad00f
我把项目中生成的proguard文件夹(此时文件夹是空的)删掉,然后再重新运行项目,就OK 了。
情况3:
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] Proguard returned with error code 1. See console
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] java.io.IOException: Can't read [proguard.ClassPathEntry@106082] (No such file or directory)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:230)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:200)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:178)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.execute(InputReader.java:100)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.readInput(ProGuard.java:195)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.execute(ProGuard.java:78)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.main(ProGuard.java:499)
抛出这样的异常的原因是第三方jar的引用路径不对,没有找到这个需要忽略混淆的jar包。
========================官方文档翻译========================================
原文
http://developer.android.com/guide/developing/tools/proguard.html
混淆器(ProGuard)
在本文中(In this document)
Enabling ProGuard
Configuring ProGuard
Decoding Obfuscated Stack Traces
Debugging considerations for published applications
参见
ProGuard Manual ?
ProGuard ReTrace Manual ?
混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比较小的.apk文件,该文件比较难进行逆向工程。因此,当你的应用程序对安全敏感(要求高),例如当你授权应用程序的时候,混淆器是一种重要的保护手段。
混淆器被集成在android 构建系统中,所以你不必手动调用它。同时混淆器仅在发布模式下进行构建应用程序的时候才会运行起来,所以在调试模式下构建程序时,你不必处理混淆代码。让混淆器运行起来是可选择的,但是推荐选上。
这个文档描述了怎样启用并配置混淆器,以及使用跟踪(retrace)工具对混淆的堆栈跟踪信息(stack traces)进行解码。
启用混淆器Enabling ProGuard
当你新建了一个Android工程之后,一个proguard.cfg文件会在工程的根目录下自动创建。这个文件定义了混淆器是怎样优化和混淆你的代码的,所以懂得怎样根据你的需要来定制是非常重要的。缺省的配置文件仅覆盖到了通常情况,所以根据你的需求,很可能需要编辑它。接下来的内容是关于通过定制混淆器配置文件来对混淆器配置。
为了让启用混淆器作为Ant或者Eclipse构建过程中一部分,可以在<project_root>/default.properties文件中,设置proguard.config属性。路径可以是绝对路径或者工程根目录的相对路径。
如果你让proguard.cfg文件在缺省位置(工程的根目录),你可以像这样指定位置:
proguard.config=proguard.cfg
同样,你可以把该文件放到任意的位置,并指定它的绝对路径。
proguard.config=/path/to/proguard.cfg
当你在发布模式下,或者通过运行ant release,或者通过使用Eclipse中的Export Wizard构建你的应用程序的时候,构建系统都会自动地去检查proguard.config属性是否被设置了。如果被设置了,混淆器在把所有东西打包成.apk文件之前,自动地对应用程序字节码进行混淆处理。而在调试模式中构建则不会调用混淆器,因为那样调试会更加繁重。
运行混淆器之后输出的文件有:
mp.txt
描述.apk包中所有class文件的内部结构。
mapping.txt
列出了源代码与混淆后的类,方法和属性名字之间的映射。这个文件对于在构建之后得到的bug报告是有用的,因为它把混淆的堆栈跟踪信息反翻译为源代码中的类,方法和成员名字。更多信息,查看解码混淆过的堆栈跟踪信息。
seeds.txt
列出那些未混淆的类和成员。
usage.txt
列出从.apk中剥离的代码。
这些文件放在以下目录中:
注意:每次在发布模式下构建时,这些文件都会被最新的文件覆盖。所以每次发布程序时候,为了反混淆来自构建时产生的bug报告,请保存这些文件的一个拷贝。对于为什么要保存这些文件的重要性的更多信息,请查看程序发布调试注意事项。
混淆器配置(proguard config)
某些情况下,proguard.cfg文件的缺省配置可以满足需求了。但是,对于混淆器来说,大多数情况做出正确的分析是困难的,并且它或许会删除在它看来是无用的,但对于程序来说却确实需要的代码。一些例子如下:
一个仅引用于AndroidManifest.xml文件的类。
一个通过JNI调用的方法。
动态引用的属性和方法。
<project_root>/bin/proguard 当你使用Ant时
<project_root>/proguard 当你使用Eclipse时
解码混淆过的堆栈跟踪信息(Decoding Obfuscated Stack Traces)
当混淆代码并输出了一个堆栈调试信息时,这些方法名字是混淆过的,虽然可以进行调试,但是调试变得困难。幸运的是,每当混淆器运行时候,它都会输出到文件<project_root>/bin/proguard/mapping.txt中,该文件包含了从原始类,方法和属性名字到混淆后名字的映射。
Windows系统中retrace.bat脚本命令或者Linux和Mac OS X系统中retrace.sh脚本命令能把混淆后的堆栈调试信息转换为可以理解的文件。它被放在<sdk_root>/tools/proguard/目录下。运行retrace工具的命令语法是:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
如果你没有为<stracktrace_file>指定值,那么retrace工具从标准输入读取。
已发布应用程序的调试注意事项(Debugging considerations for published applications)
保存好每一个已发布给用户的程序的mapping.txt文件。通过保存发布构建版本的mapping.txt文件拷贝,确保当用户碰到bug,并把混淆后的堆栈调试跟踪信息提交给你时,你可以进行调试从而修复问题。程序的mapping.txt文件在每次发布构建时都会被覆盖,所以你一定要注意保存正确的版本。
例如,假设你已经发布了一个应用程序并在继续在新的版本中开发添加新的功能。接着你马上启动混淆器并创建一个新的发布版本。该操作把mapping.txt文件覆盖了。一个用户提交了来自当前发布版本的bug报告,该报告包含了堆栈调试信息。你再也不能对用户的堆栈信息进行调试了,因为这个对应用户本机上版本的mapping.txt文件不存在了。其他覆盖mapping.txt文件的情况还有很多,所以对于每一个可能需要调试的版本,你都要确保有一份拷贝。