当前位置:首页 » 安卓系统 » android定制开发

android定制开发

发布时间: 2023-01-26 02:54:14

1. 如何在Android上开发属于自己的定制化启动器

从最基本的概念角度来讲,启动器其实应该是一款能够实现以下功能的应用程序:

它代表着一台设备的主屏幕。
它能够列出并启动已经安装在该设备当中的应用程序。

换句话来说,它就是那款用户按下home按钮后所显示的应用程序。除非大家已经安装了定制化启动器,否则我们目前正在使用的应该都是Android系统自带的默认启动方案。不少设备制造商都会在产品中默认使用由其定制的启动器,从而确保我们获得与厂商预期相符的外观效果与使用感受,例如三星TouchWiz以及HTC
Sense。

在今天的教程中,我们将利用基本用户界面创建出一款简单的启动器,它将由两部分屏幕构成:

在主屏幕中显示的是该设备的墙纸图案。
另一屏幕中显示的是已经安装在设备当中的应用程序图标及其它细节信息。

1.要求

大家需要在自己的开发设备上预先安装并配置好以下项目:

Android SDK以及平台工具
Eclipse IDE 3.7.2或者更高版本,同时具备ADT插件
运行有Android 2.2或者更高版本的模拟器或者Android设备

大家可以点击此处通过Android开发者门户下载对应SDK及平台工具。

2.项目设置

首先我们需要启动Eclipse并创建一个新的Android应用程序项目。我为这个应用取了个非常直白的名称——SimpleLauncher,当然大家也可以自由选择自己想要的名称。请确保软件包名称没有与其它项目出现重复。我们的启动器所能支持的最低SDK版本为“冻酸奶”,而主要的面向版本则为“果冻豆”。

由于我们不打算创建Activity,因此取消“Create Activity”勾选项,然后点击“Finish”以继续。

3.项目清单

接下来我们需要通过添加两个activity对AndroidManifest.xml文件进行修改。第一个Activity用于显示主屏幕,我们如下所示将其命名为HomeActivity。
<activity android:name="ah.hathi.simplelauncher.HomeActivity" android:label="Simple Launcher Home" android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen" android:launchMode="singleTask" android:stateNotNeeded="true" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>

通过将android.intent.category.HOME与android.intent.category.DEFAULT两个类添加至intent-filter组当中,相关Activity得以拥有与启动器概念相符的运行方式。当大家按下设备上的home按钮时,其还将作为选项方案显示出来。

我们还需要将launchMode设置到singleTask当中,从而确保无论何时都只有单一Activity实例由系统负责运行。要显示用户的墙纸图案,大家必须将主题设置为Theme.Wallpaper.NoTitleBar.FullScreen。

我们需要添加的第二个Activity负责显示已经安装在用户设备中的应用程序条目。它还有另一项任务,即启动这些应用程序。我们不需要对该Activity进行任何特殊配置,将其命名为AppsListActivity即可。
<activity android:name="ah.hathi.simplelauncher.AppsListActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > </activity>

4.Activity布局

下面在项目的res/layout文件夹中为HomeActivity类创建一个XML文件,并将其命名为activity_home.xml。该布局拥有一个单独的Button用以响应点触事件。点触该按钮能够让用户由主屏幕切换至应用程序列表。
<RelativeLayout 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" tools:context=".HomeActivity" > <Button android:id="@+id/apps_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:text="Show Apps" android:onClick="showApps" /> </RelativeLayout>

接下来,在项目的res/layout文件夹中为AppsListActivity类创建一个XML文件并将其命名为activity_apps_list.xml。该布局当中包含一个占据整个屏幕的ListView。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/apps_list" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout>

最后,在同样的位置创建第三个XML文件并将其命名为list_item.xml。该文件用于定义ListView当中各个条目的布局方案。列表视图中的每个条目都代表着已经安装在用户设备上的一款应用程序。它能够显示该应用程序的图标、标签以及软件包名称。我们可以利用ImageView实例来显示该应用的图标,并通过TextView实例显示标签与软件包名称。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" > <ImageView android:id="@+id/item_app_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" /> <TextView android:id="@+id/item_app_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/item_app_icon" android:paddingLeft="10dp" /> <TextView android:id="@+id/item_app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/item_app_label" android:layout_toRightOf="@+id/item_app_icon" android:paddingLeft="10dp" /> </RelativeLayout>

5.创建Acitivity类

HomeActivity

