首页 文章 精选 留言 我的

精选列表

搜索[快速],共10000篇文章
优秀的个人博客,低调大师

汇报时,如何让老板快速抓住重点? | 黄金三步法

阿里妹导读:对事物的归类分组是我们人类的天性,我们的大脑会自动将发现的所有事物以某种持续组织起来。但如何组织才能帮助我们解决工作和生活中出现的各种复杂问题?今天,我们请阿里高级技术专家张建飞分享他的黄金三步法。 我们经常说软件开发中,没有银弹。的确,单看软件领域,很少有什么方法论是普适的。然而再拔高一些,跳出软件的范畴,有一些东西是普适的。 最近,我有一个新发现:我发现“归类分组”在我们解决问题中起着巨大的作用。而这里的“问题”不仅仅限于软件设计,从日常生活、产品设计到公司战略、生物分类。都有它的身影。 这是为什么呢?究其原因可能有两个: 1.归类分组是抽象的重要方法,解决复杂问题我们离不开抽象。2.归类分组是结构化的重要步骤,结构化的表达离不开归类分组。 当然,归类分组要先有素材可以“归类”才行。因此,完整的方法论是这样的,我给他起了一个

优秀的个人博客,低调大师

使用jenkins的jacoco插件快速实现统计单元测试覆盖率

安装jenkins wget http://mirrors.jenkins.io/war-stable/2.176.4/jenkins.war java -jar jenkins.war 参考 通过java方式安装jenkins jenkins可选插件为空的解决方式或jenkins不能联网 安装git、maven、jacoco等插件 需要安装Git plugin和JaCoCo plugin 配置maven 配置单元测试任务 spring-petclinic是一个经典的spring boot项目,这里我们也选择该项目来做单元测试并统计测试覆盖率。项目地址如下:https://github.com/spring-projects/spring-petclinic。 在jenkins里选择New Item链接 进入新建任务页面如下 输入spring-petclinic-uttest,选择“构建一个maven项目”,点“OK”按钮 General选项卡 保留默认值 Source Code Management选项卡 Repository URL输入https://github.com/spring-projects/spring-petclinic.git Build Triggers选项卡 保留默认值 Pre Steps选项卡 Goals and options 文本框输入 “clean verify”。 Post-build Actions 选项卡 点击 Add post-build-Actions下拉选择框,选择“Record JaCoCo coverage report”条目 保持默认选项,最后点保存按钮即可 执行单元测试任务,查看单元测试覆盖率 根据网络情况和本任务是否首次执行,该任务可能执行时间比较长,且容易中断报错,我这次是在阿里云主机上新搭的jenkins,一共执行了4次,才成功如下图 点Coverage Trend 链接,右下方显示 JaCoCo Coverage Trend 如下图 继续点击 JaCoCo Coverage Trend 区域任意位置,显示单元测试覆盖率报告如下图 总结 本文通过具体一个实例讲解了如何利用jenkins触发单元测试执行,并使用jacoco插件来统计单元测试用例覆盖率。

优秀的个人博客,低调大师

大数据开发学习路线,如何快速成为大数据工程师?

