今天遇到一个maven,mvn 命令报错:找不到或无法加载主类 org.codehaus.plexus.classworlds.launcher.Launcher,网上说是设置环境变量M2_HOME,但是我使用
image.png Launcher启动 在SystemServer类中会调用startOtherServices函数: private void startOtherServices() {...AndroidManifest.xml文件中定义: <activity android:name="com.android.launcher3.Launcher"...android:launchMode="singleTask" android:clearTaskOnLaunch="true" android:stateNotNeeded...="android.intent.action.MAIN" /> android:name="android.intent.category.HOME...这样就启动了Launcher了。_ image.png
Launcher启动 上文讲到Launcher的Activity被启动。 接下来就执行Activity的生命周期。...代码Launcher.java中: protected void onCreate(Bundle savedInstanceState) { …… super.onCreate...launcher) { getLocalProvider(mContext).setLauncherProviderChangeListener(launcher);...(savedInstanceState); // 将Launcher传入LauncherAppState实例 mModel = app.setLauncher(this...对象,所以这里就将app传给了Launcher对象。
在此之前已经启动的AMS会将Launcher启动起来,Launcher启动过程如图: 启动Launcher的入口是AMS的systemReady方法,它在SystemServer的startOtherServices...Launcher启动后会查询系统中已经安装的应用程序及信息,然后显示到桌面上。...总结 我们通过两篇文章来简单的了解了Android系统的启动流程,这个流程主要有几个部分: 启动电源和系统启动 当电源键按下时引导芯片代码从预定义地方(固化在ROM)开始执行。...引导程序BootLoader 引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。...启动 被SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上 以上就是Android系统启动的完整流程,当然很多细节没有讲,大家有兴趣可以自行研究一下
ActivityStack:为了让这许多 Activity协同工作而不至于产生混乱,Android平台设计了一种堆栈机制用于管理Activity,其遵循先进后出的原则,系统总是显示位于栈顶的Activity...(2)如果activity的android:taskAffinity属性为空,此时AMS就会去mHistory中通过比较task.intent.getComponent()和启动activity的Comeponent...这一步android的四大组建都会在这里等着初始化。在这个方法中,先获取stack中top running Activity。什么情况下我们该启动它呢?
其实本文来源于我在项目组内部的一次分享活动的ppt。 在开始学习Launcher3源码之前请务必保证你已经具备如下图所示基础知识技能(相关权重系数已经饼状图标注),如下: ?...Launcher基础知识 有些人可能觉得Launcher很高端,其实Launcher的实质也就是一个普通应用,它只是比普通应用多配置了Category 的android:name=”android.intent.category.HOME...下图其实就是Android系统开机启动Launcher的大致过程,如下: ?...Android系统开机启动Launcher的大致过程 有了大致启动流程之后我们来看看Launcher界面的划分,如下是Launcher结构的模块划分: ?...有了上面这些图,相信你再打开Android M Launcher3源码进行阅读时就能有个大致框架了,代码也就不贴了,只为记录而已。
ActivityThread启动主线程 进入android.app.activethread类后,开始执行main函数: public static void main(String[] args...void run() { ensureJitEnabled(); } }); android.ddm.DdmHandleAppName.setAppName...DdmVmInternal.enableRecentAllocations(true); } …… Process.setArgV0(data.processName); android.ddm.DdmHandleAppName.setAppName...总结 APP启动大致需要六步骤: (1)Launcher响应了用户的点击事件,然后通知AMS; (2)AMS得到Launcher的通知,新建一个Task去准备启动Activity,并且Paused...Launcher; (3)Launcher得到AMS消息,那么就直接挂起,并告诉AMS已经Paused了; (4)AMS知道了Launcher已经挂起之后,为新的Activity准备启动工作,AMS
Launcher概述 Launcher程序就是我们平时看到的桌面程序,它其实也是一个Android应用程序,只不过这个应用程序是系统默认第一个启动的应用程序,Android系统启动的最后一步就是启动Launcher...Launcher中应用图标显示流程 packages/apps/Launcher3/src/com/android/launcher3/Launcher.java @Override protected...对象传入 packages/apps/Launcher3/src/com/android/launcher3/LauncherAppState.java LauncherModel setLauncher...再回到Launcher的onCreate函数,在注释2处调用了LauncherModel的startLoader函数: packages/apps/Launcher3/src/com/android/launcher3...的,因此我们来查看Launcher的bindAllApplications函数 packages/apps/Launcher3/src/com/android/launcher3/Launcher.java
startActivityForResult(intent, -1); } } startActivityForResult函数,第二个参数为-1,表示Launcher...android".equals(r.info.packageName)) { app.addPackage(r.info.packageName, r.info.applicationInfo.versionCode
image.png 目录 Android应用启动之从Launcher拉起APP(一) Android应用启动之从Launcher拉起APP(二) 上文中写到,第一次启动应用程序的Activity,函数最终执行..., String instructionSet, String appDataDir); 最后执行了native函数的nativeForkAndSpecialize: static jint com_android_internal_os_Zygote_nativeForkAndSpecialize...> cl; try { // 加载类(android.app.activethread) cl = Class.forName(className..." + className, ex); } Method m; try { // 获取android.app.activethread
在4.2之前版本的 Android Studio 中想要module 打包arr,上传Maven 我们只需要 在对应module的build.gradle文件顶部添加 apply plugin: 'maven...但是Gradle Task在Android项目中又大又慢,基于性能原因4.2版本默认将Task禁用了 我们可以去File->Settings->Experimental中关闭该选项,以重新开启Task...回到Gradle窗口,右键你的项目Reload刷新,如果问题仍然存在,只需重新启动Android Studio即可
知晓当前在哪个活动 创建一个BaseActivity 类继承Activity 在onCreate 中输出类名 public class BaseActivity extends AppCompatActivity...persistentState); Log.d(TAG, getClass().getSimpleName()); } } 随时随地退出程序 新建一个ActivityCollector 作为活动管理器...ActivityCollector.remoteActivity(this); } } 在什么时候退出程序 只需要调用ActivityCollector.finishAll()方法 可以在销毁所有活动后加上杀掉进程代码...ActivityCollector.finishAll(); android.os.Process.killProcess(android.os.Process.myPid());
Android中元素的属性 @+id/button_1 android:id是给元素定义一个唯一的标识符 android:layout_width="match_parent" width:宽,...setContentView() 给当前活动加载一个布局 例:setContentView(R.layout.first_layout); AndroidManifest中配置主活动 在标签内部加入并添加以下代码,还可以使用android:label指定活动标题栏内容 <activity android:name=".FirstActivity"..." /> android:name="android.intent.category.LAUNCHER" /> 活动 修改监听器代码,添加finish(); 效果和按下Back键一样的。 2017.04.22
好了闲话少说,上一篇博客(Android Metro风格的Launcher开发系列第二篇)说到Launcher主体框架用ViewPager来实现,这一篇博客咱们来说说每一个page的具体实现。...PagerAdapter: Launcher主体ViewPager实现就引出了PagerAdapter,PagerAdapter是android.support.v4包中的类,它的子类有FragmentPagerAdapter...> Launcher_ScaleView"> Launcher实现,我用了三篇博客来讲解这个应用,所有效果的实现都是自己摸索的,应该还有更好的实现方法,大家可以多多交流提出自己的看法,也可以关注我的微信号coder_online
文章目录 一、 Launcher 应用简介 二、 Launcher 应用源码简介 三、 Launcher 图标点击方法分析 一、 Launcher 应用简介 ---- Launcher 应用 : Android...中每个应用都是一个可执行程序 , Android 的主界面也是一个应用 , 称为 Launcher 应用 , 现在分析主界面的相关逻辑 , 进而找到应用启动的入口位置 ; 2 ....: 其位置再 Android 源码路径下的 \packages\apps 目录下 ; Launcher 版本的路径 : \packages\apps\Launcher Launcher2 版本的路径...Launcher2 源码分析 : ① Launcher2 应用 Activity 界面源码位置 : \packages\apps\Launcher2\src\com\android\launcher2\...Launcher.java ② Launcher.java 界面 : 这里分析 Launcher2 的 Launcher.java 类 , 该类就是 Android 开机后 , 看到的界面 , 在该界面中维护了所有应用的图标
前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客 Android Metro风格的Launcher开发系列第一篇写了如何配置...Android开发环境,只是用文字和图片展示了开发Metro风格Launcher的初步设计和产品要求,这一篇文章将会从代码上讲解如何实现对应的UI效果,好了,评书开讲!...Launcher主体框架实现: Launcher主体框架我选用的是大家所熟悉的ViewPager控件,因为ViewPager可以很容易做pager之间的切换动画,动画是可以自定义的,这样就轻松搞定滑出屏幕的各种效果...每一屏page之间的切换是通过实现ViewPager.PageTransformer接口来实现的,具体这个接口的讲解我这里就不介绍了,大家可以参考google官方文档:http://developer.android.com...方法实现,具体代码如下: this.setPageMargin(-getResources().getInteger(R.integerviewpager_margin)); 总结: 以上就是Launcher
知晓当前在哪一个活动 工作当中可能接手一份别人的代码,当需要在某个界面修改东西的时候,却找不到这个界面对应的是哪个活动。...现在点击按钮分别进入三个活动, 可以看到把当前活动的类名打印了出来。...Override public void onClick(View v) { ActivityCollector.finishAll(); android.os.Process.killProcess...(android.os.Process.myPid()); } }); } 加上了杀掉当前进程的代码,以保证程序完全退出, android.os.Process.killProcess...(android.os.Process.myPid()); killProcess()方法用于杀掉一个进程,接收一个进程ID参数,我们可以通过myPid()方法来活动当前程序的进程ID, 需要注意的是
可能大家做Android机顶盒或者Android电视开发的比较少,这类开发基本上都是基于源码的开发,大家有一个git版本库,大家开发完了编译出来一个版本烧到板子上跑,要编译肯定就要编译环境什么的,google...2、配置开发环境: (1)配置adb: 去官网下载android-sdk-linux,下载地址是:http://dl.google.com/android/ + 不同版本的sdk 例如:下载r20版本.../android/android-sdk_r20-windows.zip r20的mac版本:http://dl.google.com/android/android-sdk_r20-macosx.zip...二、产品设计: 在电视或者机顶盒上做UI开发,首先要考虑电视尺寸都比较大,你的UI展现要能够在电视屏幕上看着大小合适,展现的简洁舒服,别像原生Launcher那样好多小图标看着密密麻麻的,第二个是要方便遥控器操作...以上就是我Launcher Metro风格实现的第一篇博文,简单描述了环境配置和设计思路,写的有不足之处还请各位多多包涵和交流,具体代码实现我会在我的下一篇博文中进行讲解,请多多关注!
探究Android活动的小技巧 1.找出当前的活动 当我们在查看别人的代码的时候可能不能第一眼就发现首次的活动是哪一个,我们可以通过以下的方法来找出当前的主活动是哪一个: 新建一个BaseActivity...import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log...Log.d(TAG,"当前的类:"+ getClass().getSimpleName()); } } 然后让其他的类继承这个类这样当我们启动程序的时候就可以在log日志中找出当前执行的是哪一个活动...import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast...(android.os.Process.myPid()); } }); } } 3.启动活动的最佳方法 SecondActivity添加如下代码:
中通过标签指定android:launchMode属性来选择启动模式。...,每次启动活动都会创建该活动的一个新的实例。...修改AndroidManifest.xml标签中主活动的启动模式: android:name=".MainActivity" android:launchMode="singleTop..." android:label="This is MainActivity"> 然后运行以后查看logcat,创建了一个实例,然后在点击按钮,不会再产生新的实例。...,并把整个活动之上的所有活动统统出栈,如果没发现就会创建一个新的活动实例。
领取专属 10元无门槛券
手把手带您无忧上云