应用程序的布局方案创建完成之后,现在要做的是创建两个Activity类。当创建这两个类时,请确保每个类的名称都与我们之前在项目清单文件中所指定的内容相匹配。

创建一个名为HomeActivity的新类,然后将android.app.Activity设置为其超类。
package ah.hathi.simplelauncher; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class HomeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); } public void showApps(View v){ Intent i = new Intent(this, AppsListActivity.class); startActivity(i); } }

在该类的onCreate方法中,我们调用setContentView并将其传递至之前已经创建完成的布局当中。大家可能还记得,我们曾为activity_home布局添加过一个按钮,用于触发名为showApps的方法。现在我们要做的是将该方法引入HomeActivity类当中。整个添加过程非常简单,各位需要做的只是为AppsListActivity类创建一个Intent并付诸运行。

2. Android app开发定制会遇到哪些外在的瓶颈

从瓶颈的先后顺序列出:

1、技术问题,毫无疑问,各种api总有你不是很了解的,就算你用过下次也有可能有新功能需要有新的方法等

2、架构设计,架构对于小的应用而言通常很少考虑,但当代码量上w的时候就有必要梳理下了,甚至至少是线设计架构开发程序(一般也是这样来)。
一个应用正常的开发步骤是,需求分析->分析设计->开发->测试。第一个问题会出现在开发阶段,第二个问题会出现在分析设计阶段,也就是架构设计

3. 如何在Android上开发属于自己的定制化启动器

AppsListActivity

创建另一个名为AppsListActivity的Activity类,而后将android.app.Activity设置为其超类。在该类的onCreate方法当中,我们调用setContentView并将其传递至此前已经创建完成的activity_apps_list布局当中。

package ah.hathi.simplelauncher; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class AppsListActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_apps_list); } } 虽然我们的启动器方案还没有最终完成,但到这里大家已经可以保存现有内容并借此启动自己设备上的应用程序了。当各位按下设备上的home按钮时,系统会能够弹窗询问我们希望使用哪种启动器方案。

如果大家选择了Simple Launcher Home,则可以看到自己创建的全新主屏幕,其右上屏幕位置还配备一个按钮。大家还能看到自己设备上原本设定的墙纸图案。

现在回到Eclipse并创建一个名为AppDetail的类,其中将包含与应用程序相关的细节信息、软件包名称、标签以及应用程序图标。该界面非常基础,大家可以利用如下代码实现:

package ah.hathi.simplelauncher; import android.graphics.drawable.Drawable; public class AppDetail { CharSequence label; CharSequence name; Drawable icon; } 6.获取应用程序

在AppsListActivity类的loadApps方法当中,我们可以使用PackageManager类的queryIntentActivities方法以获取Intent.CATEGORY_LAUNCHER类别当中的所有Intents。该查询能够返回一份列表,其中包含全部能够经由启动器实现启动的应用程序。我们可以将查询返回结果中的每个条目添加到名为apps的列表当中。大家可以通过以下代码片段进一步了解其效果。

private PackageManager manager; private List<AppDetail> apps; private void loadApps(){ manager = getPackageManager(); apps = new ArrayList<AppDetail>(); Intent i = new Intent(Intent.ACTION_MAIN, null); i.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> availableActivities = manager.queryIntentActivities(i, 0); for(ResolveInfo ri:availableActivities){ AppDetail app = new AppDetail(); app.label = ri.loadLabel(manager); app.name = ri.activityInfo.packageName; app.icon = ri.activityInfo.loadIcon(manager); apps.add(app); } } 7.显示应用程序列表

由于apps变量当中包含有我们所需要的全部细节信息,因此大家可以利用ListView类显示出完整的应用程序列表。我们首先创建一个简单的ArrayAdapter并覆盖其getView方法以获取列表中的条目信息。接下来,将该ListView与适配器相关联。

private ListView list; private void loadListView(){ list = (ListView)findViewById(R.id.apps_list); ArrayAdapter<AppDetail> adapter = new ArrayAdapter<AppDetail>(this, R.layout.list_item, apps) { @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null){ convertView = getLayoutInflater().inflate(R.layout.list_item, null); } ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon); appIcon.setImageDrawable(apps.get(position).icon); TextView appLabel = (TextView)convertView.findViewById(R.id.item_app_label); appLabel.setText(apps.get(position).label); TextView appName = (TextView)convertView.findViewById(R.id.item_app_name); appName.setText(apps.get(position).name); return convertView; } }; list.setAdapter(adapter); } 8.侦听点触操作