其实大数据并没有我们想象中的那么高冷。只要方法得当,学习全面系统,零基础也可以高效胜任大数据开发的工作 大数据开发,是一个刚刚开始发展的行业,而且技术经常更新,所以大数据的发展会长期发展,但要求程序员要跟着行业发展不断学习进步。一个新技术的出现就意味着要学习研究。 2.都知道大数据开发薪资很高,高的原因是什么,是因为技术门槛高难学,还是仅仅是因为目前会的人少,所以导致虚高 大数据开发学习可以按照以下内容进行学习: 第一阶段:JavaSE+MySql+Linux 学习内容:Java 语言入门 → OOP 编程 → Java 常用Api、集合 → IO/NIO → Java 实用技术 → Mysql 数据库 → 阶段项目实战 → Linux 基础 → shell 编程 学习目标:学习java语言,掌握java程序编写、面向对象程序开发,掌握MySql体系结构及核心编程技术,打好 Linux 基础,为后续学习提供良好的语言基础。 第二阶段:Hadoop 与生态系统 学习内容:Hadoop → MapReduce → Avro → Hive → HBase → Zookeeper →Flume → Kafka → Sqoop → Pig 学习目标:掌握大数据学习基石Hadoop、数据串行化系统与技术、数据的统计分析、分布式集群、流行的队列、数据迁移、大数据平台分析等 第三阶段:Storm 与Spark 及其生态圈 学习内容:Storm → Scala → Spark → Spark SQL → Spark Streaming →Spark 机器学习 学习目标:让大家拥有完整项目开发思路和架构设计,掌握从数据采集到实时计算到数据存储再到前台展示,所有工作一个人搞定!并可以从架构的层次站在架构师的角度去完成一个项目。 第四阶段:其他 学习内容:Mahout 机器学习→ R 语言→Python 学习目标:机器学习领域经典算法的实现,熟练使用 R语法和统计思维,可以基于具体问题建立数学模型,掌握python技术与数据分析,将数据结果以可视化的直观方式展示给目标用户。 第五阶段:项目实战、技术综合运用 学习内容:某手机公司bug 系统 → 传统广告怎么用大数据 → 类互联网电商网站 → 网站日志收集清洗系统 → 网站流量统计分析系统 学习目标:具备企业级大型完整项目开发能力,综合运用大数据分析知识,完成数据分析、收集、展示的完整流程。

优秀的个人博客,低调大师

[python作业AI毕业设计博客]selenium工具python快速入门1简介

概述 Selenium是一个开源自动化测试套件,适用于跨浏览器和平台的Web应用程序。 它是一组软件工具,每种工具都有不同的方法来支持测试自动化。 Selenium3.*的组件如下: Selenium IDE(集成开发环境 Integrated Development Environment) Selenium WebDriver Selenium Grid Selenium3.停止直接使用Selenium RC。 Selenium Core已从最新版本的Selenium 3.中完全删除。 官网:http://www.seleniumhq.org/ Selenium开源,基于Apache 2.0 License。github: https://github.com/SeleniumHQ/selenium Selenium IDE Se

优秀的个人博客,低调大师

克拉克拉(KilaKila):借力阿里云快速构建短视频推荐系统

作者:阿里云MVP田亮 一、产品背景克拉克拉(KilaKila)是国内专注二次元、主打年轻用户的娱乐互动内容社区软件。KilaKila 推出互动语音直播、短视频、对话小说等功能,满足当下年轻用户个性化、碎片化的文娱需求。其中短视频每天都有海量的视频素材产生,这对用户造成了严重的信息过载,难以从中自主挑选感兴趣的内容。每一位视频内容的消费者同时也是生产者,期望自己的作品能够被更多的志同道合者所看到,获得最大的曝光度。为解决以上矛盾,考虑构建个性化推荐系统,在不需要用户明确说明更多信息的情况下仅仅依靠分析用户的历史行为数据,为用户推荐他可能感兴趣的内容。同时,推荐系统能够有效挖掘长尾内容,使一些小众的主题作品能够获得尽可能多的展示机会。面对以上业务诉求,经技术调研后决定使用阿里云PAI平台搭建基于KilaKila二次元UGC的个性化智能

优秀的个人博客,低调大师

阿里云Redis助力新东方乐词业务快速稳定发展

背景介绍 乐词是新东方倾情打造权威英语单词背记APP,业务涵盖初中、高中、新概念、英语四六级、考研、雅思、托福、GRE、SAT、ACT 、GMAT、托业、商务英语等英语单词库,科学规划词根背记,离线背单词随时学,权威详尽单词解析,全新考试干货课程,群组背记英语单词,完整的视频教学体系为用户提供全方位的单词学习体验。乐词系统涵盖词书、背词、查词、视频课程、活动、用户、在线支付等10多个核心业务模块,用户使用日活10w+,为了给用户提供稳定可靠的服务,对我们系统的可用性提出了更高的要求。Redis作为业界目前流行的Key-Value型NoSQL存储组件,可以帮我们解决面临的技术挑战。因我们属于创业型项目,自建系统以及自行运维意味着前期较大的投入以及过高的运维成本,随着业务规模的扩张,资源水平扩展以及垂直扩展也是未来无法避免的痛点,所以我

