-
2016-09-18 18:49:23 w71451000 阅读数 8214
-
-
Android 实战开发 友盟统计SDK集成
友盟 简介 :为什么要学习友盟统计SDK,友盟统计的功能,怎样将友盟SDK集成到自己的项目中;以及在开发中要注意的问题;
首先需要在Androidmanifest中添加权限
<uses-permission android:name = "android.permission.GET_TASKS"/>
然后代码如下:
ActivityManager mAm = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); String activity_name = mAm.getRunningTasks(1).get(0).topActivity.getClassName();
activity_name就是我们获取到的activity的名称
-
-
2016-03-11 15:02:22 zhangphil 阅读数 14292
-
-
Android 实战开发 友盟统计SDK集成
友盟 简介 :为什么要学习友盟统计SDK,友盟统计的功能,怎样将友盟SDK集成到自己的项目中;以及在开发中要注意的问题;
Android PDF开发:android-pdfview
Android平台自身没有直接可以阅读和处理pdf的方案,在github上面有一个第三方开源的pdf开发SDK,其主页地址是:
https://github.com/JoanZapata/android-pdfview
android-pdfview使用比较简单,关键的地方是PDFView,将PDFView作为像Android的ImageView或者TextView一样写进xml布局文件:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.joanzapata.pdfview.PDFView android:id="@+id/pdfView" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
然后在Java上层代码直接加载pdf文件资源装载进去即可:
package zhangphil.pdfview; import com.joanzapata.pdfview.PDFView; import com.joanzapata.pdfview.listener.OnPageChangeListener; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PDFView pdfView = (PDFView) findViewById(R.id.pdfView); // 在我这个测试例子中,事先准备一个叫做sample.pdf的pdf大文件放到assets目录下。 // 从assets文件目录下读取名为 sample.pdf的文件,缺省把该pdf定位到第一页。 pdfView.fromAsset("sample.pdf").defaultPage(1).onPageChange(new OnPageChangeListener() { @Override public void onPageChanged(int page, int pageCount) { // 当用户在翻页时候将回调。 Toast.makeText(getApplicationContext(), page + " / " + pageCount, Toast.LENGTH_SHORT).show(); } }).load(); } }
我把该第三方开源库整理成Eclipse下可用的lib,上传到github上,地址链接:
https://github.com/zhangphil/android-pdfview-lib-for-eclipse
使用时候,下载该lib,导入到eclipse作为lib,然后在项目中直接引用即可。
-
-
2017-09-01 11:42:16 qq_27061049 阅读数 4954
-
-
Android 实战开发 友盟统计SDK集成
友盟 简介 :为什么要学习友盟统计SDK,友盟统计的功能,怎样将友盟SDK集成到自己的项目中;以及在开发中要注意的问题;
android 系统裁剪
有时候编译android 镜像会用到一些不需要的app 和 系统服务,我们尝试将其裁剪出去。
####1、源码目录
build/target/product/*在此下面有不少*.mk 文件,这一找到相应的app 进行规避修改:
diff --git a/target/product/core.mk b/target/product/core.mk index afae7c0..7b1dae7 100644 --- a/target/product/core.mk +++ b/target/product/core.mk @@ -27,17 +27,12 @@ PRODUCT_PACKAGES += \ org.simalliance.openmobileapi.xml \ BasicDreams \ BlockedNumberProvider \ - BookmarkProvider \ - Browser2 \ - Calendar \ CalendarProvider \ CaptivePortalLogin \ CertInstaller \ - Contacts \ DeskClock \ DocumentsUI \ DownloadProviderUi \ - Email \ ExactCalculator \ ExternalStorageProvider \ FusedLocation \ @@ -54,7 +49,6 @@ PRODUCT_PACKAGES += \ PrintSpooler \ PrintRecommendationService \ ProxyHandler \ - QuickSearchBox \ Settings \ SharedStorageBackup \ Telecom \ diff --git a/target/product/full_base.mk b/target/product/full_base.mk index 65bdf0f..da6eb4f 100644 --- a/target/product/full_base.mk +++ b/target/product/full_base.mk @@ -29,10 +29,6 @@ PRODUCT_PACKAGES := \ PRODUCT_PACKAGES += \ Galaxy4 \ - HoloSpiralWallpaper \ - LiveWallpapers \ - LiveWallpapersPicker \ - MagicSmokeWallpapers \ NoiseField \ PhaseBeam \ PhotoTable diff --git a/target/product/generic_no_telephony.mk b/target/product/generic_no_telephony.mk index 5c48358..4f9b27a 100644 --- a/target/product/generic_no_telephony.mk +++ b/target/product/generic_no_telephony.mk @@ -20,10 +20,6 @@ PRODUCT_PACKAGES := \ Bluetooth \ BluetoothMidiService \ - Camera2 \ - Gallery2 \ - Music \ - MusicFX \ OneTimeInitializer \ Provision \ SystemUI \ diff --git a/target/product/sdk_base.mk b/target/product/sdk_base.mk index fa257ae..13997ad 100644 --- a/target/product/sdk_base.mk +++ b/target/product/sdk_base.mk @@ -18,23 +18,16 @@ PRODUCT_PROPERTY_OVERRIDES := PRODUCT_PACKAGES := \ ApiDemos \ - CubeLiveWallpapers \ CustomLocale \ Development \ - Dialer \ EmulatorSmokeTests \ Fallback \ - Gallery \ GestureBuilder \ Launcher3 \ - LegacyCamera \ librs_jni \ libwnndict \ libWnnEngDic \ libWnnJpnDic \ - LiveWallpapersPicker \ - Mms \ - Music \ OpenWnn \ Protips \ rild \ diff --git a/target/product/telephony.mk b/target/product/telephony.mk index e840ba1..5c05fa1 100644 --- a/target/product/telephony.mk +++ b/target/product/telephony.mk @@ -19,7 +19,6 @@ PRODUCT_PACKAGES := \ CarrierConfig \ - Dialer \ CallLogBackup \ CellBroadcastReceiver \ EmergencyInfo \
对于一些服务 可以修改 frameworks/base/services/java/com/android/server/SystemServer.java
将里面的相关的 systemserver.java 去掉。
例如:
mContentResolver = context.getContentResolver(); // Slog.i(TAG, "Camera Service"); // mSystemServiceManager.startService(CameraService.class); traceBeginAndSlog("StartAccountManagerService");
-
-
2016-06-14 22:03:05 u014529755 阅读数 5475
-
-
Android 实战开发 友盟统计SDK集成
友盟 简介 :为什么要学习友盟统计SDK,友盟统计的功能,怎样将友盟SDK集成到自己的项目中;以及在开发中要注意的问题;
系统启动进程
android设备的启动分为三个阶段:Boot Loader, Linux Kernel,Android 系统服务。Android系统实际上是运行在Linux Kernel之上的一系列系统服务进程。init进程是Android中被启动的第一个进程,PID = 0 。它通过解析init.rc脚本来构建出android运行初始化形态(android系统服务程序大多是在这个脚本中被启动)
系统启动流程图可以从这个图里面看出,这个网上找的一张,这里是出处
init.rc初始化脚本
脚本包括actions、commands、services、options四种类型声明。
actions实际上是响应某个触发(也叫事件),当触发(事件)发生时运行action,格式如下:on <trigger>##触发条件 <command>##要执行的命令 <command>##要执行的命令 ...
常见触发有下面几种:
- boot 。这是init程序启动后触发的第一个事件
- device-added-< path>。当设备节点添加或者删除时触发事件
- device-removed-< path>。
- service-exited-< name>。当指定的name服务存在时触发事件
- …
services是可执行程序,形式如下
service <name><pathname>[<argument>]* <option> <option> ...
pathname表示service程序所在路径,里面有程序源码。因为是可执行程序,所有必须有路径。
commands和options比较多,不一一介绍。由于还没有编译源码,所有在source中找不到代码路径:\system\core\init\init.c,此处盗用网上一般的init.c分析,下次找到了再自己具体分析。
int main(int argc, char **argv) { // 1、设置子进程退出的信号处理函数:sigchld_handler ... // 2、创建文件夹,并挂载设备 mkdir("/dev", 0755); mkdir("/proc", 0755); .... // 3、重定向标准输入输出错误到 /dev/__null__ ... // 4、解析 init.rc 脚本 parse_config_file("/init.rc"); // 5、解析机器相关的配置文件,一般相关的放在init.rc中利用service action调过去 snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware); parse_config_file(tmp); // 6、建立 uevent,用于与linux kernel交互的socket ... // 7、初始化及加载属性相关资源 ... // 8、执行 on init 、early-boot 及 boot 片段动作,这些定义于 init.rc 中 /* execute all the boot actions to get us started */ action_for_each_trigger("init", action_add_queue_tail); drain_action_queue(); /* execute all the boot actions to get us started */ action_for_each_trigger("early-boot", action_add_queue_tail); action_for_each_trigger("boot", action_add_queue_tail); 9.init进程的处理循环 for(;;) { // I、执行init.rc 脚本中的动作 drain_action_queue(); // II、执行标志为SVC_RESTARTING的进程,利用fork+execve启动新的进程 restart_processes(); ... } return 0; }
系统关键服务的启动简介
在上述init程序启动中,通过解析init.rc,实际上也就陆续启动了其他关键服务,这些服务中最重要的就是ServiceManager,Zygote,SystemServer三个系统服务进程。例如在启动boot触发事件中就有启动Zygote服务。
ServiceManger–DNS服务器
ServiceManager简称SM,是Android Binder机制中的”DNS服务器”,负责域名(某个Binder服务在SM中注册时提供的名字)到IP地址(由底层Binder驱动分配的值)的解析。SM在init.rc中的描述如下所示
service serviceManager /system/bin/servicemanager class core #同一个class名(此处为core)的所有服务进程同时启动/停止 user system group system critical onrestart restart zygote onrestart restart media onrestart restart surfaceflinger onrestart restart drm
/system/bin/servicemanager路径表示该服务真正的执行程序在该路径下。当SM每次重启时,其他关键进程如zygote , media, surfaceflinger, drm也会重启。
Zygote–受精卵孕育新线程/进程
Android中大多数应用进程和系统进程都是通过Zygote来生成的。zygote进程在内部会先启动虚拟机,继而加载一些必要的系统资源和系统类,最后进入一种监听状态。在后续的运作中,当其他系统模块(比如AMS)希望创建新进程时,只需向zygote进程发出请求,zygote进程监听到该请求后,会相应地“分裂”出新的进程,于是这个新进程在初生之时,就先天具有了自己的Dalvik虚拟机以及系统资源。出自这里。Zygote在init.rc中的描述如下所示
service zygote /system/bin/app_process /system/bin --zygote --start-system-server class main socket zygote stream 660 root system onrestart write /sys/android_power/request_state wake onrestart write /sys/power/state on onrestart restart media onreatart restart netd
在app_process程序中,最核心的代码是下面这句
... runtime.start("com.android.internal.os.zygoteInit",startSystemServer?"start-system -server":""); ...
runtime 运行时环境变量启动了虚拟机,让ZygoteInit在虚拟机上运行。Zygote.java文件提供几个static方法在ZygoteInit.java等类中被使用。例如ZygoteInit中的startSystemServer方法调用了 Zygote.forkSystemServer()方法。(实际上startSystemServer方法也是ZygoteInit主要作用之一)。
ZygoteInit的作用:- 启动SystemServer。该服务也是由Zygote fork而来。
- 利用preload,预装载各种系统类,main()方法如下所示
static void main() { Log.d(TAG, "begin preload"); registerZygoteSocket(); preloadClasses(); preloadResources(); startSystemServer(); runSelectLoop(); closeServerSocket(); }
SystemServer–Android的系统服务
SystemServer是Android进入Launcher之前的最后准备,它提供了众多的java语言系统服务。由ZygoteInit中的startSystemServer经过层层调用(包括native code),最后到达SystemServer中的run()方法。在run()方法中:
... // Create the system service manager. mSystemServiceManager = new SystemServiceManager(mSystemContext); //应该是添加的第一个LocalService,SSM本身也是服务 LocalServices.addService(SystemServiceManager.class, mSystemServiceManager); try{ startBootstrapServices(); startCoreServices(); startOtherServices(); }
在startBootstarpServices()中启动并注册了下面几种服务:
- ActivityManagerService
- PowerManagerService
- DisplayManagerService
- LightsService
- PackageManagerService
- UserManagerService
- SensorService(native)
在startCoreServices()中启动并注册了下面几种服务:
- BatteryService
- UsageStatsService
- WebViewUpdateService
在startOtherServices()中启动并注册了下面几种服务:
- WindowManagerService
- NetworkStatsService
- InputManagerService
- AudioService
- CameraService
- …
将java层的开机流程大致的画在一张图上,如下:
对于zygote,作为一个最原始的“受精卵”,它必须在合适的时机进行必要的细胞分裂。分裂动作也没什么大的花样,不过就是fork()新进程而已。如果fork()出的新进程是system server,那么其最终执行的就是SystemServer类的main()函数,而如果fork()出的新进程是普通的用户进程的话,那么其最终执行的就是ActivityThread类的main()函数。有关ActivityThread的细节,我们有时间再深入探讨,这里就不细说了。上述一段话引用自这里
至此,android启动差不多完成了,原来开机时系统竟然做了这么多事情,66666。下章分析ActivityManagerService,AMS是导致Launcher被启动的关键所在。
-
-
2014-12-26 07:57:08 jlminghui 阅读数 4280
-
-
Android 实战开发 友盟统计SDK集成
友盟 简介 :为什么要学习友盟统计SDK,友盟统计的功能,怎样将友盟SDK集成到自己的项目中;以及在开发中要注意的问题;
补充:2017.05.04经测试该工具最新2.50版本不如360手机助手2.5.1.1710版本的演示功能流畅。
1.官方地址
http://code.google.com/p/android-screen-monitor/
2.解压缩得到asm.jar
3.命令行进入asm.jar文件夹;
4.输入如下命令
java -jar asm.jar
5.弹出选择设备的界面
6.点击ok,显示手机设备界面
6.选择手机分辨率都比较高,所以界面可能会超出pc显示屏,点击窗口中界面,鼠标右键可以更改缩放比例和一些其他参数
-

友盟微信登录android 相关内容

友盟微信登录android 相关内容

友盟微信登录android 相关内容

友盟微信登录android 相关内容

友盟微信登录android 相关内容
-
Android Studio及Android SDK的下载安装与配置
阅读数 14127
-
阅读数 4506
-
Android 最全面的Android Studio配置大全
阅读数 5478