当用户点触ListView当中的某个条目时,我们的启动器应该能够运行相应的应用程序。我们可以通过PackageManager类中的getLaunchIntentForPackage方法来创建一个Intent,用于指定我们要启动哪款应用程序。请大家查看以下代码片段。

private void addClickListener(){ list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> av, View v, int pos, long id) { Intent i = manager.getLaunchIntentForPackage(apps.get(pos).name.toString()); AppsListActivity.this.startActivity(i); } }); } 9.通过整合实现完整功能

为了让前面提到的全部内容整合起来并实现完整功能,我们需要在AppsListActivity类的onCreate方法中调用loadApps、loadListView与addClickListener,具体代码如下所示。

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_apps_list); loadApps(); loadListView(); addClickListener(); } 下面编译并运行我们的启动器应用,并再一次运行以查看结果。大家现在应该已经能够在启动器主屏幕中点击该按钮后查看所有可以启用的应用程序了。别犹豫,快点触其中一个尝试一下吧。

4. 如何在Android上开发属于自己的定制化启动器

首先我们需要启动Eclipse并创建一个新的Android应用程序项目。我为这个应用取了个非常直白的名称——SimpleLauncher,
当然大家也可以自由选择自己想要的名称。请确保软件包名称没有与其它项目出现重复。我们的启动器所能支持的最低SDK版本为“冻酸奶”,而主要的面向版本
则为“果冻豆”。

由于我们不打算创建Activity,因此取消“Create Activity”勾选项,然后点击“Finish”以继续。

3.项目清单

接下来我们需要通过添加两个activity对AndroidManifest.xml文件进行修改。第一个Activity用于显示主屏幕,我们如下所示将其命名为HomeActivity。
<activity android:name="ah.hathi.simplelauncher.HomeActivity" android:label="Simple Launcher Home" android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen" android:launchMode="singleTask" android:stateNotNeeded="true" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>

通过将android.intent.category.HOME与android.intent.category.DEFAULT两个类添加至
intent-filter组当中,相关Activity得以拥有与启动器概念相符的运行方式。当大家按下设备上的home按钮时,其还将作为选项方案显
示出来。

我们还需要将launchMode设置到singleTask当中,从而确保无论何时都只有单一Activity实例由系统负责运行。要显示用户的墙纸图案,大家必须将主题设置为Theme.Wallpaper.NoTitleBar.FullScreen。

我们需要添加的第二个Activity负责显示已经安装在用户设备中的应用程序条目。它还有另一项任务,即启动这些应用程序。我们不需要对该Activity进行任何特殊配置,将其命名为AppsListActivity即可。
<activity android:name="ah.hathi.simplelauncher.AppsListActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > </activity>

4.Activity布局

下面在项目的res/layout文件夹中为HomeActivity类创建一个XML文件,并将其命名为activity_home.xml。该布局拥有一个单独的Button用以响应点触事件。点触该按钮能够让用户由主屏幕切换至应用程序列表。
<RelativeLayout 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" tools:context=".HomeActivity" > <Button android:id="@+id/apps_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:text="Show Apps" android:onClick="showApps" /> </RelativeLayout>

接下来,在项目的res/layout文件夹中为AppsListActivity类创建一个XML文件并将其命名为activity_apps_list.xml。该布局当中包含一个占据整个屏幕的ListView。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/apps_list" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout>

最后,在同样的位置创建第三个XML文件并将其命名为list_item.xml。该文件用于定义ListView当中各个条目的布局方案。列表视
图中的每个条目都代表着已经安装在用户设备上的一款应用程序。它能够显示该应用程序的图标、标签以及软件包名称。我们可以利用ImageView实例来显
示该应用的图标,并通过TextView实例显示标签与软件包名称。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" > <ImageView android:id="@+id/item_app_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" /> <TextView android:id="@+id/item_app_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/item_app_icon" android:paddingLeft="10dp" /> <TextView android:id="@+id/item_app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/item_app_label" android:layout_toRightOf="@+id/item_app_icon" android:paddingLeft="10dp" /> </RelativeLayout>

5.创建Acitivity类

HomeActivity

应用程序的布局方案创建完成之后,现在要做的是创建两个Activity类。当创建这两个类时,请确保每个类的名称都与我们之前在项目清单文件中所指定的内容相匹配。

创建一个名为HomeActivity的新类,然后将android.app.Activity设置为其超类。
package ah.hathi.simplelauncher; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class HomeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); } public void showApps(View v){ Intent i = new Intent(this, AppsListActivity.class); startActivity(i); } }

