精华内容
下载资源
问答
  • Unity媒体播放插件 1
  • Android WIFI ADB插件

    2018-07-31 15:22:30
    AndroidStudio插件,将手机和电脑连接同一网络下可以免除USB线直接通过WIFI进行调试等操作
  • Unity-Android插件

    2017-12-03 21:57:13
    本资源为unity3d的android编译环境插件,可直接运行安装。
  • 比如我的美工人员设计了一个图片适合 xhdpi 分辨率的手机,我可以通过AndroidDrawable将这个xhdpi转换成 "ldpi", "mdpi", "hdpi", "xhdpi","xxhdpi", "xxxhdpi"的图片 具体使用 ...
  • JsDroid手机助手+按键jsd全分辨率插件2.77 Import "jsdvip.luae" If jsdvip.StartServer() Then TracePrint "恭喜你!!可以使用插件" Else TracePrint "很遗憾!!!你无法使用插件" End If
  • 发送这个链接到我的android然后下载它 只需右键点击链接并选择“下载到我的Android”,然后你的Android手机将自动下载链接 支持语言:English
  • 手机插件安卓

    2015-08-14 14:46:10
    手机插件安卓
  • 下载Android安卓桌面便签插件怎么在手机桌面上设置添加显示便签组件 安卓桌面便签 安卓 桌面便签是指敬业签安卓手机便签通过添加安卓手机小组件实现将设置了定时提醒待办事项的 便签内容显示在安卓手机桌面方便...
  • 主要为大家详细介绍了Android微信自动抢红包插件优化和实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Unity Asset Store 购买的震动插件,内有多种震动模式,兼容Android和IOS
  • HP无线打印插件安卓手机打印操作方法,用华为手机测试通过
  • 安卓Arcore Unity3D插件

    2017-12-18 15:52:57
    安卓Arcore Unity3D插件 安卓Arcore Unity3D插件 安卓Arcore Unity3D插件
  • Unity 手机震动插件

    2020-11-13 14:28:57
    Unity手机震动插件 包含完整调用demo 多种震动方式 长短震动 简单易用 感觉下载使用 支持安卓Ios
  • 山海插件是lua形式的, 可以在手机按键精灵中使用常用的函数, 字符串处理、数组、随机数、文件处理、设备命令、正则匹配、HTTP、数据库命令和一起其他命令函数
  • 使用 Android 4.2 或以上的手机可能没有调试模式选项,可以找到 “设置 > 关于手机 > 版本号(Build Number)”, 点 7 次,然后返回开发者选项就可以了。 查找 USB 设备 (Enable USB discovery in Chrome) 在你的...
  • c4droid是一款安卓手机C\C++语言编译软件,使用这款软件,你只需要一款手机,就可以实现代码编写和编译了,可以说是十分的方便。...下载地址里面包含本体下载以及插件下载,按照自己的需求安装下载!
  • Android插件化实现方案

    2021-02-19 15:38:55
    插件化对于广大Android开发者而言,应该是一个不陌生的名词。许多APP都有用到插件化技术,例如逢年过节,许多APP都会动态换上许多营造节日氛围的ui特效,但是却不需要用户去重新下载APP;再者下载一款游戏平台APP,...

    插件化对于广大Android开发者而言,应该是一个不陌生的名词。许多APP都有用到插件化技术,例如逢年过节,许多APP都会动态换上许多营造节日氛围的ui特效,但是却不需要用户去重新下载APP;再者下载一款游戏平台APP,若一次性下载一个包含所有游戏的平台APP,那肯定需要很长时间,而用户往往只玩其中一两款,这时候就需要“按需下载”,在用户想玩的时候在下载相应游戏的插件,这样体验就好多了。

           目前来说实现Android实现插件化的方案大致分为两个方向:

           1、动态替换方案:提供对Android底层的各种类进行Hook,来实现加载插件中的四大组件,以DroidPlugin框架为代表;

           2、静态代理方案:通过ProxyActivity统一加载插件中的所有Activity,以that框架为代表。

           本文以方案二静态代理来实现Activity的插件化。

           本文项目结构如下:

           本文项目分为三大模块,主APP模块,插件APP模块,以及充当两者桥梁,起到解耦作用的pluginlib Library部分。

    接下来我们分别讲解这三个部分。

    一、主APP模块

           我们知道项目build完后会生成apk文件,作为主APP模块,我们需要加载外部的插件apk,正常的加载流程应该如下:

           1、从服务器下载插件dex到手机SDCard,为此需要申请SDCard读写权限;

           2、读取插件apk中的dex文件,生成对应的DexClassLoader;

           3、使用DexClassLoader的loadClass方法读取插件dex中的任何一个类。

           为了模拟从服务器下载插件的方法,我们首先build插件APP,生成相应的apk文件,然后将apk文件重命名放到主APP模块的assets文件中,APP启动后会把asset目录中的插件复制到内存中,如下图所示:

    相关代码如下:

     

    二、Library模块

           首先需要一个插件APK的实体类,代码如下:

           其中DexClassLoader用于加载插件中的类,Resources和AssetManager用于加载插件中的资源,PackageInfo用于获取插件中的包信息。

           同时需要一个PluginManager类来管理实体对象,代码如下:

           另外,我们需要意识到,插件中的Activity不同于我们正常启动的Activity有AMS管理调用其生命周期,对于插件Activity,我们需要管理它的生命周期,为此我们写了一个ProxyActivity来充当这个管理的角色,如下:

           为了更好地管理和调用插件Activity,我们需要制定一套规范,让插件Activity遵循我们这套规则,为此写了如下接口:

            同时写了一个BasePluginActivity来让插件Activity继承:

           如上代码所示,若Activity属于主APK,即mFrom=FROM_INTERNAL,则走常规的启动流程,若属于插件APK,则走插件管理的启动流程。

    三、插件APP模块

           插件APP这边比较简单,继承于BasePluginActivity,代码如下:

            整体效果如下,点击加载APK文件成功后,点击跳转,跳转到插件Activity。

          

         

    四、总结

           插件化是Android开发中比较重要的一块,涉及的东西很多,如Android四大组件的插件化,动态代理,四大组件的启动过程,反射机制等,本文的介绍只是冰山一角,后续需要研究学习的地方还很多,有兴趣的朋友可以一起探讨。

           PS:许多同行对插件化有个误区,认为插件化能极大减少APK的体积,把需要“按需下载”的APK在需要时才下载到主APK中,其实不然。确实插件化一定程度上能减少APK的体积,但是假设一个插件APK大小为10M,让用户从服务器下载一个10M的插件新版本,需要耗费很长时间。合理的做法应该把插件1.0版本放在主APP中,APP发版后需要更新插件,通过增量更新的方式来加载。

           最后,附上项目Github地址,有问题可交流:https://github.com/xudongstorm/PlugProject

     

    原文转载自:https://blog.csdn.net/m0_37451060/article/details/99614847?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control

    展开全文
  • Android插件化方案实践

    千次阅读 2020-07-27 10:18:59
    插件化概述 1、插件化和组件化的区别 组件化是将一个app拆分为多个模块进行协作开发,每个模块都是一个单独的组件,...宿主apk发布到市场,插件apk通过动态下发到手机存储空间,然后进行插装操作,宿主apk就能够加载..

    一、插件化概述

     

    1、插件化和组件化的区别

    组件化是将一个app拆分为多个模块进行协作开发,每个模块都是一个单独的组件,这些组件可以相互依赖,也可以单独调试运行。但是最终发布的时候,这些组件会合并在一起,组成一个整体的apk,这就是组件化开发。

    插件化开发和组件化是有所不同的,插件化开发就是将一个app拆分成多个模块,但是每一个模块都是一个apk,最终打包的时候将宿主apk和插件apk分开打包,独立分发。宿主apk发布到市场,插件apk通过动态下发到手机存储空间,然后进行插装操作,宿主apk就能够加载到这个插件包,完成整个业务流程链路的闭合。

     

    2、插件化的优势

    提高编译速度

    开发过程中,每个插件都是独立编译运行的,会是当的提高我们的开发速度。

    业务模块完全解耦

    每个业务模块都是完全独立的,可以随意删除和增加某一部分的功能。

    利于团队开发

    每个团队负责自己的功能,减少沟通的成本。

    动态更新,按需下载

    不需要重新安装即可实现功能的升级,对于一些不常用的功能,可以让用户按需下载,缩减整个程序包的大小。

    解决65535的限制

    每个业务都是一个独立的apk,所以完全可以解决分包的问题。

     

    3、主流的插件化方案

          插件化的实现思路有很多,市面上开源框架也比较多,其中以滴滴公司研发的一款插件化框架VirtualAPK做的相对较优秀,功能也比较强大。

    特性

    DynamicLoadApk

    DynamicAPK

    Small

    DroidPlugin

    VirtualAPK

    支持四大组件

    只支持Activity

    只支持Activity

    只支持Activity

    全支持

    全支持

    组件无需在宿主manifest中预注册

    ×

    插件可以依赖宿主

    ×

    支持PendingIntent

    ×

    ×

    ×

    Android特性支持

    大部分

    大部分

    大部分

    几乎全部

    几乎全部

    兼容性适配

    一般

    一般

    中等

    插件构建

    部署aapt

    Gradle插件

    Gradle插件

    最近腾讯推出了一个由Kotlin实现的插件化框架Shadow,这款框架号称是全动态、零反射、无Hack实现的新一代插件化技术,因为没有用到实战项目中,所以暂时还没有做深入研究。

     

    二、插件化实现原理

    通过上面的概述,可以知道插件化和组件化不同之处在于每一个插件都是一个可以独立安装运行的apk,在用户使用的过程中,只会安装宿主apk,其他的插件会通过网络等方式的下发到手机的内部存储中。所以想实现插件化,就必须将手机中的插件和宿主做关联,达到可以相互通信的效果,但是宿主模块和插件是不能直接进行相互通信的,下面我们会说明原因,所以我们需要一个中间件来作为媒介,这个中间件就是插件SDK。

    所以在实现插件化的方案时,项目的结构搭建应该是分三部分:

    宿主模块:app(主工程)

    中间件:pluginSDK(插件化工具包)

    插件模块:loginPlugin、registPlugin ……(拆分的业务插件)

    因为宿主和插件模块只能做业务逻辑相关的功能,所以要想实现插件化,宿主必须通过pluginSDK来加载和调用插件,那么在pluginSDK中就必须解决以下几个问题:

    • 插件的类加载
    • 插件的生命周期
    • 插件的路由管理
    • 插件的资源管理
    • 插件的事件处理

     

    1、插件的类加载

    如果想在主模块中去使用用插件,就必须将插件加载到主模块中,这里就会用到类加载器。我们知道Android中的虚拟机是Dalvik,它不是标准的Java虚拟机,所以在类加载机制上,和Java中的类加载器是有一些区别的。

    Java虚拟机运行的class字节码,Android虚拟机运行的是dex字节码。

       

    Android中使用的类加载器是PathClassLoader和DexClassLoader,PathClassLoader只能加载已经安装到手机的dex,而DexClassLoader可以加载未安装的dex,所以我们可以通过DexClassLoader加载器来加载插件apk,在pluginSDK的PluginManager类中来实现插件加载初始化的方法

    上图中的代码就是pluginSDK加载插件的核心实现,是对调用插件的初始化操作。这里主要是在宿主模块中调用这个初始化方法来加载插件,并获取插件中的dexClassLoader、packageInfo、resources三个对象,这三个对象我们会后续提供给代理类来使用

     

    2、插件的生命周期

    上面提到宿主模块和插件是不能直接进行相互通信的,这是因为插件中的Activity虽然继承了Activity,但是它只能看作是一个普通的类,并不是真正意义上的Activity,因为它不具备Activity最经典的两个特性:【生命周期】和【上下文】。这是为什么呢?因为我们都知道,插件是直接通过宿主app的动态加载来使用的,插件本身并没有经过Android系统安装的过程,那也就是说,插件本身没有经过AMS的处理,Context对象就是在AMS的main函数中返回的,并且四大组件也是由AMS来统一调度的,所以说没有经过AMS的处理的Activity是没有“灵魂”的,那怎么办呢?我们可以通过“代理伪装”的方式来强制赋予插件Activity生命周期的能力。

    先在pluginSDK中创建一个PluginInterface接口,接口类中定义Activity具有的所有的生命周期函数和参数,用来模拟插件Activity的生命周期。

    然后再在pluginSDK中创建一个BaseActivity来实现这个接口,并实现attach方法。attach方法中接收的是一个Activity实例,这样只要传入我们后续提到的ProxyActivity代理类实例,Context对象也就具备了。最后将插件Activity都继承这个BaseActivity即可。

     

    3、应用的路由管理

    插件加载完成,我们最常用的操作就是路由跳转,我们需要从宿主模块跳转到各个插件中去。如果用Intent的方式,那我们必须在宿主模块中的AndroidManifest中去注册插件中的Activity,这么做肯定是不合理的,如果引入第三方的路由框架,一个是违背了插件化框架设计的原则,另一个是会限制功能的开发,这显然也是不可取的。所以我们要在pluginSDK中创建一个ProxyActivity,让这个代理类来实现路由的跳转。

    首先我们应该先实现从宿主模块到ProxyActivity的跳转逻辑

    这里需要注意的是,我们获取跳转的Activity的时候是通过activities[0]来拿到的,这就要求我们在开发插件的时候必须将启动Activity放到该插件的AndroidManifest中的第一个节点,这算是一个隐性的规范。

    然后再继续实现ProxyActivity类中的路由逻辑

    根据插件Activity类的名称,可以去加载到该类的实例,因为BaseActivity已经实现了PluginInterface接口,也就意味这插件Activity属于PluginInterface的子类,所以可以通过结构引用的方式通过接口来调用插件Activity的生命周期函数,达到唤起插件Activity的作用。

     

    4、插件的资源管理

    解决了上面的几个,其实就可以从宿主模块中实现跳转到插件中了,但是插件中的Activity并不能正常的进行UI显示和事件的监听,是因为插件不具备上下文对象,也就无法使用任何与上下文相关的api,就拿setContentView(R.layout.activity_login)这个类来说,他的本质实现应该是this.setContentView(R.layout.activity_ login),所以他也是需要上下文对象的,前面为了解决这个问题,我们已经将代理类ProxyActivity的实例传递给BaseActivity,而插件Activity又继承自这个BaseActivity,所以也就意味着插件Activity中的上下文对象是ProxyActivity代理类的上下文,那这里肯定是有问题的,插件类用代理类的上下文去获取资源肯定是不正确的,我们必须要在代理类中拿到插件类的资源并给到插件类才行。

    上面我们已经在PluginManager中初始化并获取到了插件类的三个对象,分别是:dexClassLoader、packageInfo、resources,那我们可以在代理类中去重写getResources()方法并返回PluginManager.getInstance().getResources(),并且我们还需要在BaseActivity中重写setContentView()方法,插件中才能被调用执行,UI资源才能被加载成功。

     

    5、插件的事件处理

    通过上面的操作,我们已经可以从宿主模块跳转到对应的插件中了,但是如果在插件中的做一些与上下文相关的操作(如:findViewById),还是要调用BaseActivity中对应的方法,所以需要重写大量的Activity的方法来给子类做支持,如下图,that就是代理类传递给BaseActivity的上下文对象。这一系类的操作本质就是插件不具备上下文对象,我们只能强制给插件赋予这个属性。

     

    三、探究最后

    关于android的插件化原理,本次的研究大概就是以上几点,本文是从apk动态加载的层面对插件化技术的一个研究,通过代理和反射获取到插件的实例,距离商用的技术方案,还需要大量的细节优化和测试。对于市面上的插件化技术方案,各个大厂也是研发了各自优秀的技术方案,比如滴滴公司的VirtualAPK插件化方案尤为优秀。

    动态加载技术会围绕着插件Activity不具备生命周期这个特征做大量的手动映射和管理,开发侵入性比较强,而VirtualAPK通过替换了系统的Instrumentation,hook了Activity的启动和创建,省去了手动管理插件Activity生命周期的繁琐,让插件Activity像正常的Activity一样被系统管理,并且插件Activity在开发时和常规一样,即能独立运行又能作为插件被主工程调用,这种方案的实现难度无疑会更大。未来更多的插件化技术会被研究和开发出来,如果插件化技术稳定发展到了一定的程度,很可能会影响App以后的开发方式。

     

    参考:

    《Activity启动流程》
    《Android apk动态加载机制的研究》
    《Hook机制-AMS&PMS》

     

    展开全文
  • 按键精灵安卓插件,多功能找图找色……好用得不得了
  • 官网:...使用前保证Android SDK是最新的,同时在Edit->ProjectSettings->Player->Identification中选择合适的Android版本以生成APK。本人手机Android7.1,与HC05蓝牙模块连接,亲测可用
  • 原标题:最新Android版Firefox浏览器不再支持现有插件火狐背后的非盈利组织Mozilla最近还为Android重新设计了浏览器,几乎丢掉了用户多年来习惯的许多惯例和功能,只有少数插件在新版Android浏览器启动时可以使用。...

    原标题:最新Android版Firefox浏览器不再支持现有插件

    火狐背后的非盈利组织Mozilla最近还为Android重新设计了浏览器,几乎丢掉了用户多年来习惯的许多惯例和功能,只有少数插件在新版Android浏览器启动时可以使用。

    在某种程度上,新的Android版Firefox浏览器(现称为Firefox Preview)是一次彻底的革新。 Mozilla将已经用于所有浏览器的Gecko引擎转化为可重用的Android库。

    这并不是说Android新版Firefox将不支持插件。 Mozilla表示,它希望确保新浏览器的第一次体验与众不同,因此它将受支持的插件限制在其推荐的扩展程序的一个子集内。虽然这些扩展涵盖了广泛的领域,包括广告屏蔽密码管理器和内容下载器,但它们总共不到一百个。

    目前谷歌Play Store上提供的多个版本的Firefox也有点混乱,为了结束这些问题,Mozilla会将其减少到两个。那些想继续测试新功能的人将不得不从Firefox Preview Nightly转到Firefox Preview,Firefox预览版的功能将被转移到Firefox for Android测试版当中。

    活动入口:

    京喜首个年货节开启 “超级百亿补贴”红包在此领取返回搜狐,查看更多

    责任编辑:

    展开全文
  • android flash播放器源码编译的demo app,下载安装app可以测试。由于flash兼容性问题,部分设备可能无法兼容,建议联系作者获得帮助吧。
  • TeamViewer插件,小米手机,远程控制,电脑控制安卓手机

    TeamViewer首席技术官Mike Eissele表示:“对于我们的商业客户来说,能够自由选择设备,又不必离开TeamViewer提供的支持是非常重要的。”
    “而且,在个人使用环境中,智能手机各种各样,我们为所有设备提供支持也非常重要,并不仅仅是支持顶级品牌。不管他们的Android智能手机是什么,每个人都应该能够支持他们的朋友、父母或祖父母。"他补充道。

    环境

    步骤——【以PC端(联想G400+Windows10)为控制端,小米手机(RedMi Note 7 Pro+MIUI12.5.1)为被控端】

    1. 邮箱注册Teamviewer账号【注册地址】,电脑控制端登录注册的账号,可能需要验证手机号;

    2. 小米手机安装被控端软件。先安装TeamViewer Host.apk软件,再安装TeamViewer Universal Add-On.apk 通用插件,安装完成后桌面只会有【Host】一个软件;
      在这里插入图片描述

    3. 小米手机设置:设置>>更多设置>>无障碍>>通用>>已下载的服务>>TeamViewer Universal Add-On>>开启服务【设置为打开状态】;
      在这里插入图片描述

    4. Host软件登录你的账户,可能需要邮箱验证并添加为信任设备

    5. 手机被控端登录后应当显示为【连接准备已就绪(安全连接)】,这时电脑控制端选择:计算机和联系人>>我的计算机>>“你的被控端手机型号:Xiaomi__”(我的是改过备注的);
      在这里插入图片描述

    6. 在该设备上右键选择【远程控制】,然后首次连接被控端可能会出现允许之类的操作,第二次打开Host软件即可快速控制;

    7. 作者是小白,凭记忆记录的操作,如有遗漏欢迎交流。

    8. 使用手机控制另一部手机应该也是可以的,控制端下载安装TeamViewer.apk,被控端安装文中所述软件和操作,两部手机登录同一个TeamViewer账号,作者因设备限制没有验证,感兴趣的小伙伴可以试试(手机控制手机才是最广泛的场景——对作者来说,帮父母调试安装软件等)】

    参考资料

    1. TeamViewer社区:控制所有Android设备:通用插件
    2. 博客园:teamviewer quicksupport 插件(下载)
    展开全文
  • Android平台调用第三方插件将数据写入生成excel文档.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Cordova插件-用于播放海康监控视频
  • DroidPlugin是360手机助在Android系统上实现了一种新的插件机制
  • 通过手机或耳机麦克风将声音录下来再通过手机喇叭或手机连接其他的音箱将录到音频流实时播放出来,最终达到扩音功能,因为录音收到手机播放声音干扰,最好将手机连接蓝牙音箱作为扩音器效果更佳。
  • 摘要:Java源码,Android源码,天气预报 修改国外的Android天气预报插件,用android系统手机的朋友都应该知道天气预报功能,一般都有一个漂亮的界面,然后点击后可看到近几天的天气状况,与本款源码相似,不过天气信息...
  • 最完整Android Studio插件整理

    万次阅读 多人点赞 2018-01-11 15:11:44
    使用好Android Studio插件能大量的减少我们的工作量。 1.GsonFormat 快速将json字符串转换成一个Java Bean,免去我们根据json字符串手写对应Java Bean的过程。 使用方法:快捷键Alt+S也可以使用Alt+Ins...
  • 最完整实用Android Studio插件整理

    千次阅读 2020-04-02 16:56:49
    使用好Android Studio插件能大量的减少我们的工作量。 1.GsonFormat 快速将json字符串转换成一个Java Bean,免去我们根据json字符串手写对应Java Bean的过程。 使用方法:快捷键Alt+S也可以使用Alt+Ins...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,432
精华内容 23,772
关键字:

安卓手机插件下载