精华内容
下载资源
问答
  • 为了之后方便直接升级为安卓10(Android-29),特此记录其中遇到的一些问题。(本人Android小白) 升级AndroidSDK 下载Android-29开发工具包 使用AndroidStudio或者Eclipse中AndroidSDKManager下载Android-29和...
  • DELPHI XE7 安卓手机开发框架

    千次下载 热门讨论 2015-02-14 15:04:32
    XE7 安卓手机开发框架 1、主菜单与主界面的切换 2、StyleBook的设计 3、界面布局 4、显示数据界面框架 5、编辑界面框架,包括输入框输入的时候键盘问题 6、WSDL接口调用,实现数据同步服务器 7、DataSet转JSON,JSON...
  • 安卓中利用xutils框架下载新版本apk

    千次阅读 2016-12-07 10:15:38
    一、概述 xUtils 包含了很多实用的android工具。 xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件...android中的orm框架,一行代码就可以进行增删改查; 支持事务,默

    一、概述

    • xUtils 包含了很多实用的android工具。
      xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响…
      xUitls 最低兼容android 2.2 (api level 8)
    • 目前xUtils主要有四大模块:

      • DbUtils模块:
        android中的orm框架,一行代码就可以进行增删改查;
        支持事务,默认关闭;
        可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
        支持绑定外键,保存实体时外键关联实体自动保存或更新;
        自动加载外键关联实体,支持延时加载;
        支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。

      • ViewUtils模块:
        android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
        新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
        目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。

      • HttpUtils模块:
        支持同步,异步方式的请求;
        支持大文件上传,上传大文件不会oom;
        支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
        下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
        返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。

      • BitmapUtils模块:
        加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
        支持加载网络图片和本地图片;
        内存管理使用lru算法,更好的管理bitmap内存;
        可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等…

    这里只介绍用HttpUtils模块来下载APK文件并安装。

    二、准备工作
    要想用xutils框架,得先将xutils的jar包引入到工程当中,utils框架下载,下载完成解压后得到一个xUtils-master文件夹,进入文件夹将xUtils-2.6.14.jar包复制粘贴到对应工程的libs文件夹下,具体步骤如下图:
    这里写图片描述

    • 使用xutils要加权限:
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    三、代码实现

    • 下载apk文件
    private void downloadAPK() {
    
            //1.检查SD卡是否挂载上
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                //2.获取SD卡的路径,使用File.separator维护"/"或者"\"
                String path = Environment.getExternalStorageDirectory().getAbsolutePath()
                        + File.separator + "phone.apk";
                //3.发送请求,获取指定APK,放置到指定位置
                HttpUtils httpUtils = new HttpUtils();
                //4.发送请求,传送参数(要下载的apk文件的url,下载成功后存储位置,回调函数)
                httpUtils.download(mDownloadUrl, path, new RequestCallBack<File>() {
                    @Override
                    public void onSuccess(ResponseInfo<File> responseInfo) {
                        //下载成功,file为下载好的APk文件
                        File file = responseInfo.result;
                        Log.d("xutil","下载成功");
                        //安装apk的方法
                        installAPK(file);
                    }
    
                    @Override
                    public void onFailure(HttpException e, String s) {
                        //下载失败
                        Log.d("xutil","下载失败");
                    }
    
                    @Override
                    public void onStart() {//开始下载
                        super.onStart();
                        Log.d("xutil","开始下载");
                    }
    
                    @Override
                    public void onLoading(long total, long current, boolean isUploading) {
                        super.onLoading(total, current, isUploading);
                        //正在下载
                        Log.d("xutil","正在下载");
                        Log.d("xutil","total:"+total);
                        Log.d("xutil","current:"+current);
                    }
                });
            }else{
                Toast.makeText(this, "SD卡不可用", Toast.LENGTH_SHORT).show();
            }
        }
    • 安装下载好的apk文件
    /**
         * 开启安装APK页面的逻辑
         * @param file 要安装的APK文件
         */
        private void installAPK(File file) {
            //系统应用界面,安装apk入口,看源码
            Intent intent = new Intent("android.intent.action.VIEW");
            intent.addCategory("android.intent.category.DEFAULT");
    //        intent.setData(Uri.fromFile(file));
    //        intent.setType("application/vnd.android.package-archive");
    
     //切记当要同时配Data和Type时一定要用这个方法,否则会出错    
        intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
    
            startActivityForResult(intent,0);
        }

    安装APK文件注意事项
    当要安装的apk文件本机上存在的某个应用A具有相同包名时,系统会检测要安装的apk文件的签名是否与应用A的签名一致;如果一致,则安装成功,否则安装失败。
    我们在平时开发中安装的APK文件都是eclipse或Android suidio等工具自动帮我们的应用赋予签名。下面笔者介绍用as给应用赋予一个独一无二的签名。

    • 选择菜单栏Build–>Generate Signed APK–>Create new…
    • 弹出对话框如图
      这里写图片描述

    • 利用签名文件对应用进行签名
      这里写图片描述

    这里写图片描述

    • 注意:签名文件一定要妥善保管,丢失之后,要么对应用进行重新签名,要么新版本应用改包名,二者在现实开发中都会造成非常不好的影响。
    展开全文
  • XE10手机开发框架

    2016-04-14 11:49:02
    22、安卓版本升级 23、PHP的三层结构服务器访问接口,实现数据同步服务器 24、等待进度条框、等待框 25、DATASNAP三层结构服务器访问接口 (有 电脑测试端) 26、多图片之间的切换 27、HTTPServer 三层结构服务器...
  • 安卓基础面试题

    2017-02-08 06:48:35
    10:简述Android操作系统的四层架构 ·Linux内核层:C/C++/汇编等 ·系统运行库和运行时(含Dalvik虚拟机):C/C++ ·应用框架层(Framework层):Java为主 ·应用层:Java 11:简要介绍SDK的目录...
    10:简述Android操作系统的四层架构
    ·Linux内核层:C/C++/汇编等
    ·系统运行库和运行时(含Dalvik虚拟机):C/C++
    ·应用框架层(Framework层):Java为主
    ·应用层:Java






    11:简要介绍SDK的目录结构
    ·platform:不同平台版本
    ·build-tools:编译工具
    ·tools:通用工具
    ·platform-tools:平台版本工具
    ·sources:源码
    ·system-images:系统镜像(模拟器使用)
    ·extras\android\m2repository\:support包所在位置
    ·SDK Manager:SDK管理器
    ·AVD Manager:虚拟设备管理器






    12:Android应用的五种基本布局是什么?分别有何特点?
    ·FrameLayout:帧布局,子元素对齐左上角依次层叠放置
    ·LinearLayout:线性布局,横向或纵向排列子元素,支持按权重排列子元素
    ·RelativeLayout:相对布局,子元素可相对于父控件上下左右居中对齐、子元素可以与兄弟元素上下左右对齐、子元素可以位于兄弟元素的上下左右方位,默认的子元素排列方式与FrameLayout相同
    ·AbosoluteLayout:绝对布局,指定子元素的坐标来确定子元素的位置
    ·TableLayout:表格布局






    13:ImageView的scaleType属性有哪几种取值,分别代表什么含义?
    ·matrix:从图片的左上角开始截取【ImageView的宽高所定义的像素数量】,如果ImageView的宽高超出图片的像素数,则显示全部,不缩放;
    ·fitXY:强行将图片拉伸到控件的宽高;
    --------------------------------------------------
    ·fitStart:自动缩放到填满宽高之一,然后居左或居顶放置(取决于控件是“长的”还是“扁的”)
    ·fitEnd:自动缩放到填满宽高之一,然后居右或居底放置(取决于控件是“长的”还是“扁的”)
    ·fitCenter:居中显示全部,并自动缩放到填满宽高之一(取决于控件是“长的”还是“扁的”)
    * fitXXX系列的共同点是:都会缩放以显示全部,并充满宽高之一
    --------------------------------------------------
    ·center:不缩放,显示图片的正中间部分
    ·centerInside:居中显示全部,图片小于控件时不缩放
    ·centerCrop:缩放以填充长边,显示图片的正中间部分






    14:如何定义和使用样式?
    ·在res/values/styles.xml下定义新的style
    ·指定其名称、父类(有parent="XXX"和XXX.XXX两种方式)
    ·指定具体布局属性和属性值
    ·布局文件中引用该样式:style="@style/XXX"






    15:如何制作一个自定义样式的进度条?
    ·先引用系统样式(环形或水平)
    ·追踪系统样式定文件的位置
    ·拷贝、重命名和修改系统样式,主要包括:进度环美术资源、进度美术资源、二级进度美术资源、手柄美术资源、尺寸大小等
    ·引用自定义样式后的进度条






    16:阐述ListView的复用原理
    ·在listView的滚动过程中,convertView是被系统自动回收复用的,因此我们通过关联布局文件holder到convertView,实现布局的复用;
    ·首次加载第一屏数据时,没有可以复用的convertView,因此加载布局文件
    ·将布局文件中的控件丢给holdr对象保管,holder对象交给convertView保管(setTag)
    ·当列表不再是首次加载第一屏时,有可以复用的convertView(滚出屏幕外的item的convertView会被系统回收,并复用到新滚入的item中)
    ·此时从convertView中拿出上次保管起来的holder(getTag),进而拿出控件并一一设置值






    17:如何处理ListView的ITEM及ITEM内控件的点击事件冲突?
    ·如果item内有Button、ImageButton等强焦点控件,则item的点击事件会失效
    ·因此如果要item整体、item内的子控件有各自独立的点击事件,就不要使用Button、ImageButton等强焦点控件,而是使用TextView等弱焦点控件替代之;
    ·在item整体没有焦点的时候,使用【item根布局的点击事件】代替【item本身的点击事件】也是一种常见的做法;






    18:简述ExpandableListView的用法
    ·界面布局、找出控件的方式与ListView相同;
    ·适配器继承BaseExpandableListAdapter并实现其中方法;
    ·getGroupCount()和getGroupView()定义了组的数量和显示外观;
    ·getChildrenCount()和getChildView()定义了组下组员ITEM的数量和显示外观;
    ·数据多采用Map<Integer,List<Bean>>结构存储,Integer为组序号,List为组内的数据集合;
    ·isChildSelectable()方法须返回true,以使childItem有点击事件;
    * 着重讲明原理,方法名记个大概即可






    19:drawNinePatch的四条黑边分别代表什么?
    ·左上两条黑线相交区域代表控件的可拉伸范围;
    ·右下两条黑线相交区域代表内容呈现的位置;






    1A:gravity和layout_gravity有和区别?
    ·gravity指的是孩子和自己的对齐方式;
    ·layout_gravity指的是自己和父控件的对齐方式;
















    20:简述startActivityForResult的用法
    ·AActivity使用startActivityForResult()方法启动BActivity,配置一个requestCode;
    ·当BActivity结束前,通过setResult(RESULT_OK,intent)方法向AActivity返回结果;
    ·BActivity结束时,AActivity通过onActivityResult(int requestCode, int resultCode, Intent data)覆写方法获得BActivity的返回结果;
    ·onActivityResult()方法内的逻辑一般为:
    比对请求码是否和当初相同;
    结果码是否为RESULT_OK;
    从返回Intent中获取和处理返回数据;






    21:如何将一个Activity配置为应用的默认启动项,不配可不可以,配置多个会如何?
    ·配置其intentFilter的行为为ACTION_MAIN,类别为CATEGORY_LAUNCHER;
    ·可以不配,但这样不会在程序列表中形成启动图标,用户无法手动启动应用;
    ·可以配多个,这种情况下会以第一个作为默认启动项;






    22:如何为Activity定义和使用菜单?
    ·在res/menu中定义菜单资源,指定每个菜单项的title、id、icon、显示方式等;
    ·覆写onCreatOptionsMenu()方法和onOptionsItemSelected()方法;
    ·在onCreatOptionsMenu()中加载菜单资源:getMenuInflater().inflate(R.menu.menu_main,menu);
    ·在onOptionsItemSelected()方法中定义菜单的点击监听事件;






    23:Intent可以传递哪些类型的数据?
    ·基本数据类型,包括String;
    ·基本数据类型数组(包括String数组);
    ·Bundle数据包
    ·Serializable和Parcelable






    24:Activity的生命周期按顺序依次是什么?
    ·onCreate
    ·onStart
    ·onResume
    ·onPause
    ·onStop
    ·(经由onRestart返回onStart)
    ·onDestory






    25:简述Activity在不同状态下被回收的可能性
    ·运行状态(onStart)——基本不回收
    ·暂停状态(onPause)——不倾向回收
    ·停止状态(onStop)——比较容易被回收
    ·消亡状态(onDestroy)——随时被收回






    26:打开一个应用,返回桌面,然后再次返回应用,Activity经历了怎样的生命周期?
    ·onCreate-onStart-onResume;
    ·点击home键;onPause-onStop;
    ·重新打开;onRestart-onStart-onResume






    27:进行横竖屏切换时,Activity经历了怎样的生命周期?(分类讨论)
    ·常规切换横竖屏:
    onCreate-onStart-onResume;
    竖屏切横屏;onPause-onStop-onDestroy;onCreate-onStart-onResume
    ·切换横竖屏并保存状态:
    onCreate-onStart-onResume;
    竖屏切横屏;onPause-onSaveInstanceState-onStop-onDestroy;onCreate-onStart-onRestoreInstanceState-onResume
    一存一取,分别发生在:不可见之前,重新可见了以后
    ·清单文件中配置有android:configChanges="orientation|screenSize":
    onCreate-onStart-onResume;
    竖屏切横屏;onConfigurationChanged;






    28:为避免Activity的异常消亡和数据丢失,应如何做?
    ·覆写onSaveInstanceState,在即将不可见之前保存数据;
    ·覆写onRestoreInstanceState,在重新可见以后恢复保存的数据;






    29:打开一个Activity,点击跳转按钮跳转到一个Dialog风格的Activity,然后点返回,其间两个Activity分别经历了怎样的生命周期?
    假设主Activity和窗口Activity分别为:MA、DA
    ·MAonCreate-MAonStart-MAonResume;
    ·按钮跳转;MAonPause-DAonCreate-DAonStart-DAonResume;
    ·点击back键;DAonPause-MAonResume-DAonStop-DAonDestroy






    2A:Activity的启动模式有哪几种,分别有何特征?
    ·standard:标准,每次startActivity时都会新建一个该Activity的实例,并置于栈顶;//无限堆叠
    ·singleTop:栈顶单例,startActivity时,如果栈顶有该类的实例,就复用之,否则就新建实例置于栈顶;
    ·singleTask:任务栈中单例,startActivity时,如果栈中有该类的实例,就将其上层的其它实例全部弹出,没有就新建实例并置于栈顶;//踹飞模式
    ·singleInstance:绝对单例,独占一个任务栈,startActivity时,如果没有该类的实例,就在新的任务栈中新建一个该实例,并将该栈置于顶部,如果有就将其所在的任务栈切换到窗口顶层;//一人一栈






    2B:Intent的七大属性是什么,分别有何含义?
    ·ComponentName:显式地指定要启动的活动的包名或类名;
    ·Extra:为意图携带额外参数;
    ·Action:指定要启动的活动的行为,隐式地启动具有某种特定功能的活动;
    ·Category:指定要启动的活动的类别,与行为共同作用缩小要启动的活动的范围,从而实现隐式启动活动;
    ·Data:为意图携带Uri类型的参数,如网址、文件地址、邮箱、电话等;
    ·Type:用于指定Data数据的Mime类型,如imag/png、audio/*等;
    ·Flag:额外标记,一般用于指定以何种启动模式启动活动;






    2C:什么是有序广播和无序广播,有何区别?
    ·无序广播又称普通广播,以sendBroadcast()方式发送;
    ·无序广播的处理中,高优先级接收器不能屏蔽低优先级接收器,也不能篡改广播数据;
    ·有序广播的发送方式为sendOrderedBroadcast();
    ·有序广播的处理中,高优先级接收器能够屏蔽低优先级接收器对广播的接收和处理:abortBroadcast();
    ·有序广播的处理中,高优先级的接收器还可以篡改广播数据,如:setResultData(newString)或setResultExtras(newBundle);
    ·注意:所谓数据篡改,仅仅是resultData或resultExtras,不包括Intent携带的一般数据;






    2D:广播接收器的静态注册和动态注册有何区别?
    ·静态广播接收器是注册在Manifest中的;
    ·静态广播接收器理论上常驻系统内存的,不需要启动应用界面;
    ·静态广播接收器一般用于收听系统级别的广播:比如收听开机广播,收听来电广播等;
    ·动态广播接收器是在运行时动态注册和注销的,分别通过retisterReceiver()和unregisterReceiver()方法;
    ·动态广播一般用于应用内的通信;


















    30:安卓应用的数据存储方式有哪几种?分别适用于何种场景?
    ·SharedPreference:轻量级数据的本地存储;
    ·文件系统存储:文档、图片、音频视频、压缩包等二进制文件数据的本地存储;
    ·SQLiteDatabase:结构化数据的本地存储;
    ·网络存储:将数据上传保存到服务端;
    ·ContentProvider:设备内的跨进程数据共享;






    32:用户手动执行清除缓存和清除数据操作时,分别会清空哪两个文件夹中的数据?
    ·【外部存储】中的【程序私有目录】下的数据缓存文件夹及数据文件夹;
    ·即:/Android/data/包名/files目录和/Android/data/包名/Cache目录;
    ·程序卸载时,这两个目录及其数据会被一并删除;






    35:SQLite数据库支持的五种基本数据格式是什么?
    ·整型-INTEGER
    ·浮点型-REAL
    ·字符串-TEXT
    ·二进制-BLOB
    ·空-NULL






    36:如何在程序中获取到SQLiteDatabase对象的实例?
    ·SQLiteDatabase db =  context.openOrCreateDatabase("db605.db", MODE_PRIVATE, null);
    ·通过SQLiteOpenHelper实例去getReadableDatabase()或getWritableDatabase();






    37:如何将一条用户的信息(姓名,性别,年龄)存储到SQLite数据库?
    ·获取到数据库对象,可以通过openOrCreateDatabase()方法或sQLiteOpenHelper.getWritableDatabase()方法;
    ·通过执行SQL语句实现实现插入:db.execSQL("insert into tb_user(name,gender,age) values('zhangsan','male',20)");
    ·通过SQLiteDatabase的API实现插入:db.insert(...);
    ·db.insert()方法插入的数据对象为ContentValue,需要先将用户信息以键值对方式存储到ContentValue对象中才能执行insert();






    38:对SQLite数据库进行增删改操作的方式有哪几种?查询的方式有哪几种?
    ·增删改操作都有两种选择:即通过db.execSQL(sql)或SQLiteDatabase的API(insert、delete、update);
    ·查询也是sql语句和API两种选择,但API分别为:db.rawQuery(sql)和db.query();
    ·查询结果为Cursor数据游标,需要遍历解析Cursor获得最终结果;






    39:一个应用的SQLite数据库的存放在什么位置?
    ·设备的运行内存空间(非外存,用户无法手动访问)中的data/data/<包名>下;






    3A:说出几种跨应用(跨进程,IPC)共享数据的方式,安全的方式是什么?
    ·通过意图启动远程活动;
    ·发送和接收全局广播;
    ·绑定和调用远程服务(AIDL,Messenger);
    ·通过ContentResolver远程访问ContentProvider共享出来的数据;
    ·其中远程服务绑定和ContentProvider分别是安卓推荐的相对安全的远程服务和数据访问方式;






    3B:请简述ContentProvider跨应用共享数据的原理
    ·CP所在的应用(服务端)维护着一个可以共享的数据库
    ·服务端注册ContentProvider,并声明exported="true",即该CP可以被远程应用(客户端)访问
    ·CP定义数据访问规则,即Uri,通过UriMatcher将不同的Uri匹配到不同的访问标的(数据表)
    ·CP定义并对外抛出增删改查接口,其参数Uri代表了将要增删改查的数据标的(数据表)
    ·远程应用通过获取ContentResolver对象
    ·远程应用通过调用CR的增删改查(配以相应的Uri和参数),获取到CP的增删改查所返回的数据,即实现了对CP端数据的访问
    ·对系统CP提供的数据的访问往往要声明对应的权限






    3C:当我们注册四大组件时,如何使该组件能被其它应用访问?
    ·在注册时声明:exported=true






    3D:什么是数据库事务?其特点如何?
    ·批量执行的增删改操作;
    ·其执行结果要么全部成功,要么全部失败;
    ·如事务失败则所有【本次事务中已执行的操作】全部回滚至执行前的状态;












    41:安卓动画分为哪几种,分别有何特点;
    ·逐帧动画FrameAnimation:逐帧播放图片;
    ·补间动画TweenAnimation(又称视图动画ViewAnimation):只改变视图的“影像”,不能实际上改变视图的实际属性;
    ·属性动画PropertyAnimation:既改变视图的视觉属性,又不影响其点击事件时使用;
    ·布局动画LayoutAnimation:定义ViewGroup中孩子的出场方式的动画;






    42:属性动画和补间动画有何区别?
    ·补间动画改变的只是View的“影像”,其实质属性并未发生变化,点击事件仍存在与视图变化前的位置;
    ·属性动画是真正改变了View的属性,包括位置大小透明度旋转角度等,点击事件的响应区域也响应发生了变化;
    ·属性动画能改变的不仅仅是View的视觉属性,还可以是任何对象的任何属性,开发者可以在过程回调中进行任意操作从而实现动画效果;






    43:简述碎片回退栈的入栈和出栈规律;
    ·每个Activity都维护有一个自己的碎片回退栈;
    ·入栈方式:在fragmentTransaction提交之前执行fragmentTransaction.addToBackstack(null)将当前要提交的碎片添加到回退栈;
    ·当用户点击返回物理键时,会先将碎片回退栈中的碎片实例一一弹出,然后才会弹出Activity的实例;






    44:简述Fragment和Activity如何实现通信?
    ·活动的FragmentManager通过id或tag可以找到布局中定义的静态碎片:
    ·活动的FragmentManager通过tag可以找到动态加载的碎片(需要在replace时设置tag参数):
    ·活动在创建碎片实例时,可以进行初始化传参:
    MyFragment fragment = new MyFragment();
    fragment.setArguments(bundle);
    ·碎片找【宿主活动】进而调用:
    Activity activity = getActivity();
    ·最后的也是最重点的——接口回调,其步骤为:
    碎片定义接口、【接口实例】、【接口实例】的Setter方法;
    活动实现碎片的回调接口;
    活动调用碎片的Setter方法,将自身设置为碎片的【接口实例】;
    碎片在触发业务时回调【接口实例】的实现方法;






    45:按顺序说出Fragment的生命周期;
    ·对比活动的声明周期,碎片的生命周期可以概括为:前四后三中间同
    --------------------
    ·onAttach
    ·onCreate
    ·onCreateView
    ·onActivityCreated
    --------------------
    ·onStart
    ·onResume
    ·onPause
    ·onStop
    --------------------
    ·onDestroyView
    ·onDestroy
    ·onDetach






    45:简述Fragment的生命周期和Activity生命周期的联动规律;
    ·生长阶段:Activity先生长,Fragment再生长,即:
    AonCreate -> FonAttach,FonCreate,FonCreateView,FonActivityCreated
    AonStart -> FonStart
    AonResume -> FonResume
    ·消亡阶段:Fragment先消亡,Activity再消亡,即:
    FonPause -> AonPause
    FonStop -> AonStop
    FonDestroyView,FonDestroy,FonDetach -> AonDestory






    46:说出几种Fragment的常用优化方案;
    ·将经常使用的碎片实例抽取为属性;
    ·保证每个碎片实例中onCreateView()只加载一次布局;
    ·对于常用的碎片实例,使用add()配合hide/show()替代replace();










    51 什么是ANR?如何防治?
    ·ApplicationNotResponding——应用程序无响应;
    ·一般地,当应用程序在5秒以内无法响应用户的交互时,操作系统就会抛ANR,询问用户继续等待还是强制关闭;
    ·为什么会无响应呢?——因为主线程被阻塞了!
    ·防治的办法就是:不要在UI线程中做耗时操作,耗时操作交给子线程;






    52 什么是OOM?如何防治图片过多过大造成的OOM?
    √ OutOfMemory,不良代码创建了【太大或太多的对象实例】,且用完没有及时释放,导致运行内存超过了系统分配的上限(爆内存),从而使应用异常退出,的现象;
    √ 更改图片的颜色模式减小其内存开销;
    √ 更改图片的采样率减小其内存开销;
    √ 用完的图片及时回收:bitmap.recycle();
    √ 使用软弱引用替代强引用指向Bitmap对象:
    if(softReference.get()!=null){
    iv.setImageBitmap(softReference.get());
    }else{
    Bitmap bitmap = getBitmap();//重新获取图片
    softReference = new SoftReference<Bitmap>(bitmap);//软引用指向图片
    bitmap = null;//释放强引用


    iv.setImageBitmap(softReference.get());
    }
    √ 使用三级缓存策略,用LruCache管理图片的内存缓存,给内存开销指定一个安全上限;






    53 简述什么是图片的三级缓存策略,并简要介绍相关API;
    ·三级缓存是指:内存-文件系统-网络;
    ·即当有一个Bitmap请求时,先查看内存中是否有该图片的对象,内存没有再去查看文件系统中是否有,最后再去联网下载;
    ·LruCache是内存缓存的常用工具类,其算法原理为:最近最少使用的图片对象会被踢出缓存;
    ·LruCache在构造实例时可以配置一个大小,在sizeOf覆写方法中指定每张具体的Bitmap的大小;
    ·LruCache实例对外抛出put()和get()接口对应着图片对象的存和取;






    54 什么是图片的二次采样?其原理是什么?
    ·图片的像素数量过多时,不但消耗大量内存,还常常导致显示失败;
    ·二次采样指的是:均匀地丢弃图片的一部分像素,以使图片的内存开销降低;
    ·BitmapFactory.Options.inSampleSize属性定义了图片的二次采样率,其值为2的整数幂,例如当采样率为4时,代表只均匀采集原有1/4的像素数量形成新的图片;
    ·当我们使用BitmapFactory来生成图片时,常常会使用到二次采样;






    55 图片的颜色模式有哪几种?内存开销分别如何?
    ·ALPHA_8——只有透明度通道,占用一个字节8位,有256个不同透明度梯度
    ·RGB_565——有红绿蓝三个通道,每像素占用2字节16位,红绿蓝分别占5、6、6位,即32种不同梯度,显示效果可以接收,是一种常用的效果和开销都比较折中的颜色模式
    ·ARGB_4444——有透明度和红绿蓝四个通道,每像素占用2字节16位,每个通道占用4位,即16种不同梯度,显示效果较差
    ·ARGB_8888——有透明度和红绿蓝四个通道,每像素占用4字节32位,每个通道占用8位,即256种不同梯度,显示效果好,是安卓默认的颜色模式






    56 简述安卓的线程通信原理;(Looper/Handler机制,消息机制)
    ·可以从以下三个大块来回答:
    ----------------------------------------
    @ 消息传递和处理流程:
    ·假定A线程要发送消息给B线程;
    ·A线程创建消息;
    ·让B线程的Handler把消息取回家(bHandler.sendMessage(msg););
    ·bHandler将消息丢到消息队列MessageQueue的末尾;
    ·B线程的“消息循环器”Looper不断轮询和弹出MessageQueue头部的消息,丢给Handler处理;
    ·Handler处理消息;
    ----------------------------------------
    @ 如何创建消息循环系统:
    ·主线程有默认的【消息循环系统】
    ·子线程默认是没有【消息循环系统】的(Looper和MessageQueue);
    ·创建的方式是(run方法中):
    Looper.prepare();//创建Looper
    bHandler = new Handler(){handleMessage(Message msg){...}};//为线程创建Handler
    Looper.loop();//让Looper开始工作
    ----------------------------------------
    @ Handler的线程归属问题:
    ·Handler处理消息和提交的Runnable都运行在Handler所属的线程;
    ·正常情况下,Handler在哪条线程赋值,就属于哪条线程——因为它持有了该条线程的Looper;
    ·本质上,Handler持有哪条线程的Looper,它就属于哪条线程;






    57 简述异步任务和线程的异同;
    ·相同点:都是在子线程完成特定操作,线程在run()方法中,异步任务在doInBackground()方法中;
    ·不同点:
    ·异步任务提供了更多的过程回调,分别为:预执行回调onPreExecute()、进度更新回调onProgressUpdate()、提交结果回调onPostExecute();
    ·异步任务的上述三个回调是执行在主线程的(封装了主线程的handler),因此可以直接操作UI;






    58 同样是在后台执行耗时操作,使用服务和线程的区别是什么?
    ·服务中的代码默认是执行在主线程的;
    ·服务是不易被杀死的(即使被杀死也有复活机制),因此(一定程度上)能确保业务被完成;
    ·而线程在活动退出后,一来不便提交执行结果,二来在失去引用的情况下,有被提前杀死的风险;
    ****************************
    ·服务本身是上下文对象,因此可以方便地调取资源、启动活动、发送广播等,服务中能做的操作更灵活多变;
    ·服务本身就能够开辟和维护线程;








    59 服务的两种启动方式有何异同?
    ·服务的两种启动方式为startService()和bindService();
    @相同点:
    ·都只会生死一次:onCreate(),onDestory()只会执行一次;
    @启动式服务:
    ·启动之后的Service对象是独立存在的;
    ·主调者不易获得Service对象;
    ·onStartCommand()会不厌其烦地响应startService();
    ·要想结束服务,必须显式地停止服务stopService(),或stopService()、stopSelf()、stopSelfResult()
    ----------------------------------------
    @绑定式服务:
    ·启动之后的Service对象会与主调者同生死——即主调者退出,服务亦会随之解绑和销毁;
    ·主调者可以通过IBinder和ServiceConnection得到Service对象实例;
    ·onBind()响应bindService(),只能绑定一次;
    ·unbindService()或主调退出,都会导致服务死亡;
    ----------------------------------------
    @交替着对同一服务类执行启动/停止、绑定/解绑动作:
    ·onCreate()只会执行一次,即初次的启动或绑定;
    ·一旦有绑定的动作,则服务的结束只能通过unbindService()或主调的退出;












    61 dp、sp、px有何不同?
    ·px,Pixels,像素,一个物理像素点;
    ·dp,Density-Independent Pixels,密度无关的像素,在不同密度的设备上dp将以不同方式换算为px(而用户感觉它们的大小是相近的,所以称为“密度无关”);
    ·sp,Scale-independent Pixels,大小无关的像素,被用来在不同设备上兼容字体大小;






    62 何为碎片化?说说你是如何进行屏幕适配的;
    ·所谓碎片化,主要指的是不同的安卓设备,其像素密度、屏幕尺寸各不相同;
    ·其次是指不同厂家对操作系统的不同定制,导致不同品牌和型号的安卓手机的用户体验差异较大;
    ·屏幕适配的方式可以概括为:针对不同属性(密度、尺寸、横竖屏、语言等)的设备,生成不同后缀名的资源文件夹,在运行时根据就近原则动态匹配资源;
    ·屏幕适配的常用技巧包括:
    多用权重,少用具体值;
    一套layout + 多套(不同密度的)dimen;






    63 如何自定义View的属性?
    ·在res/values/attrs.xml中创建</declare-styleable>节点;
    ·声明控件名称、属性名称、属性类型;
    ·在布局文件中引用上述自定义属性时需要引入自定义的命名空间;
    ·在View的构造方法中,我们可以从AttributeSet参数中获取到布局文件中配置的自定义属性值,其形式为TypedArray对象;
    ·从TypedArray对象中逐个拿出自定义的属性值并做业务处理;






    64 自定义View需要覆写哪几个方法?其职能分别是什么?
    ·覆写构造方法——获取和解析自定义属性值;
    ·覆写onMeasure()——根据父控件给出的建议宽高(封装在widthMeasureSpec和heightMeasureSpec),计算自己想要的宽高,即测量宽高;
      ——多数时候,主要是处理一下当宽高声明为wrap_content时,该设置多少宽高:
      ——如果是自定义ViewGroup,还需要向自己的孩子给出建议宽高,即widthMeasureSpec和heightMeasureSpec;
    ·覆写onDraw()——主要用于自定义View中,完成对自身的绘制;
    ·覆写onLayout()——主要用于自定义ViewGroup中,定义孩子的排列规则:






    65 说说onMeasure()方法的两个参数widthMeasureSpec和heightMeasureSpec分别代表什么含义?
    ·这两个参数封装了【宽高模式】和【父控件建议的宽高值】(我们对onMeasure()的覆写即意味着我们不打算采用父控件建议的宽高值作为自己的测量宽高)
    ·宽高模式为以下三种之一:
    MeasureSpec.EXACTLY——精确模式,即布局中指定了具体的尺寸:match_parent或具体值;
    MeasureSpec.AT_MOST——至多模式,以父控件的宽高为上限,布局中指定的是wrap_content;
    MeasureSpec.UNSPECIFIED——未指定,父控件对当前控件未加限制,想要多少给多少,用的很少;(一般声明于ScrollView条目或列表的条目中)
    ·当布局文件中的宽高配置为match_parent时,建议宽高值就是父控件的宽高;
    ·当布局文件中的宽高配置为具体值时,建议宽高值就是配置的具体值;
    ·当布局文件中的宽高配置为wrap_content时,建议宽高值因父控件而异,一般的实现为父控件的宽高;






    66 如何刷新一个View,你能说出几种方式?分别有何异同?如何刷新一个ViewGroup?
    ·View的动态刷新API为:view.invalidate()和view.postInvalidate();
    ·上述两个方法功能相同,即触发View的onDraw()方法,但线程中只能调用postInvalidate();
    ·ViewGroup的刷新方式为:viewGroup.requestLayout()——这个方法会去调用VG的onLayout()使之重新排列孩子;






    68 简述安卓的事件派发和消费原理(重要);


    ·事件:用户的触屏交互行为,可以细分为三个不同动作:MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP
    ·派发:在Activity及其布局树(View Hirarchy)中的多级ViewGroup和View之间派发事件,决定事件该有谁(们)来处理;
    ·消费:对事件的处理称之为消费,同一事件可以有多次【二次消费】,直到某一级标注【消费干净】;
    ·滑动冲突:触屏事件发生在多个【可滚动控件】的交叉区域,【系统默认的事件派发和消费结果】不能令人满意的现象——如何令人满意?重写相关控件的派发、拦截和消费方法;
    ----------------------------------------
    @派发:
    ·boolean dispatchTouchEvent(MotionEvent event)
    ·返回值含义:派发过程中,自己或下级【是否已将事件消费干净】,true=事件已消费干净
    ----------------------------------------
    @拦截:
    ·boolean onInterceptTouchEvent(MotionEvent ev)
    ·返回值含义:派发过程中的每一级VG都有权决定是否拦截,拦截则【隧道式派发】终止,开始【冒泡式消费】,true=拦截
    ----------------------------------------
    @消费:
    ·boolean onTouchEvent(MotionEvent event)
    ·返回值含义:true=事件已消费干净,上级不必再做【二次消费】
    ----------------------------------------
    ·派发和消费的流程可以归纳为:隧道式(即自上而下地:Activity-ViewGroup-View)派发,冒泡式(即自下而上地:View-ViewGroup-Activity)消费
    ·事件发生;
    ·Activity的dispatchTouchEvent开始派发事件(注意:返回值不是立即获得,而是在整个事件派发和消费的结尾才返回);
    ·事件逐级派发到ViewGroup,ViewGroup决定是否要拦截——拦截则从自己开始冒泡式消费,不拦截则继续向下派发;
    ·事件派发到终端节点View,开始冒泡式消费;
    ·每一级View或ViewGroup都可以通过onTouchEvent的返回值true或false标注【事件是否已被消费干净】;
    ·消费干净则再无二次消费,自下而上所有的dispatchTouchEvent全部返回true直至Activity的dispatchTouchEvent;
    ·没消费干净,则本级dispatchTouchEvent返回false,上级onTouchEvent将继续做二次消费;
    ·布局树中没人将事件消费干净,Activity的onTouchEvent将做最终的消费;
    ·最终消费结果为true,Activity的dispatchTouchEvent返回也是true,则继续接收和派发【本次事件的后续动作】;
    ·最终消费结果为false,Activity的dispatchTouchEvent返回也是false,则【本次事件的后续动作】将全部被丢弃,直至下次事件发生;






    69 说说使用SVN需要注意的要点;
    ·提交之前一定要先Update,以使冲突暴露出来;
    ·处理冲突:要和冲突方队友取得一致的版本后(除非你自己很有把握),再删除冲突标记,标记为冲突已解决,再提交;
    ·勤提交,每日至少提交一次是多数团队的开发准则之一;
    ·尽量做原子提交,而非大面积的粗暴提交,这样便于冲突的发现处理,以使风险可控;
    ·避免犯一些常见的禁忌,例如:
    擅自单方面地修改文件或文件夹名称;
    擅自单方面地将文件或文件夹去版本控制;
    以上两种操作都会使队友副本中对应的文件失去版本控制;
    展开全文
  • 调用有道api发现在mumu模拟器上可以进行单词查询,而真机和as内置的模拟器上却没有反应...如果真机版本是4.0的话,那很可能是你创建网络连接的时候没有在线程里做,安卓3.0之后强制要求必须在线程里创建网络连接。 ...

    调用有道api发现在mumu模拟器上可以进行单词查询,而真机和as内置的模拟器上却没有反应
    后来我仔细一看发现 原来mumu模拟器是android6.0, 而AS内置的模拟器和真机都是android10,
    我上网查了资料 说是

    虚拟机android SDK版本多少的?真机呢?如果真机版本是4.0的话,那很可能是你创建网络连接的时候没有在线程里做,安卓3.0之后强制要求必须在线程里创建网络连接。

    然后我就开启了一个子线程 在子线程里使用OkHttp发出一条HTTP请求 最后可以通过 String str = response.body().string();得到响应数据
    但结果还是不行
    在这里插入图片描述这是mumu模拟器 没有onFailure
    在这里插入图片描述能查询到结果有返回,可以看到onResponse:打印出来了
    在这里插入图片描述而内置的模拟器却不行 每按一次就打印一次onFailure:
    真难过!后来看到一篇帖子关于okhttp3网络框架的onfailure错误
    明白了原来是

    Android P全面禁止了非https链接,并严格审查网站的CA证书 详情请看这里 但是国内的很多网站都是非https的,怎么办呢?

    这时候我们需要在自己设置非安全连接。
    非安全连接设置

    首先,我们在res/xml下建立我们自己的network security config文件,名字任意,可以叫做network_security_config.xml。

    如图所示

    然后删除里面的代码 附上下面的代码`

    <network-security-config>
         <!--默认允许所有网址使用非安全连接-->
        <base-config cleartextTrafficPermitted="true" />
    </network-security-config>`
    

    然后再在AndroidManifest.xml里加一段代码,注意@xml/network_security_config就是刚刚命名的名字。

    <application
            android:networkSecurityConfig="@xml/network_security_config"
    		....................
    
    </application>
    

    做完以后,你会发现http网络请求就可以通过啦!
    在这里插入图片描述
    成功啦!真开心!!!
    最后再次鸣谢两位博主 给我的帮助!
    QY绿鸟One Lion
    真的谢谢!!!

    展开全文
  • r0capture安卓应用层抓包通杀脚本简介仅限安卓平台,测试安卓7、8、9、10 可用 ;无视所有证书校验或绑定,不用考虑任何证书的事情;通杀TCP/IP四层模型中的应用层中的全部协议;通杀协议包括:Http,WebSocket,Ftp,...

    r0capture

    安卓应用层抓包通杀脚本

    简介

    仅限安卓平台,测试安卓7、8、9、10 可用 ;

    无视所有证书校验或绑定,不用考虑任何证书的事情;

    通杀TCP/IP四层模型中的应用层中的全部协议;

    通杀协议包括:Http,WebSocket,Ftp,Xmpp,Imap,Smtp,Protobuf等等、以及它们的SSL版本;

    通杀所有应用层框架,包括HttpUrlConnection、Okhttp1/3/4、Retrofit/Volley等等;

    无视加固,不管是整体壳还是二代壳或VMP,不用考虑加固的事情;

    如果有抓不到的情况欢迎提issue,或者直接加vx:r0ysue,进行反馈~

    January.14th 2021 update:增加几个辅助功能

    增加App收发包函数定位功能

    增加App客户端证书导出功能

    新增host连接方式“-H”,用于Frida-server监听在非标准端口时的连接

    用法

    Spawn 模式:

    $ python3 r0capture.py -U -f com.qiyi.video -v

    Attach 模式,抓包内容保存成pcap文件供后续分析:

    $ python3 r0capture.py -U com.qiyi.video -v -p iqiyi.pcap

    建议使用Attach模式,从感兴趣的地方开始抓包,并且保存成pcap文件,供后续使用Wireshark进行分析。

    Sample.PNG

    收发包函数定位:Spawn和attach模式均默认开启;

    可以使用python r0capture.py -U -f cn.soulapp.android -v >> soul3.txt这样的命令将输出重定向至txt文件中稍后过滤内容

    locator.png

    客户端证书导出功能:默认开启;必须以Spawm模式运行;

    运行脚本之前必须手动给App加上存储卡读写权限;

    并不是所有App都部署了服务器验证客户端的机制,只有配置了的才会在Apk中包含客户端证书

    导出后的证书位于/sdcard/Download/包名xxx.p12路径,导出多次,每一份均可用,密码默认为:r0ysue,推荐使用keystore-explorer打开查看证书。

    clientcer.png

    新增host连接方式“-H”,用于Frida-server监听在非标准端口时的连接

    difport.png

    PS:

    这个项目基于frida_ssl_logger,之所以换个名字,只是侧重点不同。 原项目的侧重点在于抓ssl和跨平台,本项目的侧重点是抓到所有的包。

    局限:部分开发实力过强的大厂或框架,采用的是自身的SSL框架,比如WebView、小程序或Flutter,这部分目前暂未支持。部分融合App本质上已经不属于安卓App,没有使用安卓系统的框架,无法支持。当然这部分App也是少数。暂不支持HTTP/2、或HTTP/3,该部分API在安卓系统上暂未普及或布署,为App自带,无法进行通用hook。各种模拟器架构、实现、环境较为复杂,建议珍爱生命、使用真机。暂未添加多进程支持,比如:service或:push等子进程,可以使用Frida的Child-gating来支持一下。支持多进程之后要考虑pcap文件的写入锁问题,可以用frida-tool的Reactor线程锁来支持一下。

    以下是原项目的简介:

    frida_ssl_logger

    修改内容

    优化了frida的JS脚本,修复了在新版frida上的语法错误;

    调整JS脚本,使其适配iOS和macOS,同时也兼容了Android;

    增加了更多的选项,使其能在多种情况下使用;

    Usage

    python3 ./ssl_logger.py -U -f com.bfc.mm

    python3 ./ssl_logger.py -v -p test.pcap 6666

    展开全文
  • r0capture安卓应用层抓包通杀脚本简介仅限安卓平台,测试安卓7、8、9、10 可用 ;无视所有证书校验或绑定,不用考虑任何证书的事情;通杀TCP/IP四层模型中的应用层中的全部协议;通杀协议包括:Http,WebSocket,Ftp,...
  • 运行系统: Windows 7,Windows 8.x或Windows 10的PC,运行OS X Yosemite(10.10)或更高版本的Mac,或运行Ubuntu Linux 14.04(Trusty)或更高版本的PC。 手机: Android 5.0(或更高版本)的移动设备,由Qualcomm ...
  • 黑马安卓52期视频教程

    热门讨论 2015-06-24 22:15:48
    01、安卓基础+JNI(14天)-------------------------- day01_Android应用开发-快速入门 01_网络制式的概念 02_android简单历史 03_Android体系结构 04_JVM和DVM的区别 05_下载SDK 06_SDK目录结构 07_模拟器的创建 ...
  • python+AI 安卓端编程

    2021-01-01 20:29:38
    下载后选择版本,等待10分钟左右。 建议使用5G网络,两分钟就够了 完成后自动进入gui 最后上几张使用图 智能助手 资源库 点击桌面右下角可以进入终端,点击最上方图标可以返回gui 电脑端使用指南 打开** cloud_ip*...
  • 但是Xposed Framework只支持Android7.X及以下版本,现在大部分手机早已用上了8,9,10安卓系统了,那么有可替代的框架可以用吗?当然有,可以替代这个框架的有EdXposed Framework,太极等,这两款工具各有所长。...
  • 在历经几个大版本的修复升级后,安卓Q(也就是指Android 10)系统逐渐成长为了一个完备的新主流系统、各大手机厂商也都陆续跟进、推进了安卓Q系统的逐渐普及。比如三星的OneUI 2.0、小米的MIUI11、华为的EMUI10,也都...
  • 2015/2/5 星期四 Android应用开发-代码版本管理和实战 2015/2/6 星期五 android案例与项目—手机安全卫士 2015/2/7 星期六 android案例与项目—手机安全卫士 2015/2/8 星期日 2015/2/9 星期一 android案例与项目—...
  • CMS是苹果cms10(TP框架)API(视频接口管理后台)及CMS(苹果cms或其他影视站点)是两个站点,需要用两个域名或子域名创运行环境服务器安装宝塔面板(相关安装教程参照宝塔面板官方教程)0或以上版本6NginxPHP开启...
  • C++版本 2048小游戏

    2019-08-15 15:46:31
    可以帮助了解MVC框架,了解和使用opencv的画图库,c++简单的使用opencv实例,当前只是win32的程序,接口已经留好了,后续需要将项目移植到安卓中,使用安卓调用c++接口,完成手机版2048小程序,实现真正的跨平台...
  • 2020年9月10号,鸿蒙2.0(HarmonyOS 2.0)系统正式发布,鸿蒙2.0面向应用开发者发布Beta版本,在2020年9月10发布大屏,手表,车机版鸿蒙,2020年12月发布手机版鸿蒙。在2020年9月10日,鸿蒙开源路标面向内存128KB-...
  • 其中mui.min.js里面涉及46处地方,未压缩版本有57个左右,JQ中包含10个的样子 现只能通过以下几个属性粗略的代替原来需要的效果: event.cancelable 浏览器默认行为是否可以被禁用 event.defaultPrevente...
  • | 10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等.rar 9.99 KB | ASP+sql精品在线试题库设计+论文.rar 2.70 MB | asp网站ajax测试demo.rar 6.23 MB | c#求几何图形的面积,使用了继承.rar 74.95 KB | c&...
  • 极简笔记 v1.3.8官方版

    2021-01-04 07:57:30
    为您提供极简笔记下载,极简笔记是一款现代...跨平台支持Win10、macOS,采用QT框架开发,后面会推出IOS和安卓手机版本。 实时同步功能,采用TCP协议实时上传数据到云端。实时搜索,闪电一般的搜索速度,支持拼音搜索。
  • 此项目是基于 mPaaS 框架,更新 APP 的功能 ...1 “私有目录” 的适配(安卓 10 上对于目录权限的改动大家可以自行百度) 查看安装包下载的目录,发现下载好的新的安装包是存储在报名目录下的 download...
  • 商淘软件WSTMart电子商务系统是一款基于THINKPHP 5.1框架打造的B2B2C电商平台,是目前基于thinkphp 5最为完善的开源商城系统,拥有PC、手机WAP、微商城、安卓APP、苹果APP、微信小程序,六端合一,六端互通,拥有时下...
  • 方法Hook,VA内置了一套运行于Android各个版本(直到AndroidQ)的Xposed框架以及native hook框架,基于此您可以方便的Hook任意内部App的任意Java/Native方法。可以轻松实现一个免Root的Xposed环境(有实例代码)。 7. ...
  • 微信又㕛叒叕更新了~这次是iOS更新~ ...安卓7.0,10内测更新文章中,我们已经详细说明过~ “引用”功能是电脑版一直都有的功能,这下,手机版也可以使用引用啦~ 如果你对玩机稍了解一点的话,Xposed框架的微X...
  • 如果申请的权限和项目中的 targetSdkVersion 对不上,框架会抛出异常,是因为 targetSdkVersion 代表着项目适配到哪个 Android 版本,系统会自动做向下兼容,假设申请的权限是 Android 11 才出现的,但是 targetSdk...
  • 我秃了,我也变强了! 基于Bmob后台完成整个APP的后台服务功能(真的不会自己搭建安卓后台)。 (弱弱的说一句,现在是基于android 4.2开发,以后会上高版本的QAQ) ...2019/10/1 开始*(可能因为比赛耽搁这个项目)
  • 安卓早期版本的支持也将很快到来。 iOS平台的编译可以在远程完成,无需Mac电脑或iOS工具 开发工作可以在任意IDE中完成。 支持任意跨浏览器的JavaScript库。 支持CSS。 支持MVVM。 ...
  • <div><p>部分切片加载失败,...安卓10</li></ul> 错误日志 <p>W/System.err: com.arialyy.aria.exception.AriaM3U8Exception: Aria M3U8 Exception: 连接错误,http错误码:429,url:...
  • 基于pytorch框架用resnet101加GPT构建AI玩王者荣耀 本源码模型主要用了的源码的解码部分。以及pytorch自带的预训练模型“resnet101-5d3b4d8f.pth” 注意运行本代码需要注意以下几点注意!!!!! 1,目前这个模型...

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

安卓10版本框架