在该类的onCreate方法中,我们调用setContentView并将其传递至之前已经创建完成的布局当中。大家可能还记得,我们曾为
activity_home布局添加过一个按钮,用于触发名为showApps的方法。现在我们要做的是将该方法引入HomeActivity类当中。整
个添加过程非常简单,各位需要做的只是为AppsListActivity类创建一个Intent并付诸运行。

5. 什么是Android系统深度优化、定制、开发的第三方手机操作系统

定制操作系统是相对于原生操作系统来说的,某些开源的操作系统,例如Linux和Android允许终端厂商免费使用,终端厂商可以在其基础上做一些修改,以达到自身的一些目的。

根据对操作系统修改的程度,可以分为一般的定制和深度定制。定制一套自己的UI界面这样的属于一般的定制,对原生系统的改动很小,同时也很容易兼容原生应用。有些厂商却对系统的更深层做了修改。

手机操作系统可以分为内核层、中间层和应用层。基于Linux操作系统进行定制的系统,底层就是Linux系统的内核,中间层包含了名为Dalvik的JAVA虚拟机,应用层则是根据原生系统修改后加入的各种应用。每个应用程序都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例。

所谓深度定制,一般是指对中间层做修改,就是修改Dalvik虚拟机的一些设置。例如OMS操作系统集成了大量的增强型中间件,以更好地支持各种应用,并不是简单复制安卓系统

那么为什么厂商喜欢定制操作系统?因为操作系统本身最大的特点并不是定制,是通用性。而国内厂商无力研发全新的操作系统,或者尝试研发但是都不够成功,那么退而求其次,选择定制的操作系统来兼容市场上已有的大量应用,同时通过适度修改来满足自身的应用集成需求,这种选择是合理的,一定程度上讲也是必然的。

6. 如何在Android上开发属于自己的定制化启动器

首先需要启动Eclipse并创建一个新的Android应用程序项目。为这个应用取个非常直白的名称——SimpleLauncher,当然大家也可以自由选择自己想要的名称。请确保软件包名称没有与其它项目出现重复。启动器所能支持的最低SDK版本为“冻酸奶”,而主要的面向版本则为“果冻豆”。
由于不打算创建Activity,因此取消“Create Activity”勾选项,然后点击“Finish”以继续。
3.项目清单
接下来需要通过添加两个activity对AndroidManifest.xml文件进行修改。第一个Activity用于显示主屏幕,如下所示将其命名为HomeActivity。
<activity android:name="ah.hathi.simplelauncher.HomeActivity" android:label="Simple Launcher Home" android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen" android:launchMode="singleTask" android:stateNotNeeded="true" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>

通过将android.intent.category.HOME与android.intent.category.DEFAULT两个类添加至intent-filter组当中,相关Activity得以拥有与启动器概念相符的运行方式。当大家按下设备上的home按钮时,其还将作为选项方案显示出来。
还需要将launchMode设置到singleTask当中,从而确保无论何时都只有单一Activity实例由系统负责运行。要显示用户的墙纸图案,大家必须将主题设置为Theme.Wallpaper.NoTitleBar.FullScreen。
需要添加的第二个Activity负责显示已经安装在用户设备中的应用程序条目。它还有另一项任务,即启动这些应用程序。不需要对该Activity进行任何特殊配置,将其命名为AppsListActivity即可。
<activity android:name="ah.hathi.simplelauncher.AppsListActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > </activity>

7. android系统定制开发该怎么上手

