热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android引导,安卓设置向导

如何用nfs来引导android用NFS作为rootfs来启动内核在开发中的必备的,用nfs启动android,也就免去频繁的对nand烧写操作。网上有很多文章,可惜都是互相cop

如何用nfs来引导android

用NFS作为rootfs来启动内核在开发中的必备的,用nfs启动android,也就免去频繁的对nand烧写操作。网上有很多文章,可惜都是互相copy,参考性不强。下面来说明如何用NFS来启动android,具体的操作就不细说了。通常的嵌入式linux使用NFS启动,需要启动NFS的文件系统和相关网络支持,这是第一步,至少内核在最后阶段能mount到FS,而mount之前网络协议也必须是支持的。

内核启用NFS文件系统支持,网络里面支持IP_PNP下的BOOTP,DHCP,RARP

android内核在最后阶段,是执行RAMDISK中的init进程来remount分区,system和data也是在这个时候才挂载上的。使用NFS启动时,要关闭内核中的ramdisk功能。这样,内核启动后,mount到NFS的目录,然后直接执行NFS目录下的init进程

准备android的文件系统。编译aosp代码,最终生成system, data, root目录,分别copy到NFS目录下,配置NFS允许网络访问该目录。在nfsroot目录下,需要修改init.rc文件。里面会对system重新挂载,可以注释掉该内容,修改如下:

#on fs

# mount mtd partitions

# Mount /system rw first to give the filesystem a chance to save a checkpoint

#mount yaffs2 mtd@system /system

#mount yaffs2 mtd@system /system ro remount

#mount yaffs2 mtd@userdata /data nosuid nodev

#mount yaffs2 mtd@cache /cache nosuid nodev

on post-fs

# once everything is setup, no need to modify /

mount rootfs rootfs / rw remount

这里,关闭也on fs的action操作,记得把on fs也注释掉

Android初探开机引导

因为需求有做开机引导,所以简单的学习下这块功能的流程,并简单的做个总结

主要参考文章:

做开机引导,主要要做到的效果就是 只有第一次使用的时候会打开,只打开一次,当执行完开机引导的流程之后,之后开机都不会再展示

要实现开机引导,那么就一定是系统应用,按照原理来说,需要两个步骤,第一,需要引导页的优先级比LAUNCHER高。第二,需要流程完毕之后执行某些操作让应用下次不会启动。

可以设置android:priority属性,系统会判断启动priority优先级高的。

这样配置之后,其它应用的优先级如果没有设置的话默认就是0,这样就会优先打开引导页。

自己可以在引导页中写自己想要做的逻辑。当执行完所有逻辑之后,需要配置

这里主要做了设置Settings.Global.DEVICE_PROVISIONED和Settings.Secure.USER_SETUP_COMPLETE两个参数,还有PackageManager.setComponentEnabledSetting方法禁用组件

第一个参数是组件名

第二个参数是状态

不可用状态:COMPONENT_ENABLED_STATE_DISABLED

可用状态:COMPONENT_ENABLED_STATE_ENABLED

默认状态:COMPONENT_ENABLED_STATE_DEFAULT

第三个参数flags

DONT_KILL_APP或者0,0表示杀死包含该组件的app

运行时会发现设置priority优先级比LAUNCHER高,在开机之后也会提示让你选择打开应用,而不是默认打开优先级高的,关于这个问题,可以参考这篇文章

只需要把应用安装到system/priv-app中,就能解决这个问题。正常来说一般系统应用也是安装在这么文件夹中,只是平时调试的时候会为了方便直接run,所以可能出现这个问题。

将应用安装到该文件夹中可以使用这个命令,然后重启

看了很多文章,都没有讲到为什么要设置这两属性,因为要达成目的,我们只需要设置priority和调用setComponentEnabledSetting方法就行,为什么要设置这两个参数?不设置会有什么影响。

其实简单来说,系统在其他地方有用到这两个参数,举个简单的例子,我直接

去运行程序,能够很明显的测出这种情况下按Home键没反应,除此之外屏保也会不显示。

所以这两个参数还是需要在这个地方设为1的。

android 引导页提示框,该怎么解决

不知道楼主要做什么效果,如果只为判断何时显示的话,在引导页定义一个/**

* 进入下一页

*/

private void goNextPage() {

// 是否是第一次加载

String isFirestLoad = Util.getSharePersistent(

activity.getApplicationContext(), FIREST_LOAD);

if (isFirestLoad != null isFirestLoad.equals("true")) {

Intent intent = new Intent();

intent.setClass(this, welcome.class);

startActivityForResult(intent, 0);

}

}

在oncreat中判断goNextPage();

/**

* 关闭引导页的操作

*/

close = (ImageButton) findViewById(R.id.close);

close.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Util.saveSharePersistent(activity.getApplicationContext(),

FIREST_LOAD, "true");

goNextPage();

}

请教下android 这种新手引导功能该怎么实现?

1、第一阶段:加在首页的PopupWindow上面

private void addFeatureGuide() {

LayoutInflater layoutInflater = LayoutInflater.from(this);

LinearLayout popCOntentView= (LinearLayout) layoutInflater.inflate(R.layout.popup, null);

PopupWindow popupWindow = new PopupWindow(popContentView, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

popupWindow.showAtLocation(this.findViewById(R.id.main_root), Gravity.CENTER, 0, 0);

}

在onResume的时候调用addFeatureGuide()方法。

这样应该OK了吧?不!Run的时候报错了:

FATAL EXCEPTION: main

java.lang.RuntimeException: Unable to resume activity {com.example/com.example.MyActivity}: android.view.WindowManager$BadTokenException: Unable to add window — token null is not valid; is your activity running?

at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)

at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)

at android.app.ActivityThread.access$2300(ActivityThread.java:125)

Android 跳过Gapps开机引导

Android 手机在刷了 Gapps 之后,在开机进入系统时会进入 Gapps 的开机引导(也就是设置 Google 帐号神马的)。但是这需要连 Google 进行验证,于是。。。。。。。。

对于这种情况,可以通过以下方法解决:

这个方法就不多说了,只要能连上 Google ,就不会卡在这里了。至于怎么连 Google ,请自行寻找科学上网。

这个Gapps的开机引导是需要连网进行的,默认的情况下如果不连网的情况下是会自动跳过的。但是许多系统在默认情况下 Wifi 和数据是会自动打开,就算把卡取了,也还会有 Wifi ,一样无法跳过。对此,可选择先不刷 Gapps ,进入系统后将 Wifi 的数据关闭,再刷 Gapps ,此方法有一定弊端,有可能会导致 Gapps 某些应用发生某些玄学问题。。。。。

在设置时,可点击 复制数据 ,而后拉到最底,点击 离线设置 后再进行一些设置就可进入系统。(但同样玄学的是,有时在 复制数据 里,并没有离线设置或使用本地设置这一选项╮( ̄▽ ̄)╭)

这可能是最玄学的一个方法了,据传连点屏幕四角就可跳过此引导( 顺时针 方向,从左上角开始)。但是!!!但是!!!这是检验血统的时刻,时灵时不灵。别问我是怎么知道的。 (╯‵□′)╯︵┻━┻

敲黑板!!! 这是我所试过最科学的方法。在开机情况下,将手机连上电脑,使用 adb 工具来修改 USER_SETUP_COMPLETE 和 DEVICE_PROVISIONED 的值。具体操作如下:

最后附上测试环境:

PC: Windwos 10

Android: LineageOS 15.0 for Xiaomi Mi 5

Gapps: open_gapps-arm64-8.0-aroma-20171021

adb: 1.0.39


推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
author-avatar
mobiledu2502872907
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有