优秀的个人博客,低调大师

使用PHP辅助快速制作一套自己的手写字体实践

一、背景 笔者以前在网上看到有民间高手制作字体的相关事迹,觉得把自己的手写字用键盘敲出来是一件很有意思的事情,所以一直有时间想制作一套自己的手写体,前几天在网上搜索了一下制作字体的方法,发现技术上并不是太难,结合了自己PHP方面的开发经验,很快的做出了一套自己的手写字体。 制作字体的流程大致是这样,首先我们需要确定那些字体需要自己写,确定了字体之后将这一批字利用工具做成一个模板,不过汉字的总量非常的多,搜索了一下大概在10万字左右,这个工程量太大,因此我们需要找出一批属于自己常用的字体(大概1700字左右),或者自己所常见到的字体,这个过程就需要用PHP来分析,分析出来之后再将其提取出来,做成模板。 在这篇文章当中笔者将完整的记录制作字体过程,其中会将用到的PHP代码公布出来,方便其他读者使用,也给自己留个备份。 二、操作概要 提取常用汉字 制作字体模板 生成字体文件 三、提取常用汉字 做一套字体的工作量是比较大的,因为汉字数量比较多,不过我们可以将我们常用的汉字提取出来,优先将这写汉字的做出来,后面不常用的字体空闲时再去累加,这里我们用到了PHP来辅助我们提取常用的汉字。 3.1 收集数据 在网络中有各种2000个常用汉字之类的doc文档,但是每个人所用到的却不一样;因此我们需要收集一批自己经常接触的字体数据,比如可以从自己的笔记、博客、聊天数据、通讯录中提取;比如笔者便将以往的笔记、文章、通讯录收集了起来,如下图则是笔者过往的文章列表 我们将文章内容复制到txt文件当中,然后保存到某一个文件夹当中,如下图所示 3.2 去除杂项 收集了文章之后,里面有很多杂项,比如空格和换行,这些内容我们并不需要,如下图所示 此时可以通过正则表达式将不需要的内容删除,笔者使用的匹配非中文的正则表达式如下: [^\u4e00-\u9fa5] 笔者平时开发习惯使用phpstorm这款IDE,因此这里教大家使用此IDE来删除非中文字符;按住键盘 ctrl+r,替换文本内容,然后将正则表达式放入查找项当中,并且勾选regex,此时所有非汉字内容会被选中,如下图所示: 当笔者点击Replace all按钮时,变删除了所有非中文字符,此时我们的内容应该只有一行内容,如下图所示 3.3 字体去重 在整理好文字之后,我们现在需要对里面的内容进行去重,保证每一个汉字只保留一个,因为我们字体模板每个字只需要写一次就可以;因此可以使用PHP对汉字进行去重,代码如下所示 <?php //汉字去重函数 function mb_str_split(string $string) { return implode('', array_unique(preg_split('/(?<!^)(?!$)/u', $string))); } //将收集的汉字数据读取出来 $word = file_get_contents('ziti/shoulu.txt'); $word .= file_get_contents('ziti/phpsafe.txt'); $word .= file_get_contents('ziti/reming.txt'); $word .= file_get_contents('ziti/2000.txt'); $word .= file_get_contents('ziti/https.txt'); $word .= file_get_contents('ziti/wangwen/wuxian.txt'); $word .= file_get_contents('ziti/wangwen/qixi.txt'); $word .= file_get_contents('ziti/wangwen/qiantan.txt'); $word .= file_get_contents('ziti/wangwen/jiaoyi.txt'); //执行去重 echo mb_str_split($word); 当这段代码被执行之后,会返回去重后的结果,笔者执行结果如下图: 从图中可以看出,笔者已经得到了一批去重后的文字 3.4 统计并排序 去重之后已经得到了一批独一无二的汉字,但是字数实在太多,达到了1730个汉字,可能一下写不完,不过作为开发者当然是要讲究高效率的;所以可以通过PHP来进行优先级的计算,把最常用到字体排在前面,因此笔者需要写一段PHP代码。 3.4.1 汉字拆分数组 首先笔者将去重后的字符串拆分成数组,因为汉字比较特殊,所以需要自定义一段代码,参考代码如下: //把汉字拆分为数组 function ch2arr(string $str) { $length = mb_strlen($str, 'utf-8'); $array = []; for ($i = 0; $i < $length; $i++) { $array[] = mb_substr($str, $i, 1, 'utf-8'); } return $array; } 3.4.1 排序后筛选 下载笔者需要通过foreach来遍历统计每个字出现的次数,并且安装倒序排序,如果limit大于0,还可以筛选重复次数大于0的汉字,代码如下 function strSelect(string $string, string $word, $limit = 0) { //把字符串分割为数组 $cnList = ch2arr($string); foreach ($cnList as $val) { $result[$val] = substr_count($word, $val); } //重复高的出现在最前 arsort($result); //筛选字符串 $ret = ''; foreach ($result as $key => $val) { if ($val > $limit) { // $ret .= "$key:$val".PHP_EOL; //查看每个字重复的次数 $ret .= $key; } } return $ret; } 在前面两个方法写完之后,笔者只需要调用一行代码即可得出最常用的一些字符,也可以筛选结果,调用代码如下: echo strSelect($str, $allStr, 1); 代码执行之后,笔者将会安装汉字出现的次数进行排序,把最常见的字符排在前面,并且筛选出现次数大于1的才返回,返回结果如下图所示: 从图中可以看到字体顺序已经发生了很大变化,数量明显少了很多。 参考代码地址: http://tuchuang.songboy.net/ziti/code.txt 四、制作字体模板 把自己最常接触的汉字找出来之后,需要制作一套字体模板,这套字体模板的用处是让手写汉字后,顺利的找到对应的汉字,这里需要依靠第三方网站提供的一些功能。 4.1 字体文件编码 现在笔者将PHP计算的字符写入到一个txt文件当中,参考命令如下 php quchong.php > result.txt 保存之后,还需要将它的编码设置为UTF-8;操作步骤为:首先用windows的记事本打开,然后将文件另存为UTF-8编码的文件,笔者用mac系统怎么也不行,使用windows很顺利的就完成了,建议使用windows,如下图所示 4.2 生成字体模板 现在笔者需要将之前保存的汉字,用固定格式的模板展现出来,后期需要用此模板生成字体文件,这里需要用到一个网站来辅助,网站地址如下 http://www.flexifont.com/ 网站需要注册,注册过程笔者这里将不做描述;在登陆之后点击我的字体,可以看到当前的字体模板,选择自定义,参考下图 点击自定义之后,笔者能看到一个上传txt文件的表单,如下图所示 上传完成之后,笔者回到列表当中,就可以看到刚才创建的字体模板,如下图所示 4.3 手写字体 笔者将刚才创建的模板下载到电脑当中,并解压该文件,解压后的结果如下图所示 这里一定要打开这些图片确认无误,确认这些字和上传的字能对应的上,如果里面的字明显不是刚才上传的,很有可能是你上传文件的编码不正确,笔者生成的字体模板如下图所示 确认无误后需要将这几张图片打印下来,最好自己有打印机,笔者之前买过一款惠普的1121打印机,总价格不到200块钱,建议各位读者也买一个,有打印机有时候真的很方便; 打印出来之后,就需要笔者将对应文字意义手写。 五、生成字体文件 手写字体是一个比较辛苦的过程,手写完成之后还有一些步骤,如果读者比较熟悉用手机编辑图片,那么这一步很快就能完成,如果不熟悉,就详细的看一下笔者的处理方法吧。 5.1 拍照 首先需要将刚才手写的文字进行拍照,拍照的时候注意尽量平着拍,需要把4个黑边拍进去;笔者使用的是iPhone手机,因此非常建议使用iPhone的读者将相机的网格线功能打开,因为这样就可以看出手机是否是平着拍的,在设置->相机->网格线,参考如下图 设置好之后,笔者再次打开相机,就能看到网格线,如下图所示 中间的十字架如果是黄颜色的,说明笔者当前是平着拍摄的,这样拍照的时候图片就不会那么斜了。 5.2 处理图片 虽然在拍照的时候已经很用心的去拍摄,但拍的过程当中难免有一些不满意,这个时候可以用手机简单处理一下,笔者这里依然以iPhone手机为例 打开相册查看图片的右上方有一个编辑功能,如下图所示 点击编辑之后,在左下角有一个方块按钮,点击之后可以对图片进行放大缩小的跳转,以及旋转,对齐等功能,读者可以自己去操作一番,将图片尽量调整到理想的状态。 笔者处理后的效果如下图所示 5.3 上传并生成字体 现在打开字体上传页面,把笔者已经处理过的图片上传到手写体网站当中了,URL地址如下 http://www.flexifont.com/flexifont-chn/add_font/ 如下图所示,手写体站点的一些规则 需要记住别选择错模板(笔者一开始没选择对,还以为系统出问题了),然后把字体上传,上传完成之后,可以点击查看队列,看看当前的字体处理状态,URL地址如下 http://www.flexifont.com/flexifont-chn/queuers/ 笔者上传字体后,不到1分钟便已经处理完成,处理完成之后,可以在我的字体下方看到字体列表,如下图所示 六、使用字体 当字体生成完成之后,笔者安装字体文件即可 6.1 安装字体 安装字体在mac下和widnows下都非常简单,首先看看mac下安装方法,下载字体之后,可以直接双击字体文件,会看到如下图 笔者直接点击安装字体就可以了 再说说windows下安装,其实也只需要双击字体文件即可,然后点击安装,如下图所示 不过笔者在电脑在安装字体的时候出现了错误,提示字体无效,于是我换了一种方式;右击鼠标->为所有用户安装 又好了,原因未知,如果读者出现这种情况也可以试试。 6.2 在WPS中使用 笔者很多时候都会使用到word文件,读者喜欢用wps,那么如何在WPS中使用“轻松体”呢,其实非常简单,在随便输入一些文字之后,在上方选择“轻松体”即可,效果如下图所示 如果发现某个字体不是你手写的风格,那应该是这个字体不再你的字体模板当中,你可以生成一个新的模板,然后合并之前的字体即可。 6.3 补充 在手写体当中默认的模板也不错,读者也可以去尝试一下,另外不仅仅汉字可以做手写体,符号也可以。 作者:汤青松 微信:songboy8888 日期:2018年8月20号

