⑴ 怎么从android studio往bitbucket提交代码
Github: 目前最大的代码托管网站,世界上大部分开源软件都托管在这里,已经发展成软件开发协作社区,具有强大的功能。针对开源项目免费,而私有仓库要收费,目前是每月7美元。把代码托管在该网站上,能受到更多的关注。
⑵ 如何获取android源代码
当前的Android代码托管在两个方:https://github.com/android 和https://android.googlesource.com之前在 android.git.kernel.org上也有托管,不过现在重定向到了https://android.googlesource.com好在都支持git访问。
google提供的repo工具实际上是一个内部操作git工具来简化操作Android源码的Python脚本。经过尝试,直接使用git工具在ubuntu下可以实现cloneAndroid源码。下面介绍一下方法:
1.获取当前的在github上托管的Androidgitrepositories:
github页面为:https://github.com/android/following。不过这个页面不支持通过wget"https://github.com/android/following"或者curl"https://github.com/android/following"的方式访问,错误信息如下:
这个时候需能做的只能是"tryagain"了。
需要说明的是"不要试图同时并发执行多个gitclone命令",这样会导致大量出现上面贴图中的错误,另外,整个clone过程中耗时最多的gitrepository如下:
kernel_common.gitkernel_msm.gitplatform_frameworks_base.gitplatform_prebuilt.git其中platform_prebuilt.git是google提供的预编译好的二进制文件,包含:各种库文件,jar包,可执行程序等等,如果只是阅读Android源代码,这个gitrepository可以不用clone.
⑶ 安卓github代码托管仓库有什么用
为什么要用github托管代码
用github完全没问题,实际上npm本身的包管理因为没有命名空间的原因已经出过岔子了。
自己提供托管的原因个人认为主要是:
1,为了方便,省去域名等,直接用项目名称访问,但是这与GitHub 托管不冲突,所以这个原因不是必要原因
2,还有什么比把代码掌握在自己手里更让人放心的呢?一个单纯的包分发工具是不是太单调了?怎么讲故事?
⑷ 想让android应用常驻后台,不被杀死,各位大神有什么高招
方法: 对于一个service,可以首先把它设为在前台运行: public void MyService.onCreate() { super.onCreate(); Notification notification = new Notification(android.R.drawable.my_service_icon, "my_service_name", System.currentTimeMillis()); PendingIntent p_intent = PendingIntent.getActivity(this, 0, new Intent(this, MyMainActivity.class), 0); notification.setLatestEventInfo(this, "MyServiceNotification, "MyServiceNotification is Running!", p_intent); Log.d(TAG, String.format("notification = %s", notification)); startForeground(0x1982, notification); // notification ID: 0x1982, you can name it as you will. } 重要设置------------------------------- 相较于/data/app下的应用,放在/system/app下的应用享受更多的特权,比如若在其Manifest.xml文件中设置persistent属性为true,则可使其免受out-of-memory killer的影响。如应用程序'Phone'的AndroidManifest.xml文件: <application android:name="PhoneApp" android:persistent="true" android:label="@string/dialerIconLabel" android:icon="@drawable/ic_launcher_phone"> ... </application> 设置后app提升为系统核心级别,任何情况下不会被kill掉, settings->applications里面也会屏蔽掉stop操作。 这样设置前的log: Proc #19: adj=svc /B 4067b028 255:com.xxx.xxx/10001 (started-services) # cat /proc/255/oom_adj 设置后的log: PERS #19: adj=core /F 406291f0 155:com.xxx.xxx/10001 (fixed) # cat /proc/155/oom_adj -12 # 这是CORE_SERVER_ADJ 注:init进程的oom_adj为-16(即SYSTEM_ADJ): cat /proc/1/oom_adj Android相关部分分析: 在文件frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中有以下的代码: final ProcessRecord addAppLocked(ApplicationInfo info) { ProcessRecord app = getProcessRecordLocked(info.processName, info.uid); if (app == null) { app = newProcessRecordLocked(null, info, null); mProcessNames.put(info.processName, info.uid, app); updateLruProcessLocked(app, true, true); } if ((info.flags&(ApplicationInfo.FLAG_SYSTEMApplicationInfo.FLAG_PERSISTENT)) == (ApplicationInfo.FLAG_SYSTEMApplicationInfo.FLAG_PERSISTENT)) { app.persistent = true; app.maxAdj = CORE_SERVER_ADJ; // 这个常数值为-12。 } if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < 0) { mPersistentStartingProcesses.add(app); startProcessLocked(app, "added application", app.processName); } return app; } 可见要想成为core service (即app.maxAdj = CORE_SERVER_ADJ(-12)),应用程序需要FLAG_SYSTEM和FLAG_PERSISTENT两个标志,FLAG_SYSTEM指的是应用位于/system/app下,FLAG_PERSISTENT就是指persistent属性。 而对于frameworks/base/services/java/com/android/server/SystemServer.java,则调用 ActivityManagerService.setSystemProcess(); 把自己的 app.maxAdj 设置成SYSTEM_ADJ,即-16。 原理: Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收。由此带来三个问题: 1) 回收规则: 什么时候回收与回收哪一个? 2) 避免误杀: 如何阻止被回收? 3) 数据恢复与保存: 被回收了怎么办? Android将进程分为6个等级,它们按优先级顺序由高到低依次是: 1.前台进程( FOREGROUND_APP) 2.可视进程(VISIBLE_APP ) 3. 次要服务进程(SECONDARY_SERVER ) 4.后台进程 (HIDDEN_APP) 5.内容供应节点(CONTENT_PROVIDER) 6.空进程(EMPTY_APP) 特征: 1.如果一个进程里面同时包含service和可视的activity,那么这个进程应该归于可视进程,而不是service进程。 2.另外,如果其他进程依赖于它的话,一个进程的等级可以提高。例如,一个A进程里的service被绑定到B进程里的组件上,进程A将总被认为至少和B进程一样重要。 3.系统中的phone服务被划分到前台进程而不是次要服务进程. 在android中,进程的oom_adj值也就代表了它的优先级。oom_adj值越高代表该进程优先级越低。文件/init.rc中有以下属性设置: setprop ro.FOREGROUND_APP_ADJ 0 setprop ro.VISIBLE_APP_ADJ 1 setprop ro.SECONDARY_SERVER_ADJ 2 setprop ro.HIDDEN_APP_MIN_ADJ 7 setprop ro.CONTENT_PROVIDER_ADJ 14 setprop ro.EMPTY_APP_ADJ 15 /init.rc中,将PID为1的进程(init进程)的oom_adj设置为SYSTEM_ADJ(-16): # Set init its forked children's oom_adj. write /proc/1/oom_adj -16 查看本机设置: cat /sys/mole/lowmemorykiller/parameters/adj 0,1,2,7,14,15 回收时机: 文件/init.rc中: setprop ro.FOREGROUND_APP_MEM 1536 // 6M setprop ro.VISIBLE_APP_MEM 2048 // 8M setprop ro.SECONDARY_SERVER_MEM 4096 // 16M setprop ro.HIDDEN_APP_MEM 5120 // 20M setprop ro.CONTENT_PROVIDER_MEM 5632 // 22.4M setprop ro.EMPTY_APP_MEM 6144 // 24M 这些数字也就是对应的内存阈值,一旦低于该值,Android便开始按顺序关闭相应等级的进程。 注意这些数字的单位是page: 1 page = 4 kB。所以上面的六个数字对应的就是(MB): 6,8,16,20,22,24。 查看现在的内存阈值设置: cat /sys/mole/lowmemorykiller/parameters/minfree 要想重新设置该值(对应不同的需求): echo "1536,2048,4096,5120,15360,23040">/sys/mole/lowmemorykiller/parameters/minfree 这样当可用内存低于90MB的时候便开始杀死"空进程",而当可用内存低于60MB的时候才开始杀死"内容供应节点"类进程。 具体的回收实现在ActivityManagerService.java中的函数trimApplications(): 1.首先移除package已被卸载的无用进程; 2.基于进程当前状态,更新oom_adj值,然后进行以下操作: 1) 移除没有activity在运行的进程; 2) 如果AP已经保存了所有的activity状态,结束这个AP。 3. 最后,如果目前还是有很多activities 在运行,那么移除那些activity状态已经保存好的activity。 更新oom_adj的值: 在ActivityManagerService.java文件的ComputeOomAdjLocked() 中计算出进程的oom_adj,例如: if (app == TOP_APP) { // The last app on the list is the foreground app. adj = FOREGROUND_APP_ADJ; app.adjType = "top-activity"; } Android kernel中的low memory killer Android的Low Memory Killer根据需要(当系统内存短缺时)杀死进程释放其内存,源代码在kernel/drivers/misc/lowmemorykiller.c中。简单说,就是寻找一个最合适的进程杀死,从而释放它占用的内存。 最合适的进程是: • oom_adj越大 • 占用物理内存越多 一旦一个进程被选中,内核会发送SIGKILL信号将之杀死: for_each_process(p) { …… if(selected == NULL p->oomkilladj > selected->oomkilladj (p->oomkilladj == selected->oomkilladj && tasksize > selected_tasksize)) { selected = p; } } if(selected != NULL) { force_sig(SIGKILL, selected); } 查看LRU列表:adb shell mpsys activity 当activitydemo在前台时: 包含Service的进程的优先级比较高,在computeOomAdjLocked中将其分为了两小类: static final int MAX_SERVICE_INACTIVITY = 30*60*1000; if (now < (s.lastActivity+MAX_SERVICE_INACTIVITY)) { if (adj > SECONDARY_SERVER_ADJ) { adj = SECONDARY_SERVER_ADJ; app.adjType = "started-services"; app.hidden = false; } } if (adj > SECONDARY_SERVER_ADJ) { app.adjType = "started-bg-services"; } 完全让进程不被kill是不可能的,我们可以通过一些操作,使进程被kill的几率变小: 1) 提高进程的优先级: * 后台操作采用运行于前台的Service形式,因为一个运行着service的进程比一个运行着后台activity的等级高; * 按back键使得进程中的activity在后台运行而不是destory,需重载back按键(没有任何activity在运行的进程优先被杀). * 依赖于其他优先级高的进程; 2) 强制修改进程属性: * 在进程中设置:setPersistent(true); * 在Manifest文件中设置(如上)。
⑸ JAVA里Android开发,如何直接托管OnInputEvent()事件
EventHub管理一堆Device,每一个Device与Kernel中一个事件输入设备对应
2)InputReader管理一堆InputDevice,每一个InputDevice与EventHub中的Device对应
3)InputDevice管理一些与之相关的InputMapper,每一个InputMapper与一个特定的应用事件相对应,如:SingleTouchInputMapper
⑹ 如何自学 Android 编程
1、学Java
目前,Java语言在Android开发中占据绝对统治地位,所以开发Android的第一步就是学好Java,建议至少完整的看一本Java入门书籍,推荐:
Java语言程序设计 (豆瓣):我原来看的入门书籍,我老师推荐的,分为《基础篇》和《进阶篇》。
Java编程思想 (第4版)
(豆瓣):从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),更讲述了java语言的前世今生,语言特性,设计理念等等,阅读本书需要一定的java基础,个人经验,建议至少看完《Java语言程序设计-基础篇》再看这本书。
2、学Android
第一行代码
(豆瓣):郭霖大大编写的Android入门书籍,推荐这本书的原因有两个,一是郭霖大大的语言通俗易懂,二是这本书很新,是基于Android4.0的入门书籍,根据友盟指数的统计,Android4.0以下的设备已不足10%,所以,你现在入门,抛弃那些仍旧停留在Android2.x的入门书籍吧。
AndroidDevTools:从开发工具到入门教程,从代码规范到版本控制工具,一切与android相关的都在这个网站上,Android入门请参考该网站的
Android Dev Tutorials 模块。
Android学习之路:stormzhang大大编写的Android入门文章,对于有一定java基础的人来说,Android入门有这一篇文章就足够了。(该文章同样被收录在AndroidDevTools中)
郭霖的专栏:郭霖大大CSDN专栏。
stormzhang.com 的页面:stormzhang大大的个人博客。
3、遇到问题怎么办
Google:用google搜出来的结果比网络质量高。至于如何不翻·墙就使用google请自行知乎,但是作为一个Android开发者,你早晚要学会翻·墙。
博客园 - 开发者的网上家园
博客频道 - CSDN.NET
Stack Overflow:国外的开发者问答社区,无需翻·墙。
GitHub · Build software better,
together.:国外的代码托管平台,这里有很多Java/Android开源项目,无需翻·墙。
⑺ 能用QT编写手机安卓上的c++程序吗
可以的,Qt 是支持安卓的. 但是因为研究的人太少所以很有难度啊.
⑻ 有没有什么好的android 实例开发的源代码网站
网上下载建站系统,例如:pageadmin cms、discha都是不错的、简单、方便、直接下载就可以使用。
⑼ 为什么Android开发使用Java而不是C++
一、C++是与cpu相关的本地代码,也就是说每种机型都要提供相应的编译器,而且每个应用都要分别编译成适应不同机型的版本 而Java只要开发商提供针对特定硬件平台的JVM,你的应用程序代码只需一次编译就可以运行在所有android机上了。所以对于android这样的系统,必然要以Java为程序语言的,否则结果是无法想象的。
二、Java跨平台,入门简单,而学习和精通C++的成本实在比JAVA要高太多了。java拥有世界上最大的开发群体,有最大的开源社区的技术支持,这样它就可以吸引最大量的开发者团队或者公司,提供更多更强优质的产品,而优质的产品和人气,是吸引最终用户的法宝。 其实这也就体现了,为什么开源软件是软件产业的一次革命了。
三、Google采用Java虚拟机的另一个很关键的原因,就是能使手机开发厂商摆脱Linux的GPL协议的束缚;Google通过Java虚拟机在Linux 内核和应用层之间做了隔离,因此,开源的只是内核和Java虚拟机,而厂商采用Java编写的驱动和应用则不需要开源,这样,既维护了各厂商的利益,又保证了各种android应用在各款手机的跨平台应用。
四、说Java效率低下的朋友一定没有深入理解过JVM的实现。现在的嵌入式CPU大多都集成了Java协处理,支持JVM指令集,能直接运行微码,不再是以前的“解释执行了”,效率上已经非常接近于C。Android的GUI框架是基于Native C底层的一套自有框架,基本上所有视频加速功能都是由C/C++实现,GUI效率一点不打折扣。