就索性进行了一番调研,于是有了本文(本次不讨论越狱的iOS) 首先从情感上,你喜欢哪个就好,就像百事可乐和可口可乐,当然这个比喻不是很恰当,因为可乐喝起来几乎一样,但是Android和iOS还是有很大差别的。 iOS来源于Apple的OSX,是UNIX系统,OSX已经有差不多10年的历史,从内核底层到软件架构都是逐步发展过来的。iOS使用ObjectivC这个古老的语言来做开发。而Android是Google基于Linux搞来的,严格意义上讲Android并不是一个Linux系统,它没有Linux的xwin,没有glibc,缺乏一整套标准的Linux程序。Android应用绝大部分都是使用JAVA开发,跑在Dalvik虚拟机上(一小部分使用NDK)。 Google在底层也修改了很多东西。Android算是一个全新的操作系统。 所以: Android使用JAVA,上手容易很多,如果有很好的JAVA Lib加持,开发效率会高些 iOS没有虚拟机, 也没有GC,性能要好一些,当然这个差别会随着Google的改进越来越小 iOS的开发框架很成熟,而且和MAC上通用,同样的知识体系,也可以开发MAC应用,Android相比是全新的框架, 还会继续进化。 iOS和设备紧密集成。软硬件一家公司通吃。但是Android无法做到, 通常的情况是:Google放出源代码。 芯片厂商需要1-3个月来做自己的芯片方案, 手机厂商从芯片厂商处买到方案和代码, 进行自己的集成,定制工作,有时候还需要针对运营商进行定制。 所以: iOS的设备集成度和驱动优化都是最好的。电源管理一块就可见一斑,而Android厂商就鱼龙混杂。可能排头的厂商的旗舰机器会好些,但是由于Android工期一般都比iOS设备短(请看HTC和三星出机器的速度),所以整体上和iOS比是有差距的。 由于有多家厂商自己做定制,Android还存在设备的分裂问题(fragmentation), 作为过来人,我告诉你这个是很头痛的事情, 且不论调试时间和人力, 光买一大堆设备的成本就不小。最关键的是它会伤美工/UE的心。 iOS是被Apple严格控制的系统。 在大部分情况下, 第三方应用是无法拿到所有API的。 这意味系统级别的很多功能只有Apple能做(比如打电话,拦截短信)。此外一些涉及用户隐私的API还会导致系统弹出对话框询问用户。 同样第三方runtime做应用开发也是基本不可行的(Flash当初也是被这个条款拒过)。 反过来Android完全不一样,首先Android是开源的,在设计上Android就允许自由替换系统组件, Android也没有强制限制API的情况,(hidden API也可以call,没有人会找你麻烦)。 系统级别的权限是下放到厂商手中,如果厂商愿意给,那第三方开发者就可以做任何事情。 普通应用的权限认证也是在安装的时候就一次性授权完成。 之后不会骚扰用户。所以: Android平台可以做的事情远远比iOS多, 你可以做电话管理,地址簿,短信管理,可以自己跑后台service。 替换掉系统的组件非常容易 Android平台也可以跑其他系统的Runtime, 比如Flash, 有了NDK, 你要自己接入一个虚拟机也是可能的。Google不会管你 任何人可以拿Android自己改个独立的系统出来,也许这样做的意义和前景有问题,但是同样,没有人限制你 iOS上唯一的下载应用途径就是Appstore,开发者做应用上线还要通过Apple审核,就算通过了,如果挂羊头卖狗肉乱来或者调用了不该用的API, Apple一样随时可以下架。管理非常严格。反过来Android上非常松懈: 厂商可以内置应用。经常会扔一些莫名其妙的软件预装在手机上, 笔者在厂商的时候深刻体会到乱选软件是很好玩的事情。而且我们不会让你删除掉的。 Google的官方菜市场不做应用审核,开发者上传软件很随意,这是个自由市场。 国内还存在大量第三方软件菜市场。以及豌豆夹类似的PC端管理软件。 如果用户选择允许未知来源,那么通过web下载或者安装卡上的软件也是可以的。似乎国内用户都是允许的。所以: iOS上的精品软件多,竞争激烈但管理有序,开发者也容易挣钱。 Android上虽然也有精品软件,但是垃圾软件更多, 甚至有恶意软件。 因为无门槛,基本上软件都是免费,卖不起钱, 大部分都靠广告。 Android还有一堆杀毒软件,这是典型的没有困难,制造困难也要上的精神。 Android上还有一堆安慰剂软件,比如能帮你省电的或者是帮你杀后台进程的来提升性能的, 笔者作为做过底层开发的人,笑而不语。 如果你是普通用户,请关贴, 本文不是用来给普通用户选机的。 如果你是一个个人软件开发者, iOS适合你, 市场规范, 做应用省心。 如果你是一个软件和服务的创业公司, iOS也是适合你做demo的和第一个产品的, 产品靠谱了,用户在用了,有人给钱了,再往Android走也是可行的。 除非你做的应用要涉及硬件或者需要非常高的系统权限, 如果是那样你也只有选择Android。因为国内的厂商肯定要比苹果要容易谈下来。 如果你是一个要做硬件和系统定制的公司, 那么基本上你只有Android可以选。Android的解决方案的成本也在不断下降。 如果你是一个有中国特色的公司,想搞点移动业务玩玩, 还要瞒着用户做很多事情。 那么Android也是更好的, 就算你不作恶, 控制权在自己手中也会方便运作一点。所经如何选择,不用我多讲,这两个都是当今移动互联网开发的方向,但是一个开源学习起来更容易,做东西更快,有绝对的控制权。一个不开源,只能做上层应用,但也可活的很好,就是这样。