优秀的个人博客,低调大师

“互联网+”英特尔,快速响应让零售更贴心

第十届商业信息化行业大会今天在深圳拉开帷幕。英特尔携手国内领先的POS和智能POS产品生产商、板卡厂家以及方案提供商等众多生态系统合作伙伴,联合展示了多款智能零售创新产品和解决方案,全面阐释了智能零售和智能收银收单新定义,以及支付终端在其中所扮演的重要作用。 从以连锁店为代表的传统实体零售,到以电商为代表的在线零售,再到当前虚实结合的智能零售模式,全球零售业正在经历一场史无前例的剧烈变革。2017年,资源整合的步伐正在不断加快,线上与线下的融合越发紧密。直到2020年,零售物联网市场的规模将达到356.4亿美元[1],零售商越来越多的通过物联网解决方案来提高运营效率,并在线上和线下创造令人兴奋的全新用户体验。而作为技术的前沿的支付,受到愈演愈烈的智能零售风潮以及新兴市场的催化,也在经历一场全新的转型:从单一应用、单一功能和体验,升级至集成多种应用和功能、支持多屏触控和多种操作系统,有效联动智能商店的其他设备,从而实现更多基于数据分析和其他相关的增值应用。 为了解决零售业面临的挑战,英特尔正在为零售业开发全面的端到端产品组合,整合了先进计算、客户体验、资源部署、通信与深度学习所必需的广泛技术,这些技术拥有跨实体店、云基础设施和数据中心的无与伦比的可扩展性和安全性。英特尔拥有得天独厚的优势来实现智能互联世界的各个环节--支持全球绝大多数数据中心、连接数亿个物联网设备并履行对时刻在线、5G连接、深度机器学习以及安全和隐私的承诺。 “英特尔广泛的与解决方案提供商合作,致力于推动零售业的持续增长。”英特尔公司物联网事业部零售解决方案部门零售平台市场总监Alec Gefrides表示:“随着越来越多的商家将资金投入到支付终端及店面智能设备的升级换代中,英特尔致力于提供强大的计算能力和独一无二的端到端的技术支持。” 随着物联网下的智能消费体验日渐深入人心,从线上的精准营销到线下的购物体验,全渠道营销真正实现了跨界发展,从根本上推动了整个零售行业的变革。英特尔凭借着自身优异的CPU和GPU性能,通过软硬集成的服务逐年不断优化为零售行业量身订制的参考设计,从前端到后端提供完善的智能零售解决方案和技术,配合大数据分析对于消费者的深入洞察,真正瞄准了目标群体,提升了用户黏性,大幅增加了销售利润,最终助推实体店回归商业本质,线上线下两条腿走路实现了实体店的全新逆袭。 本文出处:畅享网 本文来自云栖社区合作伙伴畅享网,了解相关信息可以关注vsharing.com网站。