8. 开发一个android的app需要多少钱

开发一个android的app需要多少钱

如今,不少企业都想拥有属于自己企业或产品的手机APP,但其中最困扰企业主的问题就是:开发一款手机APP到底需要多少钱?

简单点来说,要视手机APP的需求及质量而言,价位一般在几千到十几万左右,更高端的价格更高。


固定款的APP开发时间短,约2~3日的时间即可完成,费用大约在几千到几万之间。

定制款:定制款是指APP的功能全部重新开发,过程比较繁琐,需要美工、策划、APP开发(前台/客户端/手机端)、后台程序员等工种协同完成,大型的、功能复杂的APP甚至需要数十人的团队。

由于APP的功能和设计都是定制的,因此价格会高些。定制款的开发时间与开发价格是成正比的,开发时间长,大约在两三个月甚至不定的周期里才能完成,而费用大概在几万甚至十几万左右。

因此,想要知道开发一款手机APP需要花费多少钱,企业主首先必须把APP的详细需求和功能告知APP开发公司,开发公司才能报出一个合理的价格。

二、手机APP平台不同,制作成本也不一样

现在市面上流行的手机APP制作平台主要有两种一般包括两种系统:安卓系统(Android)和苹果系统(IOS)。

一般来说,制作苹果系统的手机APP软件费用要比安卓平台的贵一些,因为苹果公司对苹果平台的封闭性和手机APP开发语言Objective-C的难度,都让APP开发者加大了苹果系统手机APP开发的难度。

三、APP制作成本包含参与人员的工资

通常情况下,开发一款APP需要产品经理、客户端工程师、后端工程师和UI设计师各一名,这已经是制作手机APP应用软件比较精简的配置了,所以这些参与人员的工资也是包含在APP制作成本当中的。这些工作人员的月薪加起来可能都会超过4、5万元。

四、APP开发公司的所在地

需要注意的是,同样实力的APP开发公司,在不同的城市也会导致APP的成本费用高一些,如在北京、深圳和上海等地的开发公司开发成本费用就会比较高,因为当地开发人员的薪资和其他支出相对更高。

9. Android开发:怎样定制界面风格

在values目录下创建styles.xml,然后把风格的名字定义为Widget.TestView。设置背景颜色为白色。
view plain to clipboardprint?
<resources>
<style name=”Widget.TestView” parent=”android:Widget”>
<item name=”android:background”>#FFFFFFFF</item>
</style>
</resources><span style=”font-style: italic; font-size: 10.5pt; font-family: ‘Times New Roman’;”><br></span>

10. 如何在Android上开发属于自己的定制化启动器

作为EMM厂商,在管理安卓设备时首先应该能够紧跟最新技术1、支持标准最新原生安卓系统2、对不同的设备制造商或者系统制造商可以分别签订战略或框架协议,获得设备签名,以这种方式扩展3、自己开发一套标准管理接口,说服各个设备制造商或者系统制造商,在设备或系统中预埋自己的接口,形成自己的生态系统上面方法2一般适合从项目出发,因为设备签名很少会覆盖特别广的产品线(人家也不会给)方法2比较适合建立生态系统,你和合作伙伴基本都是一次开发(后续增加或优化),就能达到普及的结果,但是需要在产品层合作,目前有一些EMM厂商已经在做这种生态级的部署了。总的来说,因为涉及到设备管控,而且是企业级的。你得看那些安卓厂商有没有兴趣。这些事都是先花钱后见效果的,急不来,需要时间和钱。希望对你有帮助

热点内容
济南平安e通如何找回密码 发布:2025-05-19 14:56:58 浏览:175
安卓手机如何找到iccid码 发布:2025-05-19 14:46:51 浏览:226
编译的内核为什么那么大 发布:2025-05-19 14:45:21 浏览:178
什么控制压缩 发布:2025-05-19 14:28:13 浏览:930
网络服务器忙指什么 发布:2025-05-19 14:28:10 浏览:188
服务器有外网ip 发布:2025-05-19 14:02:02 浏览:833
电脑上c语言编程软件 发布:2025-05-19 13:55:17 浏览:125
php56windows 发布:2025-05-19 13:54:23 浏览:717
如何查看攻击过服务器的ip地址 发布:2025-05-19 13:45:44 浏览:942
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336