优秀的个人博客,低调大师

Python数据挖掘与机器学习,快速掌握聚类算法和关联分析

摘要:前文数据挖掘与机器学习技术入门实战与大家分享了分类算法,在本文中将为大家介绍聚类算法和关联分析问题。分类算法与聚类到底有何区别?聚类方法应在怎样的场景下使用?如何使用关联分析算法解决个性化推荐问题?本文就为大家揭晓答案。 数十款阿里云产品限时折扣中,赶紧点击这里,领劵开始云上实践吧! 本次直播视频精彩回顾, 戳这里! 演讲嘉宾简介: 韦玮,企业家,资深IT领域专家/讲师/作家,畅销书《精通Python网络爬虫》作者,阿里云社区技术专家。 以下内容根据演讲嘉宾视频分享以及PPT整理而成。 本文将围绕一下几个方面进行介绍: 1.聚类问题应用场景介绍 2.K-Means算法介绍与实现 3.使用K-Means算法对公司客户价值进行自动划分案例实战 4.关联分析问题应用场景介绍 5.Apriori算法介绍 6.FP-Growth算法介绍 7.使用关联分析算法解决

优秀的个人博客,低调大师

快速上手ndk开发! Mac/Win下配置和使用!(2018.4重编版)

目录 前言 ndk环境配置 下载ndk 配置ndk路径 配置ndk环境路径 ndk上手 实现c函数, 并编译生成.so 其他项目使用.so 最后 前言 说下我的AndroidStudio版本是2.3.3, 还没有更新到3.x(手动委屈), 主要还是想把手头项目搞定了再跳坑. 然后这次添加了mac平台的配置, 其实没多大区别, 当然, linux也是大同小异, 毕竟android studio是通用的. 为什么要使用.so?从我自己的理解出发, 有几点非常主要: 你往往不是一个人在开发, 而且你的合作伙伴不可能把所有源码给你编译. 所以一个解决方案就是他编译生成.so给你, 再给你个.h文件, 告诉你有哪些函数.对于这些函数, 你只需要知道功能而不需要知道实现细节. .so文件是依靠c/cpp编译而成的, c/cpp语言的重要性不言而喻, 历史地位也是不可撼动的, 而且一些本来已经写好的库, 没必要说因为要写Android就换成java重新实现一遍. 所以需要让Android去支持那些已有的库. java源码反编译一下很容易拿到的, 当然可以加固apk, 会好一点. 而编译生成.so之后, c的源码就很难看到了. ndk环境配置 有个比较头痛的事情叫做配环境 下载ndk mac下下载ndk win下下载ndk 配置ndk路径 mac下配置ndk路径 win下配置ndk路径 配置ndk环境变量 mac: 用vim打开.bash_profile, 在最后加入ndk所在路径. vim .bash_profile mac下添加ndk路径 更新配置文件并测试ndk-build指令 更新配置并测试 win: win下配置ndk环境变量 加入到PATH大家庭 打开PowerShell测试一下 打开PowerShell测试一下 终于可以开始使用NDK了, 或者你可以管它叫JNI ndk上手 在包目录下创建HellJNI类, 并写入必要代码 mac下 win下 public class HelloJNI { //一个加法函数, 用c实现 public native int AddC (int a, int b); static { //加载库, 注意库名的一致性 System.loadLibrary("HelloC"); } } 使用javah命令生成头文件, 注意! 这是重点, 要背!(滑稽脸)然后新建一个同名c/cpp. mac: mac下生成头文件 生成后目录一栏 生成后目录一栏 win: 使用javah命令生成头文件 一览 实现c函数, 并编译生成.so 拷贝.h文件中生成的函数, 在c/cpp中实现它. /* * Class: com_so_myapplication_HelloJNI * Method: AddC * Signature: (II)I */ JNIEXPORT jint JNICALL Java_com_so_myapplication_HelloJNI_AddC (JNIEnv *, jobject, jint, jint); #include "com_so_myapplication_HelloJNI.h" JNIEXPORT jint JNICALL Java_com_so_myapplication_HelloJNI_AddC (JNIEnv * env, jobject obj, jint a, jint b){ return a + b; } 在jni目录下创建Android.mk和Application.mk文件并写入内容, 重点! Android.mk内容如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := HelloC LOCAL_SRC_FILES := com_so_myapplication_HelloJNI.c LOCAL_SRC_FILES += util.c include $(BUILD_SHARED_LIBRARY) 有2个要点: LOCAL_MODULE的名称要和之前System.loadLibrary("HelloC");中的名称一致; Win下需要再加一个空的util.c文件进行编译, 否则会报错, 不信可以试试(手动滑稽), mac/linux下无需. Application.mk内容如下: APP_ABI := all #APP_ABI := armeabi armeabi-v7a x86 mips arm64-v8a mips64 x86_64 有2个要点: 我知道这样不太专业, 不过这个ABI问题牵扯太多, 暂不细说, 主要是和不同cpu有关. armeabi似乎已被淘汰. 配置build.gradle, 重中之重! 先是build.gradle一览: android { compileSdkVersion 26 buildToolsVersion "26.0.3" sourceSets { main { jniLibs.srcDirs = ['libs'] } } defaultConfig { applicationId "com.so.myapplication" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk { moduleName "HelloC" //System.loadLibrary("HelloC"); } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } ndk需要配置, 注意名字匹配! ndk { moduleName "HelloC" //System.loadLibrary("HelloC"); } sourceSets配置 sourceSets { main { jniLibs.srcDirs = ['libs'] } } 在gradle.properties中加上一句 android.useDeprecatedNdk=true 然后就是ndk-build了, 再查看是否生成成功! mac下ndk-build win下ndk-build 一览 你可以在这个项目中使用这个由c实现的加法函数了, 但是我们有更酷的事情要做, 那就是在另外的项目中用这个函数. 其他项目使用.so 这件事其实没有很难, 基本靠两步. 第一步就是将前一个项目生成的libs目录下的全部内容拷贝到AndroidStudio自带的libs目录下 一览 第二步就是创建一个和前一个生成libs目录的项目相同的包和类, 类中写入的内容也是一样的.顺带加下build.gradle中的sourceSets, 不记得位置, 参考之前的build.gradle一览. 一览 public class HelloJNI { public native int AddC (int a, int b); static { System.loadLibrary("HelloC"); } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } 最后测试下效果, 这段代码我就不解释了, 这看不懂也就告别手表了! public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv_testc = (TextView) findViewById(R.id.tv_testc); tv_testc.setText("add: " + new HelloJNI().AddC(1, 2)); } } 测试结果 最后 完结散花! 喜欢记得点赞或者关注我哦, 有问题和意见可以评论区~~

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册