Quantcast
Channel: 英特尔开发人员专区文章
Viewing all 172 articles
Browse latest View live

样本代码:一次性密码(OTP)演示

$
0
0

下载 PDF 文档

下载源代码

Peng Wang,软件应用工程师

应用来源:
英特尔软件和解决方案事业部 (SSG)

引言

双重身份验证通常采用一次性密码 (OTP),将用户了解的某些信息(用户名和密码)和用户拥有的某些设备(通常是能按需生成仅短期有效的六位数令牌或密钥卡)相结合。

如果您的企业已在使用双重身份验证,那么您对令牌可用性和逻辑的相关问题就不会感到陌生。 更换丢失或损坏的令牌和用户错误输入一次性密码是目前服务台和 IT 部门遇到的两大头疼问题。 采用 OTP 的英特尔® 身份保护技术(英特尔® IPT)是一种内置硬件令牌(您可以任意选择安全厂商),无需单独的物理令牌,从而简化了双重 VPN 登录流程,实现了几乎无延迟的无缝体验。

本文高度概括了一次性密码 (OTP) 功能并展示了如何在 Android* 中使用 OTP API。

代码及介绍

OTP 具有三大功能: OTP 配置、OTP 生成和 OTP 验证。  系统还配置了 API,用于查询 OTP 功能和 OTP 版本。

OTP 配置

InvokeIPTProv 扩展了 AsyncTask,从而在后台执行配置。 它首先构建了安全服务(配置服务),然后开始进行配置。

@Override
protected Void doInBackground(Void... params) {
	ChaabiProvision prov = new ChaabiProvision();
	try {
		prov.execute().get(PROV_MAX_TIMEOUT, TimeUnit.MILLISECONDS);
	} catch (InterruptedException e) {
		error = "Provisioning failed: " + e.getClass().getName() + ": "
				+ e.getLocalizedMessage();
		e.printStackTrace();
	} catch (ExecutionException e) {
		error = "Provisioning failed: " + e.getClass().getName() + ": "
				+ e.getLocalizedMessage();
		e.printStackTrace();
	} catch (TimeoutException e) {
		error = "Provisioning failed: " + e.getClass().getName() + ": "
				+ e.getLocalizedMessage();
		e.printStackTrace();
	}
	return null;
}

OTP 生成  

在开始生成 OTP 之前,我们需要检查设备是否已顺利完成配置流程。

// Read token if exists
if (!readData()) {
	tvOTPGenerate
			.setText("OTP generation failed: No token exists. Please do provisioning.");
	return;
}

然后,我们就可以调用异步调用生成 OTP。

boolean invokeResyncGenerateOTP(IPTWrapper obj) {
	try {
		// Send request to the server for resync message and process
		// the received resync message
		InvokeIPTResync ipt_obj = new InvokeIPTResync();
		boolean status = ipt_obj.execute().get();
		if (status) {

			// Processes the server resync message
			obj.ProcessResyncMessage(encrToken_b64, serverResyncMessage);

			// Invoke OTP generation again
			// Check if token is of type OCRA
			if (tokenInfo
					.equalsIgnoreCase(OTPDemoActivity.OCRA_TOKEN_INFO)) {
				invokeGenerateOTP(obj, true);
			} else {
				invokeGenerateOTP(obj, false);
			}
			displayOTP();
			progressDialog.dismiss();
		} else {
			String error = "Receive server resync message failed.";
			tvOTPGenerate.setText(error);
			progressDialog.dismiss();
			OTPDemoActivity.OTP = null;
			return false;
		}
	} catch (IhaException e) {
		String error = "OTP generation failed. Message: "
				+ e.getLocalizedMessage() + " Error code: " + e.GetError();
		tvOTPGenerate.setText(error);
		progressDialog.dismiss();
		OTPDemoActivity.OTP = null;
		return false;
	} catch (Exception e) {
		String error = "OTP generation failed: " + e.getClass().getName()
				+ ": " + e.getLocalizedMessage();
		tvOTPGenerate.setText(error);
		progressDialog.dismiss();
		OTPDemoActivity.OTP = null;
		return false;
	}
	return true;
}

OTP 验证

OTP 生成后,我们就可以验证它是否有效。

	ChaabiOTPVerify otp_ver = new ChaabiOTPVerify();
	try {
		otp_ver.execute()
				.get(OTP_VERIFY_TIMEOUT, TimeUnit.MILLISECONDS);
	} catch (InterruptedException e) {
		error = "OTP verification failed: " + e.getClass().getName()
				+ ": " + e.getLocalizedMessage();
		e.printStackTrace();
	} catch (ExecutionException e) {
		error = "OTP verification failed: " + e.getClass().getName()
				+ ": " + e.getLocalizedMessage();
		e.printStackTrace();
	} catch (TimeoutException e) {
		error = "OTP verification failed: " + e.getClass().getName()
				+ ": " + e.getLocalizedMessage();
		e.printStackTrace();
	}
	return null;	} catch (JSONException e) {
		error = e.getClass().getName() + ": " + e.getLocalizedMessage();
		status = false;
		e.printStackTrace();
	} catch (UnsupportedEncodingException e) {
		error = e.getClass().getName() + ": " + e.getLocalizedMessage();
		status = false;
		e.printStackTrace();
	} catch (ClientProtocolException e) {
		error = e.getClass().getName() + ": " + e.getLocalizedMessage();
		status = false;
		e.printStackTrace();
	} catch (IOException e) {
		error = e.getClass().getName() + ": " + e.getLocalizedMessage();
		status = false;
		e.printStackTrace();
	}
	Log.v(LOG_TAG, "Return results: " + status);
	return status;
}

查询 OTP 功能

基于硬件的内置 OTP 并不适用于所有移动设备,所以首先查询系统是否支持 OTP 功能非常有帮助。

private boolean isOTPCapable(){
	try {
		IPTWrapper caps = new IPTWrapper();
		String cap = caps.GetCapabilities();
		displayMessage("Capabilities: " + cap);
		return true;
	} catch (IhaException e) {
		String error = "GetCapabilities() failed. Message: "
				+ e.getLocalizedMessage() + " Error code: "
				+ e.GetError();
		notifyUser("Failed: " + error);
		return false;
	} catch (Exception e) {
		String error = "GetCapabilities() failed: "
				+ e.getClass().getName() + ": "
				+ e.getLocalizedMessage();
		notifyUser("Failed: " + error);
		return false;
	}
}

结论

您可以根据本文介绍的样本来执行代码,这样就能快速了解如何通过 Intel® IPT 和一次性密码 API,在运行 Android 的英特尔® 处理器平台上充分利用基于硬件的 OTP。

作者介绍

Peng Wang 是英特尔软件和解决方案事业部 (SSG)、开发人员关系部门、英特尔® 凌动™ 处理器高接触性软件支持团队的一员。 加盟 SSG 之前,Peng 负责领导超便携式产品事业部的集成和验证团队。 

 

声明

本文件中包含关于英特尔产品的信息。 本文件不构成对任何知识产权的授权,包括明示的、暗示的,也无论是基于禁止反言的原则或其他。 除英特尔产品销售的条款和条件规定的责任外,英特尔不承担任何其他责任。英特尔在此作出免责声明:本文件不构成英特尔关于其产品的使用和/或销售的任何明示或暗示的保证,包括不就其产品的(i)对某一特定用途的适用性、(ii)适销性以及(iii)对任何专利、版权或其他知识产权的侵害的承担任何责任或作出任何担保。

除非经过英特尔的书面同意认可,英特尔的产品无意被设计用于或被用于以下应用:即在这样的应用中可因英特尔产品的故障而导致人身伤亡。


英特尔有权随时更改产品的规格和描述而毋需发出通知。 设计者不应信赖任何英特产品所不具有的特性,设计者亦不应信赖任何标有“保留权利”或“未定义”说明或特性描述。 对此,英特尔保留将来对其进行定义的权利,同时,英特尔不应为因其日后更改该等说明或特性描述而产生的冲突和不相容承担任何责任。 此处提供的信息可随时改变而毋需通知。 请勿根据本文件提供的信息完成一项产品设计。

本文件所描述的产品可能包含使其与宣称的规格不符的设计缺陷或失误。 这些缺陷或失误已收录于勘误表中,可索取获得。

在发出订单之前,请联系当地的英特尔营业部或分销商以获取最新的产品规格。

索取本文件中或英特尔的其他材料中提的、包含订单号的文件的复印件,可拨打1-800-548-4725,或登录 http://www.intel.com/design/literature.htm

在性能检测过程中涉及的软件及其性能只有在英特尔微处理器的架构下方能得到优化。 诸如 SYSmark 和 MobileMark 等测试均系基于特定计算机系统、硬件、软件、操作系统及功能, 上述任何要素的变动都有可能导致测试结果的变化。 请参考其他信息及性能测试(包括结合其他产品使用时的运行性能)以对目标产品进行全面评估。

对本文件中包含的软件源代码的提供均依据相关软件许可而做出,任何对该等源代码的使用和复制均应按照相关软件许可的条款执行。

英特尔、Intel 标识、Atom 和凌动是英特尔在美国和/或其他国家的商标。

英特尔公司 © 2014 年版权所有。 所有权保留。

*其他的名称和品牌可能是其他所有者的资产。


了解借助 Android* 应用内图表进行的数据分析

$
0
0

摘要

本文借助典型商务 Android* 应用中的图表就展示数据和分析的不同选择进行讨论。 讨论的内容包括某个解决方案相比其他解决方案的优势和劣势,以及在选择图表库或 API 时其他技术方面的考虑。 最后,我们还将详细讨论如何使用常用的 AChartEngine* 库在 Android 本地添加饼形图,折线图和柱状图。

目录

摘要
Android 应用图表选项和考量
AChartEngine 概览与运用
零售饭店样例应用– Little Chef (小厨师)
以饼形图形式展示菜单类别
采用折线图呈现销售趋势
采用柱状图进行销售比较
在一个活动中嵌入多个图表
总结

Android 应用图表选项和考量

如果你希望在应用中展示数据或分析,良好的视觉效果至关重要。 它能够对用户满意度产生重大影响。 选择合适类型的图表同样至关重要。

对于 Android 应用,现在暂时没有标准或者平台库来展示图表。 根据应用的不同要求,我们可以采用类似于 Google Charts* 的基于 Web 的图表库,但是这需要应用保持在线并能够使用 Google Charts API 来展示图表。 如果您的应用依赖于其他要求可访问网络的 Google 服务,那么 Google Chart API 无疑是您的理想选择。 Google Charts 链接如下。
https://developers.google.com/chart/

以下链接是拥有多种类型可用图表的综合图库。
https://google-developers.appspot.com/chart/interactive/docs/gallery

如果你能够熟练使用 HTML5,那么图表的选择将更加广泛。 有些 HTML5 库可使用应用进行打包,因而同样成为可离线访问的理想选择。 如果你希望开发一款跨平台应用,这将是一个很好的选择。 下列文章包括一个此类型的库。
/en-us/android/articles/develop-html5-chart-applications-for-android-and-win8-devices

在最终确定某基于 Web 或离线 HTML5 图库之前,你也许会考虑常托管这些解决方案的 Android WebView* 的局限性。
http://developer.android.com/guide/webapps/webview.html

其他需要考虑的技术因素有性能、高级图表自定义功能、支持完整的 Android API、自定义用户交互(如手势)或其他可用性问题。 上述某些库可能不具备这些功能。 低水平的高级自定义功能仅限于本地 Android 解决方案,有时需要直接与 OpenGL/GPU 进行编程,这取决于您的应用要求。

基于 Web 或 HTML5 解决方案有时无法满足您的应用需求,或者您希望使用老式 Android 视图和活动在本地完成图表。 这种方式使您的应用能够与 Android 应用的其他组件紧密集成,从而根据需要无缝实现在活动或图表组件之间协调、共享、持久存储和恢复数据的功能。 此外,还可根据需要支持您的应用执行高级的低水平图表自定义功能。 另一大优势是灵活性以及在本地 Android 图表组件中直接访问全部 Android API 的功能。

有多个第三方库可以用来将图表添加至您的 Android 应用之中。 AChartEngine正是这样的一个库,它现在在社区参与和应用方面受到了 Android 开发人员的普遍欢迎。
https://code.google.com/p/achartengine/

它正处于积极开发的阶段,并且支持多种图表类型。 在本文中,我们将使用这个库来展示如何将基本图表(饼形图、折线图和柱状图)添加至您的 Android 应用之中。

AChartEngine 概览与运用

Android API 支持我们打造一款全新、成熟的图表解决方案。 AChartEngine实现了这一功能并且还具备更多其他功能。 作为受到普遍欢迎的本地图库之一,它面向具备完全成熟功能集的 Android。 支持多种图表类型,可根据需要自定义图表。 图表设有放大/缩小控制以及其他标准的图表功能。
AChartEngine的主要网站是 https://code.google.com/p/achartengine/

以下文章引用于主要网站,进行了更为深入细致的分析。
http://jaxenter.com/effort-free-graphs-on-android-with-achartengine-46199.html

AChartEngine拥有便捷的工厂类 ChartFactory,可根据需要返回在 Android 视图或活动中的图表。 该图表视图然后可以嵌入到其他活动中,类似于其他的 Android 视图。

AChartEngine库的安装与应用与其他 Android 库类似。 只需下载 jar 文件,并放入项目的库文件夹之中。 基于 Eclipse* 或者 Gradle* 的创建将自动编译并创建库。

借助 AChartEngine库创建图表的流程十分简单,而且对于不同的图表类型都能够保持统一。 我们可以根据以下基本步骤,创建简单的图表:

  1. 创建一系列数据集和渲染器。 AChartEngine具备定义的泛型类,可托管数据(如 XYMultipleSeriesDataset)和渲染器(如 XYMultipleSeriesRenderer)。

    创建基本的折线图:

    
    
    		XYMultipleSeriesDataset mDataset;
    
    			XYMultipleSeriesRenderer mRenderer;
    
    		double[] xvals = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    
    			double[] yvals = new double[]{25, 45, 50, 65, 80, 84, 96, 106, 123, 118, 134, 121};
    
    		XYSeries series = new XYSeries("Sales Data");
    
    		for (int i = 0; i < 12; i++)
    
    			series.add(xvals[i], yvals[i]);
    
    		XYSeriesRenderer renderer = new XYSeriesRenderer();
    
    		mDataset.addSeries(series);
    
    			mRenderer.addSeriesRenderer(renderer);
    
    		

    代码片段 1。 创建系列数据集和渲染器 ++

  2. 使用图表标题、颜色、点样式等其他自定义设置配置渲染器。 请注意,我们可以在单独的渲染器(对应某些数据系列)以及整个图表(如图表标题)上进行配置。 >
    
    		renderer.setColor(Color.GREEN);
    
    		renderer.setPointStyle(PointStyle.CIRCLE);
    
    		mRenderer.setChartTitle("Sales Trend Chart");

    代码片段 2。 配置饼形图系列渲染器和主要渲染器 ++

  3. 采用内置的 ChartFactory类,并通过提供上述配置的多个系列的数据集和渲染器获得视图(或完全活动)图表。 请注意,你还需要在 Android 环境(从您的 Android 活动中)下传递。
    
    
    		mChartView = ChartFactory.getLineChartView(context, mDataset, mRenderer);
    
    		

    代码片段 3。 使用 ChartFactory ++

  4. 在 Android 活动布局 xml 中创建布局来存储图表,例如 LinearLayout,并将视图添加至布局。
    
    
    		layout = (LinearLayout) findViewById(R.id.chart);
    
    		layout.addView(mChartView);
    
    		

    代码片段 4。 添加图表至 Android 布局 ++

现在,基本的折线图已经创建完毕,该图嵌入在 Android 活动的线性布局内。

零售业饭店样例应用– Little Chef (小厨师)

为展示图表的运用,我们采用一款饭店样例应用 - Little Chef (小厨师)。

该应用支持用户通过不同的菜单类别和选择进行浏览。

图 1. 饭店样例应用– Little Chef (小厨师)

这款饭店应用可供厨师或者所有者查看以饼形图展示的不同菜单类别和选择,以折线图呈现的销售趋势,或者以柱状图展现的销售比较。 下列屏幕截图为图表视图

图 2.
饭店样例应用采用 AChartEngine 库来展示图表

在这款样例应用中,饭店所有者可从主页屏幕导航至图表视图。 根据需要,多个图表可嵌入同一个 Android 活动中,也可以每个图表单独嵌入一个活动中。

以饼形图形式展示菜单类别

为了演示饼形图的运用,我们将在每个类别中展示不同的菜单类别和项目数量。
首先,为 Android 布局中的图表定义占位符。 我们可以选择添加下列片段所示的题目标签。

<TextView

	android:layout_width="261dp"

	android:layout_height="104dp"

	android:textAppearance="?android:attr/textAppearanceLarge"

	android:text="Menu Items Pie Chart"

	android:gravity="center"

	android:id="@+id/textView" /><LinearLayout

	android:orientation="vertical"

	android:layout_width="600dp"

	android:layout_height="400dp"

	android:id="@+id/chart1"

	android:layout_gravity="center_horizontal"

	android:background="@android:color/transparent"></LinearLayout>

代码片段 5。 样例应用 ++ 的饼形图布局

我们使用 ID "chart1"作为托管饼形图的线性布局的引用。

采用 AChartEngine绘制饼形图,还需使用 RoundChart。 “圆形”图表基本上与 XYChart类似,只是某些配置和设置有所不同。
AChartEngine的运用部分所描述,我们首先需要定义并初始化数据系列和渲染器。 针对饼形图,我们分别采用 CategorySeriesDefaultRenderer类。 请参考下列代码片段。


int[] COLORS = new int[]{Color.GREEN, Color.BLUE, Color.MAGENTA, Color.CYAN};

	CategorySeries mSeries = new CategorySeries("");

	DefaultRenderer mRenderer = new DefaultRenderer();

Map<String, Integer> mcount = new HashMap<String, Integer>();

	for (MenuFactory.MenuItem m : menuItems) {

	if (!mcount.containsKey(m.category)) mcount.put(m.category, 1);

	else mcount.put(m.category, mcount.get(m.category) + 1);

	}

for (Map.Entry<String, Integer> m : mcount.entrySet()) {

	mSeries.add(m.getKey(), m.getValue());

	SimpleSeriesRenderer renderer = new SimpleSeriesRenderer();

	renderer.setColor(COLORS[(mSeries.getItemCount() - 1) % COLORS.length]);

	mRenderer.addSeriesRenderer(renderer);

	}

mRenderer.setChartTitle("Menu Item Categories");

	mRenderer.setLabelsColor(Color.BLACK);

代码片段 6. 样例应用 ++ 的饼形图数据初始化

如上述代码片段所示, SimpleSeriesRenderer用于渲染每个饼形图数据。 我们在该渲染器中配置饼形图每个部分的颜色。 所有的渲染器都添加至主要的渲染器对象。 在主要的渲染器对象中,配置标签的图表标题和颜色。

采用 ChartFactory 类来获得 Android 视图的饼形图,上下文传递、数据系列和渲染器对象。


mChartView = ChartFactory.getPieChartView(context, mSeries, mRenderer);

LinearLayout layout = (LinearLayout) findViewById(R.id.chart1);

layout.addView(mChartView);

代码片段 7。 在样例应用 ++ 中添加饼形图至 Android 布局中

最后,饼形图可以嵌入到如代码片段中所示的 chart1线性布局之中。
最终生成图表如下列屏幕截图所示。

图 3. 以饼形图形式展示菜单类别

采用折线图呈现销售趋势

在饭店样例应用中,我们可以以折线图形式展现去年的销售状况。
为 Android 布局中的图表定义占位符。 我们采用线性布局并分配一个 ID (如 chart2)。

<TextView

	android:layout_width="268dp"

	android:layout_height="104dp"

	android:textAppearance="?android:attr/textAppearanceLarge"

	android:text="Sales Trend"

	android:gravity="center"

	android:id="@+id/textView2" /><LinearLayout

	android:orientation="vertical"

	android:layout_width="600dp"

	android:layout_height="400dp"

	android:id="@+id/chart2"

	android:layout_gravity="center_horizontal"></LinearLayout>

代码片段 8。 样例应用 ++ 的折线图布局

采用 AChartEngine绘制饼形图,还需要使用 RoundChart。 “圆形”图表基本上与 XYChart类似,只是某些配置和设置有所不同。
定义并初始化数据系列和渲染器。 针对折线图,我们分别采用 XYMultipleSeriesDatasetXYMultipleSeriesRenderer类。 请参考下列代码片段。


XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();

	XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();

double[] xvals = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

	double[] yvals = new double[]{25, 45, 50, 65, 80, 84, 96, 106, 123, 118, 134, 121};

XYSeries series = new XYSeries("Sales Data");

	for (int i = 0; i < 12; i++)

	series.add(xvals[i], yvals[i]);

	XYSeriesRenderer renderer = new XYSeriesRenderer();

	renderer.setColor(Color.GREEN);

	renderer.setPointStyle(PointStyle.CIRCLE);

	renderer.setFillPoints(true);

	renderer.setDisplayChartValues(true);

mDataset.addSeries(series);

	mRenderer.addSeriesRenderer(renderer);

mRenderer.setChartTitle("Sales Trend Chart");

	mRenderer.setXTitle("Month");

	mRenderer.setYTitle("Sales in 1000s");

	mRenderer.setXAxisMin(0.5);

	mRenderer.setXAxisMax(12.5);

	mRenderer.setYAxisMin(20);

	mRenderer.setYAxisMax(140);

	mRenderer.setAxesColor(Color.GRAY);

	mRenderer.setLabelsColor(Color.LTGRAY);

	mRenderer.setXLabels(1);

	mRenderer.setYLabels(10);

	mRenderer.addXTextLabel(1, "Jan");

	mRenderer.addXTextLabel(3, "Mar");

	mRenderer.addXTextLabel(5, "May");

	mRenderer.addXTextLabel(7, "Jul");

	mRenderer.addXTextLabel(10, "Oct");

	mRenderer.addXTextLabel(12, "Dec");

代码片段 9. 本示例仅列举了面向样例应用 ++

样例销售数据的折线图数据集和渲染器设置,但是该应用能够请求抽象的后台数据库或者模型以返回销售数据。 代码片段展示了其他我们可添加至折线图中的自定义设置。 我们为月份添加了文本标签,并配置颜色和标题等。 对于所有的自定义设置,请参考代码片段。

采用 ChartFactory 类来获得 Android 视图的折线图,上下文传递、数据系列和渲染器对象。


mChartView = ChartFactory.getLineChartView(context, mDataset, mRenderer);

LinearLayout layout = (LinearLayout) findViewById(R.id.chart2);

layout.addView(mChartView);

Code Snippet 10. 在样例应用 ++ 中添加饼形图至 Android 布局中

最后,饼形图可以嵌入到如代码片段中所示的 chart1 线性布局之中。 
最终生成图表如下列屏幕截图所示。 

图 4. 采用折线图呈现销售趋势

采用柱状图进行销售比较

AChartEngine使我们能够根据需要添加更多的数据系列。 而且,我们还可以通过配置相应的渲染器来自定义每一个数据系列的外观。
添加柱状图的流程与之前所述图表类似。 
我们将绘制两年的销售数据以进行比较。

与上述类似,在 Andoid 布局中为图表定义占位符。 我们采用线性布局,并分配一个 ID (如 chart3)。

<TextView

	android:layout_width="344dp"

	android:layout_height="122dp"

	android:textAppearance="?android:attr/textAppearanceLarge"

	android:text="Sales Comparison Chart"

	android:gravity="center"

	android:id="@+id/textView3" /><LinearLayout

	android:orientation="vertical"

	android:layout_width="600dp"

	android:layout_height="400dp"

	android:id="@+id/chart3"

	android:layout_gravity="center_horizontal"></LinearLayout>

代码片段 11。 样例应用 ++ 的柱状图布局

定义并初始化数据系列和渲染器。 与折线图类似,针对柱状图,我们分别采用 XYMultipleSeriesDataset和 XYMultipleSeriesRenderer类。 请参考以下代码片段。

 XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();

	XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();

 

double[] xvals = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

	double[] yvals = new double[]{25, 45, 50, 65, 80, 84, 96, 106, 123, 118, 134, 121};

	double[] yvals2 = new double[]{35, 55, 40, 75, 65, 90, 106, 100, 130, 125, 144, 131};

XYSeries series = new XYSeries("2012 Sales Data");

	for (int i = 0; i < 12; i++)

	series.add(xvals[i], yvals[i]);

	XYSeriesRenderer renderer = new XYSeriesRenderer();

	renderer.setDisplayChartValues(true);

mDataset.addSeries(series);

	mRenderer.addSeriesRenderer(renderer);

series = new XYSeries("2013 Sales Data");

	for (int i = 0; i < 12; i++)

	series.add(xvals[i], yvals2[i]);

	renderer = new XYSeriesRenderer();

	renderer.setColor(Color.GREEN);

	renderer.setDisplayChartValues(true);

mDataset.addSeries(series);

	mRenderer.addSeriesRenderer(renderer);

mRenderer.setChartTitle("Sales Chart Comparison 2012 - 2013");

	mRenderer.setXTitle("Month");

	mRenderer.setYTitle("Sales in 1000s");

	mRenderer.setXAxisMin(0.5);

	mRenderer.setXAxisMax(12.5);

	mRenderer.setYAxisMin(20);

	mRenderer.setYAxisMax(140);

	mRenderer.setAxesColor(Color.GRAY);

	mRenderer.setLabelsColor(Color.LTGRAY);

	mRenderer.setXLabels(1);

	mRenderer.setYLabels(10);

	mRenderer.addXTextLabel(1, "Jan");

	mRenderer.addXTextLabel(3, "Mar");

	mRenderer.addXTextLabel(5, "May");

	mRenderer.addXTextLabel(7, "Jul");

	mRenderer.addXTextLabel(10, "Oct");

	mRenderer.addXTextLabel(12, "Dec");

代码片段 12。 为样例应用 ++ 柱状图配置数据集和渲染器

如代码片段所示,我们可以分别创建和配置每个系列。 可以选择其他自定义设置,与前一部分中折线图类似。于折线图和柱状图均由属 XYChart的同一基本类型,二者存在很多相似之处。 对于此类图表,从某一类型转换至另一类型只需改变 ChartFactory的调用即可。

采用 ChartFactory类来获得 Android 视图的柱状图,上下文传递、数据系列和渲染器对象。


mChartView = ChartFactory.getBarChartView(context, mDataset, mRenderer, BarChart.Type.DEFAULT);

LinearLayout layout = (LinearLayout) findViewById(R.id.chart3);

layout.addView(mChartView);

代码片段 13。 在样例应用 ++ 中添加柱状图至 Android 布局中

最后,柱状图可以嵌入到如代码片段中所示的 chart3线性布局之中。
最终生成图表如下列屏幕截图所示。

图 5.
采用柱状图进行销售比较

在一个活动中嵌入多个图表

借助 Android UI 布局技巧,我们能够添加多个 AChartEngine图表至同一个活动中,或者添加任何占位符位置至布局中。 下列代码片段展示了如何将上文探讨过的全部图表添加至一个活动布局之中。

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

	android:layout_width="fill_parent"

	android:layout_height="fill_parent"

	android:orientation="vertical"

	android:fillViewport="true">

 

<LinearLayout

	android:layout_height="wrap_content"

	android:layout_width="fill_parent"

	android:orientation="vertical"

	android:weightSum="1"

	android:gravity="center"

	android:background="@android:color/transparent"><TextView

	android:layout_width="261dp"

	android:layout_height="104dp"

	android:textAppearance="?android:attr/textAppearanceLarge"

	android:text="Menu Items Pie Chart"

	android:gravity="center"

	android:id="@+id/textView" /><LinearLayout

	android:orientation="vertical"

	android:layout_width="600dp"

	android:layout_height="400dp"

	android:id="@+id/chart1"

	android:layout_gravity="center_horizontal"

	android:background="@android:color/transparent"></LinearLayout><TextView

	android:layout_width="268dp"

	android:layout_height="104dp"

	android:textAppearance="?android:attr/textAppearanceLarge"

	android:text="Sales Trend"

	android:gravity="center"

	android:id="@+id/textView2" /><LinearLayout

	android:orientation="vertical"

	android:layout_width="600dp"

	android:layout_height="400dp"

	android:id="@+id/chart2"

	android:layout_gravity="center_horizontal"></LinearLayout><TextView

	android:layout_width="344dp"

	android:layout_height="122dp"

	android:textAppearance="?android:attr/textAppearanceLarge"

	android:text="Sales Comparison Chart"

	android:gravity="center"

	android:id="@+id/textView3" /><LinearLayout

	android:orientation="vertical"

	android:layout_width="600dp"

	android:layout_height="400dp"

	android:id="@+id/chart3"

	android:layout_gravity="center_horizontal"></LinearLayout></LinearLayout></ScrollView>

代码片段 14。 样例应用 ++ 中展示多个图表的布局

最终生成的视图如下列屏幕截图(纵向模式)所示。 滚动查看自动控制触控滚动导航。

图 6. 在 Android 活动中的多个嵌入式图表

 总结

本文探讨了 Andorid 中可用的不同制图选项,并分别分析了每种途径的优势和劣势。 我们采用 Android 中最常用的图库之一 AChartEngine,采用一款饭店样例应用,展示了如何添加饼形图、折线图和柱状图。 并且讨论了不同的图表自定义和布局等相关问题。

关于作者

Ashok Emani 是英特尔软件及服务事业部的软件工程师。 他目前负责英特尔® 凌动™ 处理器大规模支持项目。

声明

本文件中包含关于英特尔产品的信息。 本文件不构成对任何知识产权的授权,包括明示的、暗示的,也无论是基于禁止反言的原则或其他。 除英特尔产品销售的条款和条件规定的责任外,英特尔不承担任何其他责任。英特尔在此作出免责声明:本文件不构成英特尔关于其产品的使用和/或销售的任何明示或暗示的保证,包括不就其产品的(i)对某一特定用途的适用性、(ii)适销性以及(iii)对任何专利、版权或其他知识产权的侵害的承担任何责任或作出任何担保。

除非经过英特尔的书面同意认可,英特尔的产品无意被设计用于或被用于以下应用:即在这样的应用中可因英特尔产品的故障而导致人身伤亡。


英特尔可以随时在不发通知的情况下修改规格和产品说明。 设计者不应信赖任何英特产品所不具有的特性,设计者亦不应信赖任何标有“保留权利”或“未定义”说明或特性描述。 对此,英特尔保留将来对其进行定义的权利,同时,英特尔不应为因其日后更改该等说明或特性描述而产生的冲突和不相容承担任何责任。 此处提供的信息可随时改变而毋需通知。 请勿根据本文件提供的信息完成一项产品设计。

本文件所描述的产品可能包含使其与宣称的规格不符的设计缺陷或失误。 英特尔提供最新的勘误表备索。

在发出订单之前,请联系当地的英特尔营业部或分销商以获取最新的产品规格。

索取本文件中或英特尔的其他材料中提的、包含订单号的文件的复印件,可拨打 1-800-548-4725,或登陆: http://www.intel.com/design/literature.htm
性能测试中使用的软件和工作负载可能仅在英特尔® 微处理器上针对性能进行了优化。 SYSmark* 和 MobileMark* 等性能测试均使用特定的计算机系统、组件、软件、操作和功能进行测量。 对这些因素的任何更改可能导致不同的结果。 请参考其他信息及性能测试(包括结合其他产品使用时的运行性能)以对您的目标产品采购进行全面评估。
对本文件中包含的软件源代码的提供均依据相关软件许可而做出,任何对该等源代码的使用和复制均应按照相关软件许可的条款执行。 

采用 SEAndroid 的 Android* 安全自定义功能

$
0
0

Android 安全增强功能 (SEAndroid)

Android 已经为 4.4 版 Android OS (“Kitkat”) 增加了一些新功能。 这些新功能的最重要变化是在强制模式下集成 SEAndroid 的能力,这意味着对所有 Android 组件的访问权限都处于 SEAndroid 的控制。

什么是 SEAndroid? SEAndroid 指的是 Android 安全增强功能,一款 Android 安全解决方案,可确定及解决关键性间隔问题。 最初,本计划旨在 Android 中使用 SELinux,以便限制有缺陷或恶意应用造成的损失,并强制隔离应用。 但是,该计划所涵盖的范围已更改,可在 SELinux 的基础上包含更多内容。 SEAndroid 目前是在 Android 上执行 SELinux 强制访问控制 (MAC) 和中间件强制访问控制 (MMAC) 的整体框架。

让我们澄清一些与 SEAndroid 相关的概念:

  • 安全增强型 Linux* (SELinux) 是一种强制访问控制的实现。它的作法是以最小权限原则为基础,在 Linux 核心中使用 Linux 安全模块 (LSM)。 它并不是一款 Linux 发布版,而是一组可以应用在类 UNIX* 操作系统(如 Linux 和 BSD)的修改。
  • 自主访问控制 (DAC) 是标准的 Linux 安全模型。 在此模型中,访问权限基于用户的身份和对象所有权。
  • 强制访问控制 (MAC) 限制了主体(进程)和对象(文件、套接字和设备等)的权限。

SELinux 不会更改 Linux 环境中的任何现有的安全功能;相反,SELinux 扩展了安全模型,以便包括强制访问控制(如,在 SELinux 环境中强制执行 MAC 和 DAC)。

SEAndroid 通过向内核和用户空间添加 SELinux 支持来增强 Android 系统的安全性,实现了以下功能:

  • 限制特权守护进程,确保其免受滥用,并尽可能减少通过特权守护进程所造成的损失。
  • 采用沙箱机制并实现应用之间以及应用与系统的隔离
  • 防止提升应用权限
  • 支持在安装和运行时通过 MMAC 控制应用权限
  • 提供了一项集中式可分析的策略

此外,在 Android 4.4 中,SEAndroid 是在强制模式下启用,而不是非功能禁用模式或仅通知的许可模式,这意味着在 Android 运行时环境中任何非法操作都将被禁止。

SEAndroid 策略

SEAndroid 策略是整个 SEAndroid 安全机制的一个核心。 此外,该安全架构还需要具有严格的安全策略,以确保访问主体只有最小的对象访问权限,这样程序就能执行基本功能,但将被阻止执行恶意操作。

如上所述,SEAndroid 是在强制模式下执行,而不是在非功能禁用模式或仅通知的许可模式,可用作参考内容并有助于执行测试和开发。

SEAndroid 的安全上下文与 SELinux 基本一致。 四个组成部分:用户、角色、类型和敏感度,即 u: object_r: system_data_file: s0说明如下:

  • 用户: 在 SEAndroid 中第一列安全上下文是用户并且只有一个 u
  • 角色: 在 SEAndroid 中第二列表示角色,分别为 robject_r
  • 类型: 对于第三列类型,SEAndroid 确定了 139 项不同的策略类型,如设备类型进程类型文件系统类型网络类型和 IPC 类型等等。
  • 安全级别: 第四列专为多级安全功能(扩展 MLS)而设计,MLS 是一种访问机制,可增加安全上下文和格式敏感度 [:类别列表] [-敏感度[:类别列表]],例如 s0 - s15: c0 - c1023,而在当前 Android 版本中不需要类别。 敏感度和类别组合表示当前的安全级别,数字根据最低和最高级别的安全功能进行确定。 此列参数被用于查看 MLS 限制,其中“15”和“1023”表示最大敏感度和类别。 此参数范围可以在 Android.mk中进行确定。

安全上下文是第三列类型最重要的组成部分,并且进程类型被称为类型是最重要的 SEAndroid 参数并且策略参数得到大幅扩展,因此所有标有相应类型的文件系统变得极其重要。

SEAndroid 策略源位于 external/sepolicy下方。

该策略包括用于生成 SELinux 核心策略文件的源文件:file_contexts配置、property_contexts配置、seapp_contexts配置和 mac_permissions.xml配置。

  • file_contexts配置用于在构建(例如,系统分区)和运行时(例如,设备节点、服务套接字文件和由 init.rc 创建的/数据目录等)标记文件。
  • property_contexts被用于指定 Android 属性的安全上下文,供查看权限。
  • seapp_contexts配置被用于标记应用进程和应用程序包目录。
  • mac_permissions.xml配置是中间件 MAC 策略。

特定于设备的策略源位于 device/<vendor>/<device>下方。

  • 可通过定义 device/<vendor>/<device>vendor/<vendor>/<device> 目录下方的 BoardConfig.mk 文件中的 BOARD_SEPOLICY_DIRSBOARD_SEPOLICY_UNIONBOARD_SEPOLICY_REPLACE变量来指定特定于设备的策略,即英特尔® 凌动™ 处理器平板电脑(代号 Bay Trail)FFRD8 的配置文件是 “/device/intel/baytrail/BoardConfig.mk”
  • 您可以在 device/intel/baytrail/BoardConfig.mk中查看相关示例,后者定义了这些变量,以便引用 device/intel/baytrail/sepolicy下方特定于设备的策略文件。
  • 您可以在 external/sepolicy/README中找到每台设备的策略文档。

更改 SEAndroid 策略

SEAndroid 策略文件位于 /external/sepolicy下方。 您可以更改这些策略文件,了解应用新策略后会出现什么情况。 更改策略文件时要十分仔细,因为错误的配置会导致整个系统在启动过程中停止响应。 以下是一个示例:

第一步: 先查看,再修改

首先,我们需要查看 “/device/intel/baytrail/BoardConfig.mk”文件。 本主板的 sepolicy 配置如下:


BOARD_SEPOLICY_DIRS :=

device/intel/baytrail/sepolicy

BOARD_SEPOLICY_UNION :=

file_contexts

seapp_contexts

file.te

genfs_contexts

fs_use

device.te

healthd.te

app.te

untrusted_app.te

surfaceflinger.te

vold.te

ecryptfs.te

zygote.te

netd.te

BOARD_SEPOLICY_DIRS确定了特定于设备的策略文件所在的目录。 BOARD_SEPOLICY_UNION意味着最终策略配置是一般策略文件和特定于设备的策略文件的组合结果。 在 Android 的构建过程中,构建系统将检查不同策略之间的冲突。 如果应用了 BOARD_SEPOLICY_ REPLACE,这意味着特定于设备的策略将替换一般策略的配置。

其次,我们需要打开 “/external/sepolicy/untrusted_app.te”文件,并查看是否显示以下两行内容:


Allow untrusted_app shell_data_file:file rw_file_perms

Allow untrusted_app shell_data_file:dir r_dir_perms

上述两项策略为不信任应用(正常应用,不是系统应用)提供了在运行环境下读写文件和读取 shell_data_file类型目录的权限。 在运行环境下,shell_data_file将指向 /data/local/tmp/中的任意文件,这在开发环境下的 /external/sepolicy/file_contexts中得到了定义,如下所示:

/data/local/tmp(/.*)? u:object_r:shell_data_file:s0

但是,上述权限存在一些局限。  如果这些文件和目录位于 /data/loacal/tmp/中,则不信任的应用可以读/写这些文件,并进入这些目录。 但不信任的应用无法在 /data/local/tmp/下方创建自己的文件和目录。 只有系统应用或服务可以为不信任的应用创建文件或目录。 如果我们要给予不信任的应用更多的权限,则我们可以执行第 2 步中描述的更改。

第二步: 添加新策略

现在我们可以编辑 “/device/intel/baytrail/sepolicy/untrusted_app.te”文件,并将以下两行内容添加至文件末尾:


Allow untrusted_app shell_data_file:file create_file_perms

Allow untrusted_app shell_data_file:dir create_dir_perms

在运行环境中,这两项为不信任的应用在 /data/local/tmp/中创建文件和目录提供了权限,这在以下开发环境下的 /external/sepolicy/file_contexts中得到了定义:

/data/local/tmp(/.*)? u:object_r:shell_data_file:s0

基本文件/目录的权限在 /external/sepolicy/global_macros中得到了定义:


define(`x_file_perms', `{ getattr execute execute_no_trans }')

define(`r_file_perms', `{ getattr open read ioctl lock }')

define(`w_file_perms', `{ open append write }')

define(`rx_file_perms', `{ r_file_perms x_file_perms }')

define(`ra_file_perms', `{ r_file_perms append }')

define(`rw_file_perms', `{ r_file_perms w_file_perms }')

define(`rwx_file_perms', `{ rw_file_perms x_file_perms }')

define(`link_file_perms', `{ getattr link unlink rename }')

define(`create_file_perms', `{ create setattr rw_file_perms link_file_perms }')

define(`r_dir_perms', `{ open getattr read search ioctl }')

define(`w_dir_perms', `{ open search write add_name remove_name }')

define(`ra_dir_perms', `{ r_dir_perms add_name write }')

define(`rw_dir_perms', `{ r_dir_perms w_dir_perms }')

define(`create_dir_perms', `{ create reparent rmdir setattr rw_dir_perms link_file_perms }')

我们可以看出,这些权限,如文件操作“{ getattr open read ioctl lock }”与真实文件系统中的文件操作功能一样。

最后,我们需要重建 Android 源树并将新映像刷新至 Bay Trail FFRD8 设备中。

验证 SEAndroid 策略

启动 FFRD8 之后,我们可以从“Android 应用商店”下载一款文件管理器应用,然后从文件管理器菜单中打开命令 shell。 这样,我们就可以效仿不信任的应用执行文件操作的状态。

新文件和新目录可以通过打开 /data/local/tmp/目录进行创建。 (使用标准 FFRD8 设备后,创建新文件和新目录被禁止。) 以下对比图显示了不同策略的结果,左图显示了未更改策略的结果,右图显示了已更改策略的结果:

图 1: 标准策略与已更改策略之间的文件权限对比

总结

本文介绍了 SEAndroid 策略的基本概念,并演示了如何根据英特尔凌动处理器平台(代号“Bay Trail”),将新策略添加至 SEAndroid 策略集。 这将帮助有志于定制 SEAndroid 的 ODM 初步了解 SEAndroid 策略机制。

关于作者

Liang Z. Zhang 现任英特尔中国开发人员关系部门的应用工程师,负责帮助企业应用开发人员使用基于英特尔® 平台的安全技术。

声明

本文件中包含关于英特尔产品的信息。 本文件不构成对任何知识产权的授权,包括明示的、暗示的,也无论是基于禁止反言的原则或其他。 除英特尔产品销售的条款和条件规定的责任外,英特尔不承担任何其他责任。英特尔在此作出免责声明:本文件不构成英特尔关于其产品的使用和/或销售的任何明示或暗示的保证,包括不就其产品的(i)对某一特定用途的适用性、(ii)适销性以及(iii)对任何专利、版权或其他知识产权的侵害的承担任何责任或作出任何担保。

 

除非经过英特尔的书面同意认可,英特尔的产品无意被设计用于或被用于以下应用:即在这样的应用中可因英特尔产品的故障而导致人身伤亡。

 

英特尔有权随时更改产品的规格和描述而毋需发出通知。 设计者不应信赖任何英特产品所不具有的特性,设计者亦不应信赖任何标有“保留权利”或“未定义”说明或特性描述。 对此,英特尔保留将来对其进行定义的权利,同时,英特尔不应为因其日后更改该等说明或特性描述而产生的冲突和不相容承担任何责任。 此处提供的信息可随时改变而毋需通知。 请勿根据本文件提供的信息完成一项产品设计。

 

本文件所描述的产品可能包含使其与宣称的规格不符的设计缺陷或失误。 这些缺陷或失误已收录于勘误表中,可索取获得。

 

在发出订单之前,请联系当地的英特尔营业部或分销商以获取最新的产品规格。

 

索取本文件中或英特尔的其他材料中提的、包含订单号的文件的复印件,可拨打 1-800-548-4725,或登录 http://www.intel.com/design/literature.htm

在性能检测过程中涉及的软件及其性能只有在英特尔微处理器的架构下方能得到优化。 诸如 SYSmark 和 MobileMark 等测试均系基于特定计算机系统、硬件、软件、操作系统及功能, 上述任何要素的变动都有可能导致测试结果的变化。 请参考其他信息及性能测试(包括结合其他产品使用时的运行性能)以对目标产品进行全面评估。

对本文件中包含的软件源代码的提供均依据相关软件许可而做出,任何对该等源代码的使用和复制均应按照相关软件许可的条款执行。

Unity* x86支持资源中心

$
0
0

 

Unity

隶属于英特尔开发人员专区的Unity*资源专页为您提供一站式的在Unity游戏引擎中支持x86平台的各种信息。本页面将会定期更新,请随时关注!

最新消息!

https://software.intel.com/zh-cn/blogs/2014/08/15/unity-android-support
我们欣喜地宣布将提供并填补了全球最流行的游戏引擎的一项空白-对于Intel®架构以及英特尔图形芯片的支持。作为双方联手的一部分,英特尔和 Unity* 将联合为 Unity 游戏引擎提供以下支持:

  • 为 Unity* 4.x 和 Unity* 5 提供面向英特尔架构的原生 Android* 支持
  • 通过 Unity 访问英特尔显卡的独有功能
  • 获得 IA 最新的 CPU 指令和线程支持

长期以来,Unity 一直支持 Windows* x86,但是此次合作将可为 Android 提供原生 x86 支持。

这一功能在Unite*活动上首次亮相共预览,并将很快在Unity* 4和Unity* 5的最新版本中推出。当您拥有了新版本的Unity,您只需打开您现有的工程文件并创建一个新的安卓编译。这将自动生成并同时包含原生对于x86和ARM的支持。您的应用将同时在基于英特尔和ARM的设备上展示出业已优化的最佳性能。


参加Unite? 了解更多!

请参观英特尔的展位,或聆听我们的讲座以了解我们如何协助在多种设备多种形态和平台为游戏开发人员提供支持。

Big Android: Best Performance On The Most Devices

Thursday, August 21, 17:00 - 17:30, Norcliff Room

Over 1 billion people use an Android device daily. This presentation will examine common bottlenecks and performance issues that affect Unity games on Android. Attendees will learn the best methods for reaching the highest possible FPS on the largest range of devices. We will also look at tools for low level profiling and optimization of the CPU and GPU (for ARM and x86).


Unity/X86 动手实验

英特尔将与 Unity 联手,通过以下即将举办的活动为开发人员提供技术支持:

  • Intel/Unity X86 动手实验 – 旧金山,9月 (日期将很快确定)
  • Intel® Buzz Workshop for Game Developers – 伦敦,2014 年 10 月(日期将很快确定)
  • Intel® Buzz Workshop for Game Developers – 斯德哥尔摩,2014 年 10 月(日期将很快确定)
  • 巴西 Unite 2014 – 圣保罗,10 月 20-21 日
  • 澳大利亚 Unite 2014 – 墨尔本,10 月 27 日

ISV 积极参与

Sonic Dash

英特尔与 Unity 已为数家软件开发商提供了最早版本 Unity 代码库,该代码库支持访问英特尔® 处理器和显卡技术。初步迹象表明,此次合作将为游戏开发人员社区带来极大的积极影响。与其他企业相同,SEGA 快速抓住了该机遇,它已经向其基于 Unity 的 Sonic Dash* 添加了 x86 支持。Hardlight 工作室负责人 Chris Southall 表示:"SEGA 的 Hardlight 是首家在其游戏中采用支持 x86 版 Unity 的移动工作室之一。我们看到,通过采用"原生"代码性能得到显著提升。能够就此与 Unity 和英特尔合作是一件非常棒的事情。"

面向 Android* 应用的本地库压缩 SDK

$
0
0

下载 PDF 文档

简介

Android 应用一般使用 Java* 进行编写,因为其讲究的设计面向对象,而且 Android 软件开发套件 (Android SDK) 可在 Java 内提供跨平台功能。 但是有时,开发人员需要使用 Android 的本地接口,尤其如果内存管理和性能至关重要时。 Android 的本地接口通过原生开发套件 (NDK) 提供,可支持在 C/C++ 内进行本地开发。

Google 软件市场上有许多 NDK 应用。 为了降低数据包的尺寸,一些 ISV 发布了单独的 APK 而非 FAT APK (单独的 APK 包括一个 ARM* 或一个 x86 函数库,但是 FAT APK 包含两者)。 FAT APK 由于单个的 APK。 它们更便于最终用户访问,且库在应用更新过程中不会被覆盖。 因此,我们鼓励开发人员为 x86 Android 软件生态系统发布 FAT APK。 但是,开发人员如何降低大型 FAT APK 文件的尺寸呢?

Zip* 与 LZMA

为了解决 FAT APK 的尺寸问题,作者开发了一款本地库压缩 SDK。 其基本理念是使用 Lempel–Ziv–Markov chain algorithm (LZMA) (http://www.7-zip.org/sdk.html) 来压缩本地库。 Google 使用 Zip 来压缩全部内容,虽然 Zip 速度快,但是其压缩率低于 LZMA。 LZMA 尤其适合压缩本地库中的大型目录文件。 下图展示了使用 Zip 和 LZMA 进行压缩后文件尺寸的区别。

 

图 1: 一个文件在使用 Zip* 和 LZMA 压缩后的尺寸比较1

 

图 2: 多个文件(相同的 CPU 架构)在使用 Zip* 和 LZMA 压缩后的尺寸比较1

 

图 3: 多个文件(不同的 CPU 架构)在使用 Zip* 和 LZMA 压缩后的尺寸比较1

 

图 4: 三个相同的文件在使用 Zip* 和 LZMA 压缩后的尺寸比较1

从上面的四个图标中,我们可以得出,LZMA 能够减少文件之间的冗余。 在极端案例(三个相同的文件)中,LZMA 的压缩率高于 Zip。 该功能尤其适合压缩本地库。 一般而言,本地库使用相同的代码获取 “armeabi”、”armeabi-v7a”、”x86” 甚至 “mips” 库,对于 “armeabi-v7a” ,有 ARM NEON* 和非 NEON 代码。 由于有相同的源代码,这些库有冗余。 即使使用不同的架构,例如 libffmpeg_armv7_vfpv3.solibffmpeg_x86.so,一个是 ARMEABI,另一个是 x86,压缩率也为 40%,然而对于单个文件而言,压缩率仅为 20%。

本地库压缩 SDK

作者开发的本地库压缩 SDK 能够帮助应用开发人员整合 LZMA 本地库压缩以获取更小的文件。 此 SDK 的核心理念是按照如下方式将整个本地库压缩至 asserts文件夹。

此 SDK 中的 API 非常简单。 首次运行此应用时,代码可从“资产(asserts)”文件夹中加压整个本地库。

static boolean NewInstance(Context cont,Handler hdl,boolean showProgress)
static DecRawso GetInstance()
String GetPath(String libname)

我们建议应用开发人员在应用启动时修改源代码并添加 NewInstance,然后将 system.loadlibrary(***)更改为 system.load(DecRawso。 GetInstance ().GetPath(***)). 做出这些小改动后,APK 的尺寸将会更小,但是能够像以往一样运行。

如果开发人员能够确保从调用 NewInstance 到首次加载本地库之间有足够的延迟,他们需要调用 (NewInstance (cont,null,false)),但不包括 Handler。 或者,传递 Handler来接收 “decode end” 异步消息。

作者将此 SDK 整合到基于英特尔® 凌动™ Z2760 处理器的平板电脑(代号 Clover Trail)上的 MoboPlayer* 中。 当用户启动应用且出现闪屏时,代码将以异步方式调用 NewInstance 。 调用 NewInsance 对最终用户透明,因为解码在后台完成。 下图展示了压缩结果。

 

表 5: MoboPlayer* FAT APK 尺寸压缩1

本地库压缩 SDK 的增强功能

除了 LZMA 压缩以外,该 SDK 可提供其他功能,以支持开发人员在以下特性中加入 x86 本地库: 

  1. 云存储: ISV 能够将 x86 库存储到云服务器上,这些库可在安装后从服务器进行下载。 该操作在 x86 设备上可自动完成,且仅在连接 Wi-Fi* 时启用。
  2. 丢失库检测:如果 x86 库丢失,SDK 将自动重新提取 ARM 库。 ISV 可将 ARM 库复制到 x86 文件夹中以避免该问题,但是必须确保 ARM 和 x86 库之间没有交叉引用。
  3. 针对封装的 Java 工具: Java 封装工具可用于将正常的 APK 转换为使用 LZMA 压缩的 APK。 该工具支持 Windows*、Linux* 和 Mac* 系统。 您可以将它用作: ComPressApk.jar -a C:/my/test.APK -k c:/key *** ### alias, 如果 “-k” 丢失(也就是说,您可以调用 ComPressApk.jar -a C:/my/test.APK,Eclipse* 默认测试密钥将用于在此 APK 上签名。 该工具可集成至 ants构建脚本,以支持自动编译和发布。
  4. 过滤器: 借助 ConfigureFilter函数,您可以只抽取必要的库。 例如,输入 ConfigureFilter("libffmpeg", "libffmpeg_armv7_neon.so")表示只抽取以 “ libffmpeg” 开头的所有库中抽取 “libffmpeg_armv7_neon.so”。 这对于降低安装后尺寸非常有帮助。

结论

使用针对 Android 应用的本地库压缩 SDK 能够显著降低本地库包的尺寸,并使采用大型本地库的应用(一般情况下,这些应用时视频播放器、浏览器和 3D 游戏)受益。 关于来源和技术支持,请联系作者。

关于作者

Yuming Li (Yuming.li@intel.com) 是英特尔软件与服务事业部的一位软件应用工程师。 目前,他主要关注多媒体相关应用的支持和性能优化,尤其在 Android 移动平台上。

 

1结果根据内部英特尔® 分析预测得出,仅供参考。 任何系统硬件、软件的设计或配置的不同均可能影响实际性能。

 

 

Unity* x86支持资源中心

$
0
0

 

Unity

隶属于英特尔开发人员专区的Unity*资源专页为您提供一站式的在Unity游戏引擎中支持x86平台的各种信息。本页面将会定期更新,请随时关注!

最新消息!

https://software.intel.com/zh-cn/blogs/2014/08/15/unity-android-support
我们欣喜地宣布将提供并填补了全球最流行的游戏引擎的一项空白-对于Intel®架构以及英特尔图形芯片的支持。作为双方联手的一部分,英特尔和 Unity* 将联合为 Unity 游戏引擎提供以下支持:

  • 为 Unity* 4.x 和 Unity* 5 提供面向英特尔架构的原生 Android* 支持
  • 通过 Unity 访问英特尔显卡的独有功能
  • 获得 IA 最新的 CPU 指令和线程支持

长期以来,Unity 一直支持 Windows* x86,但是此次合作将可为 Android 提供原生 x86 支持。

这一功能在Unite*活动上首次亮相共预览,并将很快在Unity* 4和Unity* 5的最新版本中推出。当您拥有了新版本的Unity,您只需打开您现有的工程文件并创建一个新的安卓编译。这将自动生成并同时包含原生对于x86和ARM的支持。您的应用将同时在基于英特尔和ARM的设备上展示出业已优化的最佳性能。


参加Unite? 了解更多!

请参观英特尔的展位,或聆听我们的讲座以了解我们如何协助在多种设备多种形态和平台为游戏开发人员提供支持。

Big Android: Best Performance On The Most Devices

 Download the presentation

Thursday, August 21, 17:00 - 17:30, Norcliff Room

Over 1 billion people use an Android device daily. This presentation will examine common bottlenecks and performance issues that affect Unity games on Android. Attendees will learn the best methods for reaching the highest possible FPS on the largest range of devices. We will also look at tools for low level profiling and optimization of the CPU and GPU (for ARM and x86).


Unity/X86 动手实验

英特尔将与 Unity 联手,通过以下即将举办的活动为开发人员提供技术支持:

  • Intel/Unity X86 动手实验 – 旧金山,9月 (日期将很快确定)
  • Intel® Buzz Workshop for Game Developers – 伦敦,2014 年 10 月(日期将很快确定)
  • Intel® Buzz Workshop for Game Developers – 斯德哥尔摩,2014 年 10 月(日期将很快确定)
  • 巴西 Unite 2014 – 圣保罗,10 月 20-21 日
  • 澳大利亚 Unite 2014 – 墨尔本,10 月 27 日

ISV 积极参与

Sonic Dash

英特尔与 Unity 已为数家软件开发商提供了最早版本 Unity 代码库,该代码库支持访问英特尔® 处理器和显卡技术。初步迹象表明,此次合作将为游戏开发人员社区带来极大的积极影响。与其他企业相同,SEGA 快速抓住了该机遇,它已经向其基于 Unity 的 Sonic Dash* 添加了 x86 支持。Hardlight 工作室负责人 Chris Southall 表示:"SEGA 的 Hardlight 是首家在其游戏中采用支持 x86 版 Unity 的移动工作室之一。我们看到,通过采用"原生"代码性能得到显著提升。能够就此与 Unity 和英特尔合作是一件非常棒的事情。"

如何轻松搞定Crosswalk之Cordova

$
0
0

        Cordova是目前非常流行的web应用开发框架,它通过提供一组设备API使web应用具备在JavaScript中访问本地设备的能力,例如摄像头和加速传感器。同时Cordova可以将web应用打包成系统原生应用格式并发布到它所支持的各个平台,包括iOS,Android,Blackberry,Windows Phone 和 Firefox OS。

        Cordova在Android平台上是使用系统自带的WebView作为它的引擎,在Crosswalk的简介中我们已经介绍过,与WebView相比Crosswalk在性能和功能上都有诸多优势。于是我们通过Crosswalk-cordova-android项目,用Crosswalk替换掉了Cordova中的WebView,这样开发者可以轻松地将Crosswalk引擎继集成到Cordova打包的web应用中。目前,我们将Crosswalk-cordova-android作为Crosswalk的一个子项目维护,但是最终目标是要将Crosswalk融入Cordova,以一种可插入的方式成为其可选引擎之一。

        下面我们将问你介绍如何利用Crosswalk-cordova-android来开发和打包一个web应用。

准备

        首先你需要安装一些依赖包和配置环境。如果你的开发环境是Linux或Mac,需要把下面命令写在~/.bash_profile中,然后执行source ~/.bash_profile。如果是windows,则需要将这些变量添加到”我的电脑”->”环境变量”中。

JDK

        下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

        设置环境变量:

            JAVA_HOME=/path/to/jdk

            JAR_HOME=$JAVA_HOME/jre

            PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

            CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib: :.:$JAVA_HOME/jre/lib

Apache Ant

        下载地址:http://ant.apache.org

        设置环境变量:

            ANT_HOME=/path/to/ant

            PATH=$ANT_HOME/bin/:$PATH

Android SDK

        下载地址:http://developer.android.com/sdk/installing/index.html?pkg=adt

        设置环境变量:

            ANDROID_HOME=/path/to/sdk

            PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools

Node.js

        下载地址:http://nodejs.org/download/

 

下载开发包

        首先下载crosswalk-cordova-android开发包。有不同的版本(canary,beta,stable)和CPU架构(x86, arm)开发包供开发者选择。

        例如:下载8.37.189.2 x86   beta版本

        $wget https://download.01.org/crosswalk/releases/crosswalk/android/beta/8.37.189.2/x86/crosswalk-cordova-8.37.189.2-x86.zip

        将开发包解压,例如:

        $unzip crosswalk-cordova-8.37.189.2-x86.zip -d crosswalk-cordova-android

 

命令行模式

创建工程

        用Cordova提供的工具创建工程,例如,创建HelloWorld:

        $ /path/to/crosswalk-cordova-android/bin/create HelloWorld com.example.helloworld HelloWorld

        HTML,JS和CSS文件位于/path/to/HelloWorld/assets/www文件夹下,你或许需要将它们替换为自己的文件。

设置访问权限

        如果需要使用Cordova的设备API,则需要在AndroidManifest中设置相应的权限,例如使用getUserMedia()接口时,需要设置:

        <uses-permission android:name="android.permission.RECORD_AUDIO" />

        <uses-permission android:name="android.permission.CAMERA" />

        更多设置请参考Android权限

运行APP

        $cd HelloWrold

        $./cordova/build

        $./cordova/run

        更多内容请参考获Cordova命令

 

GUI开发

        打开ADT,选择File->Import->”Existing Android Code into workspace”选择导入xwalk_core_library,CordovaLib,HelloWorld三个Android项目。

        添加xwalk_core_library库依赖到HelloWorld工程中,编译HelloWorld工程。

 

添加插件

        Cordova使用Plugman来安装插件。Plugman是基于Node.js的,所有需要先安装Node.js,然后安装plugman。

        $npm install –g plugman

        安装Cordova 插件前你需要知道它的URL。所有的插件URL可以在Cordova主页上找到。例如,安装Accelerometer插件:

        $ plugman install --platform android --project /path/to/your/app --plugin https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-motion.git

        了解更多关于plugman管理插件的细节请参阅Cordova插件

 

在现有的Cordova项目中使用Crosswalk

        如果现在已经存在了Cordova应用,但想使用Crosswalk,这个也很简单,参考以下步骤就可以实现。

        第一步:导入现有的Cordova到ADT中。如果该运用是通过Cordova命令行生成的,则只要现在导入App工程,而不需要选择“CordovaLib”。

 

        第二步:导入Crosswalk-Cordova-android库工程,这个工程是在“/path/to/crosswalk-cordova-android/framework”目录,它将会导入`xwalk_core_library` and `CordovaLib`两个工程。

 

         第三步:配置Crosswalk-Cordova-android依赖当前工程,右击工程属性,移除老的“CrodovaLib”依赖关系。

        最后添加Crosswalk-Cordova-android中的CordovaLib依赖。

 

        第四步:编译每个工程。先编译”xwalk_core_library”,然后“CordovaLib”,最后”HelloWorld”。

如何快速执行Crosswalk测试及反馈问题

$
0
0

Crosswalk 是采用 Chrome 浏览器的 Blink 渲染引擎并支持最新的HTML5 API,包括WebGL,WebRTC,WebAudio,WebSocket等等的 Web 引擎,提供了比 WebView 更好的用户体验,大家可以在 Crosswalk 简介这篇文章中了解更多。那么大家可能会好奇,我们是怎么对 Crosswalk进行测试的呢?无论是 Web 应用开发者,还是测试人员,可能更多的是关注 App 本身的问题和质量,对 Crosswalk Runtime 本身的测试方法,可能不是特别清晰。同样的,如果在使用 Crosswalk 的过程中遇到了相应的问题,该如何反馈呢?

Crosswalk Runtime 测试简介

Crosswalk 作为一个为 Web 应用而生的 Web Runtime,其核心组件和支持的原生及 Web 接口除了一般浏览器支持的 Web API 之外,还提供了更多高级的 API,例如 Embedding API, Device API 及 SysApp API。

Crosswalk QA在 W3C 的 Web Platform TestKronos API 测试 及Tizen 一致性测试 (TCT)等相关 Web 项目测试的最佳实践的基础上,对  Crosswalk 的测试方法进行了持续改进,这些测试方法覆盖了 Crosswalk Runtime, Web API 及 Device API 等等的规范。特别地,基于 W3C Web 规范的 API 验证性测试提供了全面的 API 测试覆盖度,从最终用户角度出发的基于示例应用的测试提供了用户行为及习惯方面的测试场景,基于 WebDriver 的图形界面 Web 自动化测试框架消除了诸多手动测试和自动化测试之间的鸿沟,在 W3C Test Runner 基础上优化的 Web Testing Service 提供了 HTML5, CSS, SysApps等等的接口便于开发人员和用户随时随地地验证 API 的正确实现。除此之外,Crosswalk QA 在性能测试方面也带来了大量的创新实践。

Crosswalk的测试方法和 W3C保持一致,换句话说,我们的测试方法可以被广泛地借鉴到任何跨平台的 Web App, Web 浏览器及其他 Web Runtime 中。

Crosswalk Runtime 测试实践

Crosswalk-Test-Suite是 Crosswalk 的测试用例集合,在 Github 中以开源的形式进行维护,包括如下图展示目录结构:behavior, cordova, usecase, webapi, wrt, misc, tools 及 doc. 大家可以从 doc下的用户指南入手,逐步了解我们的测试方法。

Crosswalk Test Suite 目录结构

Crosswalk QA 的 Web API 测试自动化基于开源的 testkit-lite 框架,可以在 Linux 系统上(以 Ubuntu为例)由下述方法安装和测试:

  1. 安装 Python 2.7 及 python-resuests
    $ sudo apt-get install python-setuptools python-support python-pip
    $ sudo pip install requests
  2. 从  GitHub 的源代码安装 testkit-lite
    $ git clone git@github.com:testkit/testkit-lite.git
    $ cd testkit-lite && sudo python setup.py install
  3. 参照用户指南部署和启动 testkit-stub 及 tinyweb
  4. 基于Web_Test_Suite 打包指南 3.1 节对相关测试集进行打包,并将测试包安装到测试设备上
  5. 运行  testkit-lite 进行测试
    $ testkit-lite -f /path/to/opt/<test_suite_name>/tests.xml --comm androidmobile

这样,一个完全自动化的测试就能顺利执行了。在现有的 15000 多条测试用例中,我们的自动化率达到了 90% 以上,完成的测试时间也在极为有限的时间点内,基于上述的自动化测试方案结合 WebDriver 自动化框架, Web Testing Serivices 等等,Crosswalk QA 能够尽早并高效地发现 bug 并提出问题。

同时,我们欢迎大家随时在Crosswalk-Test-Suite贡献自己的测试用例。

Crosswalk 问题反馈

Crosswalk 项目是一个开源项目,我们非常欢迎大家贡献自己的代码和问题。大家可以在多个途径讨论和提交问题,其中包括直接在 Crosswalk JIRA中提交的 bug 报告,或者订阅 crosswalk-help邮件列表,我们的工作人员会及时回复您的问题和反馈。


高质量视频压缩:为基于英特尔® 凌动™ 的 Android* 平台集成 H.265/HEVC 解决方案

$
0
0

摘要

据国际数据公司的统计,2012 年全球数据总数达 2.7 ZB [1],比 2011 年增加 48%。 全球 90% 的数据是视频。 视频应用消耗了互联网数据总流量的 66%,且该数字不断快速增长。 最终用户希望看到高品质的视频,但是对于在线视频提供商而言,购买网络宽带和存储设备的费用逐年攀升。 视频内容提供商如何应对大量数据来源的挑战并满足其日益增长的存储需求? 是否能够利用更少的带宽实现高质量的视频? 解决这些挑战的方法是利用名为高效率视频编码 (H.265/HEVC) 的视频核心压缩技术。

一些开源社区(如 FFmpeg [2])正在开发 H.265/HEVC 解码器,但是其性能尚未达到商用能力。 一家视频编解码核心技术生产商视骏[3] 开发了高级 H.265/HEVC 解码器/编码器解决方案,包括优化的 H.265/HEVC 编码器/解码器库和基于英特尔® 凌动™ 处理器的 Android 平台的演示代码。 本文介绍了基于英特尔凌动处理器的 Android 平板电脑(代号 Bay Trail)上的视骏 H.265/HEVC 解决方案。

视骏 H.265/HEVC 解决方案

对视频标准进行评估时,我们一般使用效率和兼容性标准。 过去 20 年的视频标准演进如下图所示:



图 1. 视频标准历史

H.265/HEVC 是接替 H.264/AVC(高级视频编码) 的编辑器,二者均为 ISO/IEC 动态图像专家组 [4] 与 ITU-T 视频编码专家组 (VCEG) [5] 联合开发。 新编解码器的主要目标是比 H.264 的压缩效率高 50%,并支持高达 8192 x 4320 的分辨率。

如图 1 所示,从 MPEG-2 发展到 H.264/AVC 需要 9 年的时间,因此从 H.264/AVC 标准发展到 H.265/HEVC 标准将会遇到更多挑战。 H.265/HEVC 的技术概念和实际质量之间仍然存在差距。 但是,H.265/HEVC 很好地平衡了效率和兼容性要求,形成了新级别的视频标准。

视骏 H.265/HEVC 解决方案使用 YASM [6] 汇编编译器、英特尔® C++ 编译器 [7]、英特尔® 流式单指令多数据扩展(英特尔® SSE) [8] 和英特尔® 线程构建模块 (英特尔® TBB) [9] 进行了优化,并使用 OpenGL* [10] 进行渲染。 它可以将编码的 YUV420 数据直接上传到 GPU,从而终结了从 YUV 数据向 RGB 数据转码的历史,并可将 RGB 数据渲染为 LCD。 这样可降低 CPU 工作负载并改进性能。 数据流如下图所示:



图 2. 渲染方法比较

在基于英特尔凌动处理器的平板电脑上(代号 Bay Trail),使用英特尔® 图形性能分析器(英特尔® GPA)[11] 工具进行测试后,播放 1080p HEVC 视频时,优化的 H.265/HEVC 解码器刷新率可达到 90 FPS(帧/秒)。 如果我们在 Bay Trail 平板电脑上将刷新率设置为 24 FPS,当播放 1080p 视频时,CPU 工作负载将低于 25%。 因此,视骏 H.265/HEVC 解决方案可达到商用能力

视骏 H.265/HEVC 解决方案的 API 分析

视骏 H.265/HEVC 解决方案的 API 可在 FFmpeg 开源上轻松使用或与其集成。 视骏为 H.265/HEVC 解码器定义了五个功能和一个结构,如下所示:

结构:

lenthevcdec_ctx;

描述: 它是解码器确认不同解码器的环境。

函数:
1. Unit32_t lenthevcdec_version(void);

描述:用于获取当前库的 API 版本。

2. lenthevcdec_ctx lenthevcdec_create(int threads, int comoatibility, void* reserved);

描述:使用特定的参数创建解码器。

示例:

lenthevcdec_ctx ctx;
ctx = lenthevcdec_create(2, 0x7fffffff, NULL);
if ( NULL == ctx ) {
fprintf(stderr, "call lenthevcdec_create failed!n");
exit(1);}

3. Void lenthevcdec_destroy(lenthevcdec_ctx ctx);
描述:关闭解码器并释放全部资源。

4. Void lenthevcdec_flush(lenthevcdec_ctx ctx);
描述:转储清除(flush)解码器并清理缓存。

5. int LENTAPI lenthevcdec_decode_frame( lenthevcdec_ctx ctx, const void* bs, intbs_len, int64_tpts, int* got_frame, int* width, int* height, intline_stride[3], void* pixels[3], int64_t* got_pts);

描述:解码一帧。 将一帧的位流输入解码器,如果有任何一帧解码,从解码器获取一帧的像素数据。

示例:

int32_t got_frame, width, height, stride[3], ret, i;
uint8_t* pixels[3];
int64_tpts, got_pts;
for ( i = 0; i <au_count; i++ ) {
pts = i * 40;
got_frame = 0;
ret = lenthevcdec_decode_frame(ctx, au_buf + au_pos[i], au_pos[i + 1] -
au_pos[i], pts,&got_frame, &width, &height, stride, (void**)pixels,&got_pts);
if ( ret < 0 ) {
fprintf(stderr,"calllenthevcdec_decode_frame failed! ret=%dn", ret);
exit(1);
}
if ( got_frame> 0 ) {
printf("decode frame, %dx%d, pts is %" PRId64 "n",
width, height, got_pts);
/* got frame, do something ... */
}
}

如何整合视骏 H.265/HEVC 解决方案

开发人员可在开发 HEVC 视频播放器时轻松整合这五个函数。 文档和示例代码可从视骏的下载网站上获取 [12]。

开发人员可直接调用视骏的 H.265/HEVC API 来开发视频播放器,或可将视骏 H.265/HEVC 补丁添加到 FFmpeg 中,然后使用添加后的 FFmpeg API 开发视频播放器。 下面一个段落分别介绍了两种方法。

直接使用视骏的 API 开发视频播放器

视骏的网站上,开发人员能够下载:

  • 样本代码 testdec.c/lenthevcdec.h
  • 解码器: liblenthevcdec.so
  • 文档: lenthevcdec_en.pdf, the Makefile

将 Ubuntu* 构建设备的示例代码分别复制到以下文件夹中:

wangsy@ubuntu:~/Desktop cp testdec.c Makefille ~/hevc/src
wangsy@ubuntu:~/Desktop cp lenthevcdec.h  ~/hevc/include
wangsy@ubuntu:~/Desktop cp liblenthevcdec.so ~/hevc/lib/Android_x86

使用 "export"命令设置 ANDROID_NDK_HOME环境:

export ANDROID_NDK_HOME= $ ANDROID_NDK_HOME :/~/android-ndk-r9c

然后运行 "make"命令。

然后构建样本代码并获取输出文件 testdec。 将输出文件和解码器 lib 复制到 /data/hevc_test 下的根 Android 设备。

使用 "export"命令设置 LD_LIBRARY_PATH环境:

导出 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/hevc_test

然后可以直接在 Android 设备上运行演示。

使用 FFmpeg 的 H.265/HEVC 补丁开发视频播放器。

事实上,大部分的开发人员使用开源 FFmpeg 开发视频播放器。 此外,视骏的网站还可提供 FFmpeg 补丁,它可从以下位置下载: lentoid_ffmpeg2.0_patch_2014_01_23_new_encoder_interface.patch

如要添加该补丁,您还需要下载并解压缩 FFmpeg 2.0.4 版本 [13]。 然后添加补丁:

wangsy@ubuntu:~/ffmpeg-2.0.4
patch –p1 < ./lentoid_ffmpeg2.0_patch_2014_01_23_new_encoder_interface.patch

将下载的 headfile和 lib 代码复制到 ~/ffmpeg-2.0.4/thirdparty

cp lenthevcdec.h lenthevcenc.h liblenthevcdec.so liblenthevcenc.so ~/ffmpeg-2.0.4/thirdparty

将以下配置文件复制到 ~/ffmpeg-2.0.4,并添加 "run"许可:

wangsy@ubuntu: cp build_x86.sh ~/ffmpeg-2.0.4
wangsy@ubuntu: sudo chmod a+x ~/ffmpeg-2.0.4/build_x86.sh

下载 build_x86.txt

运行配置文件 "build_x86.sh"(包含上面的内容),然后运行 "make"和 "make install"命令。 添加了视骏 H.265/HEVC 补丁的 FFmpeg 现应可成功构建。 输出 lib 位于 ~/FFmpeg2.0.4/android/x86/lib下。 您可以在视频播放器中使用这些输出 lib。

总结

H.265/HEVC 标准在移动市场上日益普遍。 这一新视频革命为在线视频提供商、移动互联网用户和广播/电视运营商以及用户带来了颇多益处。 为了达到本文中介绍的结果,视骏的 H.265/HEVC 解决方案针对基于英特尔® 凌动™ 处理器的 Android 平台进行了全面优化,因此立即采用此解决方案开发 HEVC 播放器吧!

相关文章

参考文献

[1] 国际数据公司 (IDC)。 “前 10 名预测/IDC 预测 2012 : 为 2020 竞争。” IDC 网站: http://cdn.idc.com/research/Predictions12/Main/downloads/IDCTOP10Predictions2012.pdf

[2] FFmpeg: http://www.ffmpeg.org/index.html

[3] 视骏http://xhevc.com/en/about/about-shijun.jsp

[4] ISO/IEC 活动图像专家组 (MPEG): http://mpeg.chiariglione.org/

[5] ITU-T 视频编码专家组 (VCEG): http://www.itu.int/en/ITU-T/studygroups/com16/video/Pages/default.aspx

[6] Yasm Modular Assembler Project: http://yasm.tortall.net/

[7] 英特尔® C++ 编译器(英特尔® ICC): https://software.intel.com/en-us/c-compilers

[8] 英特尔® SIMD 流指令扩展(英特尔® SSE): https://software.intel.com/zh-cn/articles/performance-tools-for-software-developers-intel-compiler-options-for-sse-generation-and-processor-specific-optimizations

[9] 英特尔® 线程构建模块(英特尔® TBB): https://software.intel.com/sites/default/files/m/d/4/1/d/8/tutorial.pdf

[10] OpenGL: http://www.opengl.org/

[11] 英特尔® 图形性能分析器(英特尔® GPA): https://software.intel.com/en-us/articles/gpa-faq

[12] 视骏下载: http://www.strongene.com/en/downloads/downloadCenter.jsp

[13] FFmpeg 下载: http://www.ffmpeg.org/olddownload.html

关于作者

Songyue Wang 是英特尔® 软件和解决方案事业部(SSG)开发人员关系部门英特尔® 凌动™ 处理器移动支持团队的高级应用工程师。 Songyue 负责管理基于英特尔凌动处理器的 Android 应用。 他主要负责优化 Bay Trail 平台上的多媒体性能,与中国地区最受欢迎的在线视频提供商合作,提供 H.265/HEVC 编码器和解码器解决方案,以及针对 x86 平台为 Android 提供英特尔® 无线显示独特特性。


[1] 性能测试中使用的软件和工作负载可能仅在英特尔微处理器上针对性能进行了优化。 SYSmark* 和 MobileMark* 等性能测试均使用特定的计算机系统、组件、软件、操作和功能进行测量。 上述任何要素的变动都有可能导致测试结果的变化。 请参考其他信息及性能测试(包括结合其他产品使用时的运行性能)以对目标产品进行全面评估。

配置: 采用 2GB 内存和 Android 4.4 的英特尔®凌动™ Bay Trail 平板电脑 FFRD8,解码帧速率。 如欲了解更多信息,请访问:http://www.intel.com/performance

使用 Intel GPA System Analyzer 改进 Android* 应用

$
0
0

下载样本代码 (ZIP)

移动应用在模拟器和设备之间有着不同的行为,随着应用越来越复杂,调试性能瓶颈变得非常困难。 英特尔® INDE 的组件 GPA System Analyzer 是一款能够诊断各种性能问题的工具。

安装英特尔® 集成式本机开发人员体验测试版(英特尔® INDE)

英特尔 INDE 可为在基于英特尔® 架构的设备上设置环境、创建代码、编译、调试和分析提供一套完整、一致的 C++/Java* 工具、库和示例,并可为基于 ARM* 的 Android* 设备提供指定功能。

通过以下链接安装英特尔 INDE: http://software.intel.com/en-us/intel-inde

针对远程调试构建应用

为了允许 GPA System Analyzer 连接您的应用,您需要确保它有 INTERNET许可且 debuggable设置为 “真(true)”。

了解应用

Art Browser 样本应用是一个基本样本,它融合了大型实际应用的某些方面。  它是一个极为简单的图像滚动插件(image carousel),您可能会在媒体播放器或图片浏览应用中看到。 它有两个按钮您不会在产品应用中看到,这两个按钮对于解决性能问题非常有帮助:

  1. 启用和禁用 “Advanced Math Calculations” 的按钮。 这模拟了一些真实状况,即需要选择使用高级的 CPU 密集型物理引擎、极为冗长的记录、重负载位图效果或其他 CPU 密集型特性,它们对应用是否成功不起关键作用。 该按钮在启用状态下回通过使 CPU 过载来显著降低应用的速度,从而为我们提供机会了解如何调试占用大量 CPU 资源的应用。 默认情况下,该按钮为禁用状态,以便允许应用顺利加载。
  2. 选择几何复杂性的下拉菜单。 通常情况下,最好将大型平面划分为较小的方块以避免深度分类的问题。 默认值是 128x128 网格,这比基本需求复杂,但是可以帮助解释我们的观点。  此几何复杂性将会使 GPU 过载,并为我们提供一个机会了解占用大量 GPU 的应用在 GPA 中的情况。 将其减少到任意更低的值将会让应用恢复顺畅运行。

 

连接到您的应用上

在您的设备或模拟器上构建和安装 Art Browser 示例应用。  然后,确保您的 Android 开发工具(Eclipse 等)没有运行,因为这可能会导致无法连接到您应用上。  启动 GPA System Analyzer 工具。  它将会列出您的本地设备以及任何运行中的模拟器或添加的设备。 

确保您的设备或模拟器没有锁定,且启用了“USB 调试”。  点击“连接”按钮将其连接。  GPA 将会列出所有启用了调试的应用。

GPA 能够监控多种数据类型,但是对于此应用,我们对帧速率和 CPU 加载最有兴趣。  将 CPU → Aggregated CPU Load 从左侧侧栏拖至上方的图表,将 OpenGL → FPS 拖至下方的图表。 

优化代码

为了演示 CPU 密集使用的情况,我们需要通过该应用中的按钮启用 Complex Math Calculation。  我们可以立刻看到它正在消耗 100% 的处理器。 这解释了帧速率为何为 0 FPS。  再次点击该按钮关闭重负载运算能够稍微改善一下此状况,使 CPU 总负载下降 30%,并使 FPS 上升至略微可用的值 — 10。

优化 OpenGL

我们仅禁用了 CPU 密集型代码片段,但是我们的性能仍然较差。 我们现在唯一能做的是优化 OpenGL 渲染。 突破图形瓶颈比 CPU 瓶颈要难,因为 OpenGL 图形管线是一个复杂的流程,解决一个问题没有一成不变的单一标准。 所幸,GPA 配备了丰富的 OpenGL 优化工具,这些工具由许多能够关闭或更换 OpenGL 渲染管线组件的复选框构成。

确定您的应用是否为 GPU 密集型且有 OpenGL 瓶颈的最简单的方法是使用“禁用绘制调用(Disable Draw Calls)”状态覆盖。 这将会关闭发送到 GPU 的所有操作。  如果使用该覆盖无法改善性能,我们便知道问题与 CPU 有关。  但是,如果 FPS 显著攀升,我们肯定会有 OpenGL 瓶颈。

如您所见,它导致 FPS 图表迅速上涨,因此我们知道我们的应用是 GPU 密集型。 我们可以看到是否高分辨率纹理可能通过禁用所有状态覆盖,然后使用 Texture 2x2 覆盖导致了问题的出现。

这带来的变化很小。 然后,我们可以尝试使用 Simple Fragment Shader 覆盖观察着色器代码是否太复杂。

我们要了解的不是改善了多少。 我们可以通过比较 TA Load 标准和 USSE Vertex Load 标准来测试过度复杂的几何。 将 GPU → TA Load 标准拖至上方图表,然后按 CTRL 并将 GPU → USSE Vertex Load 标准也拖至上方图表,在 TA Load 旁边用曲线图来表示它。 可能与您预计的情况相反,高 TA Load 和低 Vertex Load 代表处理了太多顶点。

很明显,这是一个问题,因为 TA Load 数量级更高。 但是,请注意,它仍然在 50% 以下徘徊。 还需注意,即使严重的图形瓶颈也无法使任何一个标准达到 100%。

使用我们应用中的 Geometry Complexity spinner,我们可以将自己的几何简化为 2x2 网格。

这可以即可加速 FPS,而且 TA Load 与 USSE Vertex Load 也更平衡。  如果我们希望找到性能和深度分类之间的平衡点,还可以尝试 8x8 和 32x32。  现在,此应用可以闪亮登场!

注: 应用的测试以及结果的分析基于英特尔凌动处理器 Z2760 平板电脑。

结论

虽然性能问题很难在商务级别的应用上进行调试,但是 GPA System Analyzer 能够在调查复杂的性能瓶颈上提供有力的支持。 如欲更多信息和完整文档,请查看 Intel.com 上的 GPA System Analyzer 主页。

使用 Unity* 游戏引擎向 Android* 应用添加 x86 支持

$
0
0

概述

在当前基于 Unity* ARM* 的 Android* SDK 游戏中添加原生 x86 支持非常简单。  本文介绍了如何在最新的 Unity 4 或 Unity 5 项目中生成一个包括 x86 和 ARM 库在内的 FAT APK。   

英特尔与 Unity 联手将 x86 Android 功能添加到即将公开发行的 Unity 4.6 和 Unity 5。 版本上线后,我们将在 https://software.intel.com/zh-cn/articles/unity上进行更新。 如果您想提前使用版本 4.5.4,请联系您的英特尔客户经理。

添加 Android* 原生 x86 支持

除了 ARM 之外,Unity 现在可为开发人员提供原生 x86 支持。 当创建使用 Unity 4 或 Unity 5 的 Android build 时,它将自动创建包含 x86 和 ARM 库的 FAT APK。

最佳实践: 按照 Unity 编程实践进行操作,确保项目为最新状态,Unity 软件版本为最新版本。 Android SDK 和 NDK 也需要进行更新,以确保完全兼容。

步骤 1

打开项目,点击 File > Build Settings,打开 Build Settings(图 1)。

图 1.File 下拉菜单中的 Build settings

步骤 2

在 Build Settings 内,选择 Android,然后点击 Build(图 2)

图 2.Build Settings:确保选中 Android*,然后点击 Build

 

步骤 3

点击 Build 后,指定保存位置。

就这么简单! 您的 APK 现在包含原生 x86 支持。

面向 Unity x86 开发人员的页面现已上线:www.intel.com/software/zh-cn/unity,点击获取更多支持。 

总结

正如您所见,使用最新版 Unity 4 或 Unity 5 为 x86 平台创建基于 Android 的游戏非常轻松。 原生 x86 支持可为您的应用提供更出色的性能和更快的加载速度。

在 libGDX 添加运行 Android* 的英特尔® x86 CPU

$
0
0

概述

随着基于 Android x86 的英特尔® 架构设备走俏,libGDX 团队着手开发,以确保开发人员能够使用一个跨平台框架无缝部署游戏和应用。 该案例首先对 libGDX 进行了简要介绍,然后展示了如何将现有的巨大的代码库轻松移植到基于 x86 Android 设备!

什么是 libGDX?

libGDX是一款面向 Windows*、Linux*、Mac OS X*、Android、iOS* 和 Blackberry* 平台和支持 WebGL 的浏览器的开源、跨平台游戏开发框架。 您可以使用 libGDX 在任何 JVM (Java* 虚拟机)语言 — Java、Scala、Clojure、Kotlin* — 中编写游戏,然后将该代码库部署到所有支持平台上。 libGDX 可跨多种平台支持 JVM 开发常用的所有 IDE,如 Eclipse*、NetBeans 和 Intellij IDEA*。 大部分的测试和开发工作可在桌面环境中完成,这加快了开发和迭代的速度,因为我们尽可能地减少了耗时的设备部署。

业余爱好者、小型独立开发人员和大型工作室都可以使用 libGDX 创建桌面和移动游戏,如 Google 的 Ingress、Robotality 的 Halfway(图 1)或 Kiwi Inc. 的畅销社交游戏。 非游戏应用也可以使用 libGDX,如 Esoteric Software 的 Spine 2D 骨骼动画软件。


图 1. Robotality Halfway 截图

libGDX 自 2014 年第二季度发布 1.0 版以来,在 Maven Central 上的月下载量约为 250,000 次,从而成为目前使用最广泛的开源、跨平台游戏开发框架。


图 2. 过去一年 libGDX 的下载量

Intel、Android 和 libGDX

看到如此庞大的用户群后,我们很快意识到 libGDX 必须能够无缝支持基于英特尔® x86 的 Android 设备,并能够提供最大的性能。 我们在原生 C/C++ 代码中部署了 libGDX 的所有性能关键型部件,然后通过 JNI 绑定向开发人员发布,以便其能够在所选的可管理语言中轻松部署。

libGDX 包含多种特定平台的原生组件,可帮助开发人员创建高性能游戏:

  • CPU 端显卡:虽然 libGDX 主要依靠通过 OpenGL ES* 的 GPU 端渲染,但是仍然需要 CPU 端图像组合和处理。 因此,libGDX 部署了全面的 2D 渲染库,并集成 FreeType 用于字体渲染。
  • 手动内存管理: Java 应用具备垃圾收集、运行时环境方式的内存管理。 虽然在许多情况下这较为便捷,但是纹理或网格的原生内存资源需要手动进行管理。 我们通过原生 C++ 代码导出所有相关操作来部署手动管理。
  • 线性代数:游戏开发的许多领域需要使用矩阵、矢量和四元数算法。 一些游戏在使用矩阵乘法时遭遇瓶颈。 为了帮助解决这些问题,libGDX 在 C++ 和汇编程序中部署常见的线性代数操作。
  • 物理:大部分的游戏都需要某种程度的模拟物理来生成逼真的交互式世界。libGDX 针对 2D 和 3D 物理部署了 Box2D 和 Bullet*。 这两种第三方库均使用特定的 CPU 编译器扩展在原生 C++ 中进行编写,如英特尔® 单指令多数据流扩展 3 或 NEON*。

最初,libGDX 支持基于 Windows、Linux 和 Mac OS X 的 x86 和 x86 64 位。因此,我们相信,基于 x86 的 Android 的移植将会非常轻松。 下文介绍了轻松的移植操作!

针对 x86 设置 Android build

每个 libGDX 原生组件都有自己的子项目,其中包括针对每个平台的 build 文件。 对于桌面系统和 iOS,我们使用了 GCC/Clang 和基于 Apache Ant* 的定制 build 系统。 Android 版 libGDX 使用了 Android 原生开发套件。 NDK build 通常使用两种文件进行描述: Android.mk 和 Application.mk。 在大多数情况下,在 Application.mk 文件中将 x86 添加为 build 目标即可满足使用(如上所示)。 非常简单!

APP_ABI := armeabi armeabi-v7a x86 APP_PLATFORM := android-8 APP_STL := stlport_static

一些组件拥有特定的 CPU 架构 build flag(如支持 NEON)以使用内嵌汇编等。 为了获得首个操作 build,我们禁用了所有 flag。

Introduction to LibGDX for Android on Intel Platform

测试

为了确保代码稳定性,libGDX 预装了大量的测试,以便在扩展至新平台时使用。 完成首个面向 x86 Android 的 NDK build 后,我们实施了 Bullet 物理测试集合。 结果非常成功! 我们的测试在英特尔为我们提供的测试设备 ASUS MeMO Pad* FHD 10 上运行非常顺利(图 3)。


图 3. 示例:在 ASUS MeMO Pad* FHD 10 上运行的 Bullet* 物理测试

其他所有测试也均在 CPU 和 GPU 上如期运行,这让我们有信心将 x86 Android build 向开发人员提供。 我们还能改进吗?

采用矢量

libGDX 的大部分原生组件执行不同类型的数学运算,大部分可使用 GCC 自动进行矢量化处理。 目前所有可用的基于 x86 的 Android 设备均支持英特尔 SSE3,接下来我们来确保最大限度地利用了 CPU!

ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS := $(LOCAL_C_FLAGS) -mfpmath=sse -msse3 LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS) -mfpmath=sse -msse3 endif

经过上面的简单转换,只要编译器能够对我们的数学代码进行矢量化处理,所有的原生代码现在都能使用 SIMD 指令。 请注意,我们不能在 ARM 上执行相同的操作,因为并非所有 ARM 芯片都支持 NEON。 x86 Android 获得明显优势!

为开发人员提供更高性能

自 1.0 版起,libGDX 项目将自动为基于 x86 的 Android 设备提供与其他平台一样的无缝支持。 最后,我们还向 libGDX 开发人员提供了一个有力支持。 无需手动复制文件或设置 flag 即可使用! 如果您对 libGDX 感兴趣,我们建议您阅读完整文档并观看我们的视频教程

结论

将 libGDX 及其巨大的原生代码库与基于 x86 的 Android 配合使用非常轻松。 我们仅需为每个子项目转换 2 个文件(5 行)即可。 在基于 x86 的设备中添加 Android 和 libGDX 现在成为现实。 此外,开发人员现在能够使用英特尔® 硬件加速执行管理器等工具进一步改进开发循环,使用面向 Android 的显卡性能分析器对游戏进行分析并进行基准测试。 这为 libGDX 社区 带来极大的优势。

关于作者

Mario Zechner 是一位技术人员,在多种领域(从游戏开发到数据分析)拥有 8 年以上的专业经验。 他创建了开源游戏开发框架 libGDX,撰写了《创建 Android 游戏》(Beginning Android Games)一书,目前正在开发 RoboVM — 面向 Java 虚拟机位元码的预编译器。 您可以通过 Mario 的 Twitter (@badlogicgames) 和博客 (http://www.badlogicgames.com) 来了解他。

为基于英特尔® 架构的 Android* 平板电脑开发移动游戏显卡 — 第二部分

$
0
0

作者: Clay Montgomery

本系列的第二部分将具体介绍最适合 Android 平板电脑的 3D 游戏引擎和中间件解决方案,包括免费软件、开源软件和专有选项。 此外,我还将指出哪些解决方案拥有适用于 x86 英特尔® 处理器的本地支持。

本系列的第一部分介绍了使用软件开发套件 (SDK) 和 Android 原生开发套件进行开发的游戏引擎、创作工具和中间件的基本概念和种类,并列出了适用于 2D 游戏开发的最佳解决方案。

3D 游戏引擎

3D 游戏引擎在 Android 设备上运行,通过创作工具解析内容,并通过 OpenGL ES* 来渲染图形。 除了 OpenGL ES 以外,它们还可提供其他基本服务,如渲染文本字体、检查触摸输入和提供音频和视频集成。 多数游戏引擎来源于 Windows* 平台,很晚才移动到 Android 平台。 一些引擎较为全面和成熟(如 Unity* 3D),但是尺寸更大且更昂贵;另一些引擎则为完全开源和免费(如轻型 Java* 游戏库 [LWJGL] 和 jMonkeyEngine)

最全面的解决方案甚至支持您将游戏从 OpenGL ES 移植到游戏控制台、Apple iOS* 设备、Linux* 和 Windows,这能够让您的应用更快地发布到更广泛的市场中,但是需要一定支付一定的费用。 通常,该费用根据所需的功能、针对的平台数量、开发团队规模和从游戏销售中的收入而划分为不同的级别。 当然,如果支付许可费或订阅费,将可获得更高的支持,但是如果要获取免费软件,可从用户论坛上在线获取。

一些游戏引擎与专有创作工具紧密集成,您需要支付许可费才能使用工具或引擎并发布游戏。 但是开源游戏引擎通常从多种创作工具(免费或付费)工具中导入内容,并使用多种工具标准的文件格式,以便交换 3D 资产,如 Autodesk 3ds Max* 对象文件或 Collada。

最后,一些中间件解决方案不完全是游戏引擎,但是能够免费或收取较少的费用来提供构建定制游戏引擎所需的部件,如 Imagination Technologies PowerVR* SDK 和 LWJGL。 如果您的应用仅限于一定范围内,不需要一个典型 3D 游戏的全部服务,或者需要源代码进行定制时,可以选择这些选项。

物理引擎

您的游戏可能需要一个物理引擎,使您的动画呈现自然的移动方式,即在运动中受约束的刚体几何上模拟重力、摩擦力、惯性和恢复运动,并执行碰撞检查。 游戏开发最常见的物理引擎有 Bullet、NVIDIA PhysX* 和 Box2D。 Bullet 和 Box2D 是免费的开源项目。 Box2D 仅限于 2D,但是 Bullet 和 PhysX 可提供 3D 碰撞检测以及针对可变形软体(如布料和绳索)的支持。 Android 上的多数 2D 游戏引擎(包括 Corona、LibGDX、GameMaker:Studio*、Gideros Studio 和 LWJGL)使用 Box2D;多数 3D 引擎使用 Bullet。 PhysX 专用于 NVIDIA;对于 Android 平台,它仅针对教育用途和非商业用途免费提供。 Unity 3D 和 DX Studio* 使用 PhysX。

Havok Project Anarchy*

Havok Project Anarchy* 是最近发布的一款游戏引擎,是移动游戏开发的全面工具套件。 它的许可支持您在 Android、Tizen* 和 iOS 平台上免费发布游戏。 它采用可扩展的 C++ 插件架构,包括 Havok 的视觉和物理引擎、动画和人工智能 (AI) 工具;灵活的资产管理系统;以及 Lua* 脚本编写和调试功能。 此外,SDK 中还可提供完整的游戏示例和丰富的课件。 Havok 要求开发人员成为营销合作伙伴,并使用 x86 工具进行编写,以便充分利用日益增长的采用英特尔处理器的 Android 平板电脑市场。 对于移动游戏开发人员而言,这是一款免费但专业的新选项。

Unity 3D

Unity 3D 是目前在 Android 市场上份额最大的 3D 游戏引擎。 它支持多种目标平台,包括 iOS、Windows 和游戏控制台。 Unity 3D 采用内置集成开发环境、PhysX 物理引擎、C#、JavaScript* 和 Boo 脚本语言;多层和网络支持;以及流传输资产。 此外,它还支持从多种创作工具中导入艺术资产(art asset)。 开发人员可以免费开始使用,但是如要在 Android 上发布则需要许可,而且许可费用是最高的。 Unity 3D 不支持采用英特尔 x86 处理器的 Android 设备,这限制了 Android 游戏市场采用 Unity 3D。

jPCT-AE

jPCT‑AE 引擎是一款易于习得且全部使用 Java 的 3D 应用编程接口 (API),它可为 Android 提供构建定制游戏引擎的基本功能。 它可免费用于个人和商业用途。 它支持 Autodesk 3ds Max 创作工具、骨骼动画、着色器、纹理压缩、碰撞检测、多种光照模式、透明度、烟雾和本地 x86 支持,可在采用英特尔处理器的 Android 平板电脑上提供更出色的性能。 它基于 LWJGL。

Gameplay

Gameplay 是一款免费、开源、跨平台的 C++ 3D 框架,旨在为台式机和移动游戏(包括 Android)的独立开发提供支持。 它包含一个全功能、基于节点的场景图形渲染系统,包括颗粒、Bullet 物理引擎、音频和用户界面 (UI) 系统等。 此外,它还包括适用于 Microsoft Visual Studio*、Xcode*、Eclipse* C/C++ 开发工具和 CMake 的解决方案和工作区。

Esenthel 引擎

该款面向 Windows、Linux、Mac* OS X*、iOS 和 Android 的基于 C++ 的现代化 2D 和 3D 游戏引擎支持脚本编写、多渲染器、动画系统、PhysX 和 Bullet 物理引擎以及流传输。 此外,它还包括地图编辑器 (world editor)、模型编辑器、数据浏览器和代码编辑器,并具备针对 Android 的原生 x86 支持,仅需单击一下,即可跨平台发布。 如果是非商业用途,Esenthel 引擎可无限次免费试用。

Linderdaum 引擎

Linderdaum 引擎是一款免费、开源、面向对象的 3D 游戏引擎,主要面向 Windows、Android 和 RIM BlackBerry* OS 10,使用 C++ 编写。 它是一款开发交互式 3D 应用的集成解决方案,包括游戏、工业和科学虚拟化。 此外,它还采用原生 x86 支持,可在采用英特尔处理器的 Android 平板电脑上提供更高的性能。

ShadingZen

ShadingZen 是一款免费的开源 2D 和 3D 游戏引擎,使用 Java 编写。 它专门针对采用 OpenGL ES 2.0 加速器且屏幕尺寸各异的 Android 移动设备而设计,采用流行的 Cocos2d 框架的设计,可轻松利用现代多核移动 CPU 来并行处理场景背后的任务。

Marmalade*

Marmalade* SDK 是一款使用广泛的跨平台 C++ SDK,支持大型游戏开发商用来开发新的 2D 和 3D Android 标题。 它支持多种移动平台使用 Visual Studio (适用于 Windows)或 Xcode (适用于 Mac OS X)。Marmalade SDK 支持使用 OpenGL ES ,但是对于构建 3D 游戏是一个相对较新的工具。 此外,该公司还提供了 Marmalade Quick,可使用 Cocos2d‑x 支持通过 Lua 脚本语言构建 2D 游戏;以及 Marmalade Juice,允许面向 Android 在 iOS 上以原生的方式重新编写 Objective‑C* 项目。 您可以在 30 天内免费评估这些工具,但是如要发布,则需要许可。 Marmalade SDK 还采用原生 x86 支持,可在采用英特尔处理器的 Android 平板电脑上提供更高的性能。

ShiVa3D

ShiVa3D 是一款 3D 游戏引擎、编辑器、创作工具、编译器和大型多人在线服务器,它可支持多种目标平台,包括 Android。 它包括高级着色系统、物理特性、平视显示器渲染、Lua 脚本编写、声音库 (sound library) 等。 ShiVa3D 采用单协议、免版税的定价结构,该结构可以覆盖 Marmalade SDK 支持的所有移动平台。

DX Studio*

DX Studio 是一款免费的 2D 和 3D 游戏引擎,它拥有一款自身的编辑器,专门用于 Windows(近期添加),并可提供对 Android 的支持。 它使用 PhysX 库来处理物理特性,并可通过几种常见的创作工具中导入内容。

SIO2 引擎

SIO2 是一款跨平台 2D 和 3D 游戏引擎,可在 Windows、Bada、webOS、iOS 和 Android 等多种平台上使用。 它包括 Lua 脚本支持、Bullet 物理特性、路径查找、声音 API、着色器、动画和网络支持。 SIO2 支持选择多种创作工具,包括多种导出插件选项。 可以使用免费的评估套件,但是如要发布,则需要许可。

Unigine*

Unigine* 是一款跨平台 3D 游戏引擎,适用于 Windows、Linux、Sony PlayStation* 3、Mac OS X、iOS 和 Android。 共有两个版本的 SDK 可用:一个适用于游戏,另一个适用于模拟、培训、实时视觉化和虚拟现实应用。 可以使用免费的评估套件来开发商业项目,但是如要发布,则需要许可。

LibGDX

最好的一款免费的开源 3D 解决方案是 LibGDX。 多数使用 Java,部分使用 C++,提供更高性能。 LibGDX 不区分 Windows、Linux 和 Android 平台,因此您可以在台式机 Windows 或 Linux* 电脑上随意开发,然后在 Android 设备上定义测试代码。 此外,LibGDX 还可使用支持 Mac OS X、iOS 和 Web 图形库的浏览器。 LibGDX 基于 LWJGL、OpenGL ES、FreeType、MPG123、Xiph、SoundTouch 音频处理库、Box2D、OpenAL 和 Kiss FFT。

轻型 Java* 游戏库

LWJGL 是一款免费的开源库,可用于在 Java 中开发商业质量的游戏。 它支持使用多种高性能、跨平台库,如 OpenGL ES、OpenCL™ 和 OpenAL,其中一些在 Java 平台上无法使用或较难部署。 LWJGL 支持使用 3D 声音开发 Android 游戏,并支持使用游戏板、方向盘和操纵杆等控制器。 许多以 Android 为目标的 2D 和 3D 游戏引擎使用该库,包括 jPCT‑AE 和 LibGDX。

jMonkeyEngine SDK

jMonkeyEngine 是一款免费的开源 3D 引擎,支持大胆的 Java 开发人员使用尖端技术创建 3D 游戏。 它包括用于地形塑造、影院、网络、输入、定制控制以及音频和视频的工具。 它支持 Windows、Linux、Mac OS X 和 Android 目标。 对于物理模拟,jMonkeyEngine 使用 jBullet(Bullet 物理库的 Java 端口)。jMonkeyEngine 的独特之处在于它与 Blender 创作工具紧密集成,从而构成一个完整的开源、免费 3D 游戏开发解决方案。

PowerVR* SDK

PowerVR SDK 可为多种平台(包括 Android)提供在 C++ 中构建定制游戏引擎的工具和库。 其中包括 PVRTexTool;对于采用 PowerVR GPU 的英特尔® 凌动™ 处理器,需要使用它将 2D 图像压缩成专用的 PVRTC 纹理格式。 此外,该 SDK 还包括 PVRGeoPOD 工具,可从多种常见的创作工具中导入内容,其中包括 Collada 以及全面的 OpenGL ES 示例程序教程。 该 SDK 为专用,但是您可以免费获得许可进行发布。 它作为 Android SDK 管理器的 Eclipse 插件提供。 按照 PowerVR 下载站点的步骤进行操作来安装 SDK。

表 1 展示了常见的 3D 游戏引擎和可用 SDK。

表 1. 3D 游戏引擎和 SDK

名称语言源代码成本英特尔® x86 支持示例
Havok Project Anarchy*C++免费本机教程
Unity* 3DC#、JavaScript*、Boo分级AirAttack HD Lite
LibGDXC++ 和 Java*免费可移植
jPCT-AEJava免费本机将宣传单 3D 化
GameplayC++免费可移植示例
Esenthel 引擎C++分级本机示例
Linderdaum 引擎C++免费本机示例
ShadingZenJava免费可移植儿童游戏: 3D 立方体
Marmalade* SDKC++ 和 Lua*分级本机高尔夫 3D 游戏
ShiVa3DC++ 和 Lua分级可移植展示
DX Studio*C++免费可移植图片库
SIO2 引擎C/C++ 和 Lua分级可移植教程
UnigineC++分级可移植Oil Rush
轻型 Java 游戏库Java免费可移植Space Invaders
jMonkeyEngineJava免费可移植展示
Imagination Technologies PowerVR* 软件开发套件C++免费可移植

 

结论

最近推出丰富的 2D 和 3D 游戏引擎资产、创作工具和中间件解决方案,以加速开发新应用,满足新一代 Android 平板电脑的大尺寸、高清显示器和 OpenGL ES 2.0 加速特性。 您可以采用这些软件解决方案,从多种语言、许可和成本选项中选择合适选项,以简化大部分 Android 平台的复杂性并提供视觉效果更逼真的用户体验,让您的应用脱颖而出。

更多信息

关于作者

Clay D. Montgomery 是嵌入式系统 OpenGL 驱动程序和应用领域首屈一指的开发人员。 他曾在 STB Systems、VLSI Technology、Philips Semiconductors、Nokia、Texas Instruments、AMX 等公司担任过图形加速器硬件、图形驱动程序、API 和跨多平台 OpenGL 应用的设计师,也曾担任过独立咨询师。 他曾参与开发第一代面向 Freescale i.MX 和 TI OMAP 平台的 OpenGL ES、OpenVG* 和 SVG 驱动程序和应用,以及 Vivante、AMD 和 PowerVR 核心。 他曾在嵌入式 Linux 上开发过 OpenGL ES 并开办过关于该内容的研讨会,并曾代理过 Khronos Group 的多家公司。

为基于英特尔® 架构的 Android* 平板电脑开发移动游戏显卡 — 第一部分

$
0
0

作者: Clay Montgomery

面向移动设备的游戏和其他密集型应用的市场正在爆炸式增长,而且一些重要的新发展也在不断加速该发展。 随着硬件、软件和生态系统不断进步,Android* 游戏开发人员正在面临前所未有的机遇。 但是,应该从哪里开始? 在第一部分(共两部分),我将介绍游戏引擎、显卡软件开发套件 (SDK) 和其他中间件的最新成就,它们能够帮助您在 Android 系统上快速部署游戏或显卡密集型应用,提供更加丰富、吸引人的用户体验,并能够使用平板电脑采用的所有新像素。

第一部分介绍了游戏引擎和中间件的基本概念和类别,以便帮助您缩小选择范围,包括对 SDK 和 Android 原生开发套件 (NDK) 的开发进行比较。 第二部分将详细介绍具体游戏引擎和中间件的优劣势,这些引擎和中间件是 Android 平板电脑 2D 和 3D 显卡开发的绝佳选择,其中可能包括您闻所未闻的出色特性。 它们是开发游戏的宝贵软件,但是我更关注适用于 Android 平板电脑的解决方案。

更出色的硬件

新一代采用英特尔® 凌动™ 处理器的基于 Android 的平板电脑可提供突破性性能。 它具备更长的电池续航时间以及尺寸更大的高分辨率显示器,让许多用户和应用毫不犹豫地选择这些设备来替换运行 Windows* 的笔记本电脑。 此外,它还采用了出色的图形处理单元 (GPU) ,能够提升一百万甚至更高的像素,其中英特尔平台(代号 Clovertrail)上集成的 SGX544MP2 GPU 便具备卓越的性能。 在代号为 Bay Trail 的英特尔全新平台上,提供了英特尔高清显卡 GPU,从而可支持 OpenGL ES 3.1。  您可能不知道,目前超过 99% 的 Android 设备内置了 OpenGL ES* 2.0 应用编程界面 (API) 来加速 GPU。但是软件的情况如何呢? Android 还采用了专门针对手机而设计的图形用户界面 (GUI),大部分的移动游戏与 10-15 年前的控制台游戏类似。 能够很好地利用新像素的游戏将会脱颖而出。 这是机遇,也是挑战。 要想取得成功,需要利用最新的软件中间件和工具。

更出色的软件

大尺寸、高分辨率的显示器需要更出色的显卡。 不对软件进行改进,以前 4 英寸手机上的画面将不适合 8 英寸的平板电脑。 您需要利用所有的可用像素,以提供视觉效果更逼真的用户体验。 例如,仅通过使用借助动画或光效渲染的图像来取代固定颜色和渐变色即可显著改进 UI 的外观。 幸运地是,近来许多显卡 SDK、游戏引擎和其他中间件移植到 Android,这能够很好地改进;但是我们有多种选项可以选择,需要确定哪种选项较为重要。 这一决定非常关键,因为任何中间件都需要我们后续花费时间进行了解,并将直接影响应用的外观和性能。 因此在本文中,我希望帮助您缩小选择范围,至少详细介绍一些您之前从未考虑过的选项。 但是首先我们先来定义一些重要的数据和中间件种类。

Android* 显卡 API

目前大多数应用广泛采用的 Android 构建了两种显卡 API :Canvas API 和 OpenGL ES。 Canvas API 是初始 Android 框架的组件,且仅限于在 2D(虽然支持某些 3D 效果)和 Java* 技术中使用。 Android 最初也提供了 OpenGL ES 支持,但是自 Froyo 版本其已逐渐改进,在 Android NDK 中添加了 OpenGL ES 2.0 和面向 C/C++ 的支持。 Ice Cream Sandwich 版本对 Android 内置显卡系统进行了较大改动,现在它主要依赖于 OpenGL ES 2.0,因为超过 99% 的 Android 设备都使用了内置 GPU 进行加速。 而且 Canvas API 也进行了改进,以使用 OpenGL ES 加速。 除了 Canvas API 以外,开发人员现在可以选择通过 Java、本地 C/C++ 使用 OpenGL ES 1.1 和/或 2.0。

SDK 和 Android NDK

Android 框架 SDK 要求在 Java 中开发应用,但是面向 C/C++ 的 NDK 也可以使用。 当然,您可以通过 Java 本地接口一起使用 Java 和 C/C++。 因为大部分 Android 平台的功能仅可通过 SDK 使用,Google 建议尽可能在 Java 中部署代码,但是开发人员更倾向于通过 NDK 使用 C/C++ 在 Android 上部署显卡密集型应用。 这种混合设计的部署可能不是最简单的,但是如果您想要使用某些最佳中间件并获取最佳性能,它却是最有必要的。 一些中间件选项仅可在 C/C++ 中使用,这也是为什么 Google 决定向应用开发人员开放 NDK 的原因 — 使用目前面向 OpenGL* 软件的大型池 — 这通常位于 C/C++ 中。 目前也可使用全部使用 Java 的选项。 这些选项中有一些旨在提供原生代码性能,同时支持您仍然完全在 Java 中进行开发。

英特尔® 凌动™ 处理器

英特尔凌动处理器可在 Android 上提供出色的 Canvas 和 OpenGL ES API 支持以及 OpenGL ES 加速,并可提供高于其他类型的处理器的浮点运算速度。 英特尔的软件支持包括面向 Android 虚拟设备模拟的 x86 系统映像,英特尔® 硬件加速执行管理器和英特尔® 图形性能分析器。 借助这些工具,您可以更快、更轻松地为基于英特尔凌动处理器的 Android 平板电脑开发应用,甚至不需要基于英特尔凌动处理器的硬件便可开始。

创作工具

如果您使用的是 OpenGL,则肯定见过介绍如何绘制三角形或有纹理的正方体的书籍和 web 教程。 但是,如何处理更复杂的形状呢? 以编程的方式构造复杂的几何图形非常麻烦;所幸,我们能够使用更简单的方法:创作工具。 专业游戏开发人员使用诸如 Autodesk 3ds Max*、Autodesk Maya* 或 Blender 等工具来构建 3D 几何图形,以及纹理地图和带有物理特性和光照效果的动画。

一些游戏引擎和 SDK 可提供紧密集成的(尤其是针对 2D 开发)特定创作工具或集成开发环境 (IDE)。 一般而言,3D 引擎支持主要的独立工具,并使用插件提供更紧密的集成,因为这种方式更能满足游戏开发人员的需求。 本文将不对创作工具一一赘述,但是开发人员应了解现代显卡内容的创建应从这里开始,而且这些工具比以往的访问更轻松,学习更简单且使用更普遍。 这些工具的费用相差甚远。 例如,Blender 是一款免费的开源软件;您可以在网上找到数百个视频教程来学习如何使用。 您使用这些工具创建的内容可导出为多种类型的文件格式,以便游戏引擎用来在 Android 设备上渲染显卡。

多数游戏引擎和其他中间件将认为您正在使用创作工具在包含动画和光照效果的 3D 场景中创建几何图形。 这些工具在工作站上运行来生成内容,然后被复制到 Android 设备或通过游戏引擎或其他中间件进行渲染。 因此,您选择的创作工具将决定可以使用的游戏引擎或中间件(虽然大部分中间件可支持多个创作工具)。

您可能认为,如果几何图形简单您便不需要创作工具或游戏引擎。 比如,您只需要对界面周围围绕的一些矩形进行动画处理。 只需要使用代码便可以实现,对吗? 您是否希望它们按照模拟惯性来移动呢? 摩擦或重力效果呢? 检测它们何时发生碰撞? 创作工具可为旋转和缩放创建关键帧动画,并将这些物理效果进行应用。 在这些矩形的一些 2D 图像上添加反射和高光效果呢? 创作工具还可自动生成纹理坐标和曲面正常 (surface-normal) 的数据,以便 OpenGL ES 用以使用光照效果对几何图形进行渲染。 游戏引擎从创作工具中导入该数据,对其进行渲染,检测碰撞并处理音频、触摸输入事件等。 因此,创作工具对于现代应用开发非常重要。

2D 游戏引擎

为何将 2D Canvas API 构建到 Android 中时需要使用 2D 游戏引擎?...因为游戏引擎能够提供更出色的显卡性能,而且多数引擎是直接在 OpenGL ES 上构建,并未使用 Android Canvas API。 虽然 Canvas API 也使用了 OpenGL ES,但是它的性能远远比不上直接加速的游戏引擎。 Android 上的这些 2D 引擎,许多都相当成熟。 事实上,许多所发布的标题 (title) 和集成功能可以节约大量的开发时间,包括 3D 音频、网络和物理特性。 在 Android 上进行测试之前,一些特性还会使用紧密集成的创作工具或 IDE 和模拟器在工作站上对您的游戏进行测试和调试,这也可以加速开发周期。 最后,游戏引擎还提供了平台抽象,以便您轻松地将游戏移植和发布到其他平台上。

游戏引擎的许可和价位差距较大。 一些 2D 引擎是完全免费的开源工具(Cocos2D 和 AndEngine),但是该支持仅限于某些在线论坛。 其他采用分层定价模式,您可以免费启动开发流程,然后当需要更多技术支持、高级功能或准备发布游戏时,便需要支付订阅费或会员费。 如果您能够容忍一些工具的标识充斥着屏幕或功能受限,则可以免费发布您的游戏。 一般而言,您想要用来发布游戏的平台越多,需要的技术支持越多,则订阅费用则越高。 表 1 展示了常见的 2D 游戏引擎和可用 SDK。

表 1. 2D 游戏引擎和 SDK

名称语言源代码成本英特尔® x86 支持示例
Cocos2DC++免费可移植Cows vs Aliens
Corona SDKC++ 和 Lua*分级可移植Walkabout
GameMaker:Studio*Delphi 和 GML分级本机Lazy Mouse
AndEngineC++ 和 Java*免费本机Bunny Shooter
Gideros StudioLua分级Mashballs
应用游戏套件BASIC 和 C++分级Black Holes
OrxC/C++免费可移植重力
PlayNJava免费Tupsu

 

结论

采用英特尔凌动处理器、大尺寸的高清显示器和 OpenGL ES 2.0 加速的新一代基于 Android 的平板电脑为应用开发人员开发设备提供了绝佳的机遇,因为它支持使用近期新增的 2D 和 3D 游戏资源、创作工具和中间件,在 Android 上提供了更具视觉吸引力的用户体验。 充分借助这些新型的中间件和创作工具解决方案,游戏和其他以该款新硬件为目标的应用将脱颖而出。

本系列的第二部分将具体介绍最适合 Android 平板电脑的 3D 游戏引擎和中间件解决方案,包括免费软件、开源软件和专有软件。 此外,我们还将介绍哪些解决方案拥有适用于 x86 英特尔处理器的本地支持。

更多信息

关于作者

Clay D. Montgomery 是嵌入式系统 OpenGL 驱动程序和应用领域首屈一指的开发人员。 他曾在 STB Systems、VLSI Technology、Philips Semiconductors、Nokia、Texas Instruments、AMX 等公司担任过图形加速器硬件、图形驱动程序、API 和跨多平台 OpenGL 应用的设计师,也曾担任过独立咨询师。 他曾参与开发第一代面向 Freescale i.MX 和 TI OMAP 平台的 OpenGL ES、OpenVG 和 SVG 驱动程序和应用,以及 Vivante、AMD 和 PowerVR 核心。 他曾在嵌入式 Linux 上开发过 OpenGL * ES 并开办过关于该内容的研讨会,并曾代理过 Khronos Group 的多家公司。

英特尔® System Studio 2015 支持矩阵

$
0
0

如果您希望对英特尔® System Studio 2015 组件有更多了解,请向 intelsystemstudio@intel.com 发送电子邮件。

以下是英特尔系统 Studio 2014 支持矩阵的链接。


英特尔® C++ 编译器

主机操作系统:
Linux*

目标操作系统
Yocto Project* 1.4 至 1.6
Tizen* IVI 2.x 至 3.x
WindRiver Linux* 4.0 至 6.0
WindRiver Linux* 4.0 和 5.0 Native
CE Linux* PR35
Android* 4.1.x 至 4.4.x (Android* NDK R9a、R9b、R9c、R9d、R10)

目标平台:
采用 Yocto Project* 1.6 或 WindRiver Linux* 6.0 的英特尔® Quark SoC
采用 Yocto Project* 1.6 的英特尔® Edison 模块

采用 Yocto Project* 或 WindRiver Linux* 的英特尔® 凌动™ 处理器 Z5xx、Z6xx、E6xx、Z3xxx、C2xxx、N2xxx、E38xx、
Intel® E38xx with Tizen*
英特尔® 凌动™ 处理器 CE4100、CE4200、CE5200,采用 CE Linux* PR35 的英特尔® Puma6 媒体网关
英特尔® 酷睿™ 处理器(除面向 CE Linux* PR35 系统的型号)
英特尔® 至强™ 处理器(除面向 CE Linux* PR35 系统的型号)
采用 Android* 的英特尔® 凌动™ 处理器 Z2xxx 和 Z38xx
 

Eclipse* 集成: 支持 Linux*、Android* 访问相关特定信息文档


英特尔® C++ 编译器

主机操作系统:
Windows*

目标操作系统
Windows* 7、8、8.1(注释:对于 Windows 目标构建,主机和目标相同)

Tizen* IVI 2.x 至 3.x
WindRiver Linux* 4.0 至 6.0
Android* 4.1 至 4.4.x(Android* NDK R9a、R9b、R9c、R9d、R10)

目标平台:
采用 Yocto Project* 1.5 或 WindRiver Linux* 6.0 的英特尔® Quark SoC
采用 Yocto Project* 1.6 的英特尔® Edison 模块

采用 Yocto Project* 或 WindRiver Linux* 的英特尔® 凌动™ 处理器 Z5xx、Z6xx、E6xx、Z3xxx、C2xxx、N2xxx、E38xx
英特尔® 酷睿™ 处理器
英特尔® 至强™ 处理器
采用 Android* 的英特尔® 凌动™ 处理器 Z2xxx 和 Z38xx

Eclipse* 集成:  支持;访问针对 Android* 的文档


英特尔® 系统调试器

主机操作系统:
Linux* 和 Windows*
(Linux* 主机上没有 UEFI 和 EDK2 调试)

目标操作系统
Yocto Project* 1.4 至 1.6
Tizen* IVI 2.x 至 3.x
WindRiver Linux* 4.0 至 6.0
WindRiver Linux* 4.0 和 5.0 Native
CE Linux* PR35
Android* 4.1 至 4.4.x

目标平台:
关于闪存编程信息,请向 intelsystemstudio@intel.com 发送电子邮件

采用 Yocto Project* 1.6 或 WindRiver Linux* 5.0 的英特尔® Quark SoC — 与 Olimex* ARM-USB-OCD-H、TinCanTools* FLYSWATTER2 (OpenOCD*) 或 ITP-XDP 3BR (采用 XDP 至 10Pin JTAG 适配器)兼容
英特尔® 凌动™ 处理器 Z5xx、Z6xx、E6xx、Z3xxx、C2xxx、N2xxx、Z2xxx、E38xx
英特尔® 凌动™ 处理器 CE4100、CE4200、CE5200、英特尔® Puma6™ 媒体网关
英特尔®第三代酷睿™ 处理器
英特尔® 第四代酷睿™ 处理器
英特尔® 第五代 酷睿™ M 处理器

英特尔® 第四代至强™ 处理器

Eclipse* 集成: 面向 Eclipse* 3.8 至 4.4 轻度集成


Software Visible Event Nexus 技术 (SVEN)

主机操作系统:
Linux* 和 Windows*

目标操作系统
Yocto Project* 1.4 至 1.6
Tizen* IVI 2.x 至 3.x
WindRiver Linux* 4.0 至 6.0
WindRiver Linux* 4.0 和 5.0 Native
CE Linux* PR35
Android* 4.1 至 4.4.x

目标平台:
采用 Yocto Project* 1.6 或 WindRiver Linux* 5.0 的英特尔® Quark SoC
英特尔® 凌动™ 处理器 Z5xx、Z6xx、E6xx、Z3xxx、C2xxx、N2xxx、Z2xxx、E38xx
英特尔® 凌动™ 处理器 CE4100、CE4200、CE5200、英特尔® Puma6 媒体网关
英特尔® 酷睿™ 处理器
英特尔® 至强™ 处理器

Eclipse* 集成:  支持;用于跟踪查看器


GNU GDB* 调试器

针对以下系统的与构建 GDB 服务器: 面向 IA32 的 Android 4.4、CE Linux PR35、Tizen IVI、WindRiver Linux 4 至 7、 Yocto 1.4 至 1.7。 对于 Intel64 系统,WindRiver Linux 5 上能够使用预构建 GDB 服务器。

主机操作系统:
Linux*、Windows*

目标操作系统
Yocto Project* 1.4 至 1.7
Tizen* IVI 2.x 至 3.x
WindRiver Linux* 4.0 至 6.0
WindRiver Linux* 4.0 和 5.0 Native
CE Linux* PR35
Android* 4.0.x 至 4.4.x

目标平台:
采用 Yocto Project* 1.5 或 WindRiver Linux* 5.0 的英特尔® Quark SoC
采用 Yocto Project* 1.6 的英特尔® Edison 模块

英特尔® 凌动™ 处理器 Z5xx、Z6xx、E6xx、Z3xxx、C2xxx、N2xxx、Z2xxx、E38xx
英特尔® 凌动™ 处理器 CE4100、CE4200、CE5200
英特尔® Puma6 媒体网关
英特尔® 酷睿™ 处理器
英特尔® 至强™ 处理器

Eclipse* 集成:  支持


适用于系统的英特尔® VTune™ Amplifier

主机操作系统:
Linux*

目标操作系统
Yocto Project* 1.4 至 1.6
Tizen* IVI 2.x 至 3.x
WindRiver Linux* 4.0 至 6.0
WindRiver Linux* 4.0 和 5.0 Native
CE Linux* PR35

目标平台:
英特尔® 凌动™ 处理器 Z5xx、Z6xx、E6xx、Z3xxx、C2xxx、N2xxx、Z2xxx、E38xx
英特尔® 凌动™ 处理器 CE4100、CE4200、CE5200、英特尔® Puma6 媒体网关
英特尔® 酷睿™ 处理器
英特尔® 至强™ 处理器

Eclipse* 集成:  不支持


英特尔® Energy Profiler

主机操作系统:
Linux*、Windows*

目标操作系统
Windows* 7、8、8.1

Android* 4.1.x 至 4.4.x

目标平台:
对于 Android - 英特尔® 凌动™ 处理器 Z34XX、Z36XX、Z37XX

对于 Windows* - 英特尔® 凌动™ 处理器 Z34XX、Z36XX、Z37XX、 英特尔® 第四代酷睿™ 处理器

Eclipse* 集成:  不支持


英特尔® Energy Profiler

主机操作系统:
Linux* 和 Windows*

目标操作系统
Yocto Project* 1.2 至 1.5
Tizen* IVI 2.x 至 3.x
WindRiver Linux* 4.0 至 6.0
WindRiver Linux* 4.0 和 5.0 Native
CE Linux* PR35

 

目标平台:
英特尔® 凌动™ 处理器 Z5xx、Z6xx、E6xx、Z3xxx、C2xxx、N2xxx、Z2xxx、E3xxx
英特尔® 凌动™ 处理器 CE4100、CE4200、CE5200、英特尔® Puma6 媒体网关
英特尔® 酷睿™ 处理器
英特尔® 至强™ 处理器

 

Eclipse* 集成:  不支持


英特尔® 数学核心函数库

主机操作系统:
Linux* 和 Windows*

目标操作系统
Yocto Project* 1.2 至 1.5
Tizen* IVI 2.x 至 3.x
WindRiver Linux* 4.0 至 6.0
WindRiver Linux* 4.0 和 5.0 Native
CE Linux* PR35

目标平台:
英特尔® 凌动™ 处理器 Z5xx、Z6xx、E6xx、Z3xxx、C2xxx、N2xxx、Z2xxx、E3xxx
英特尔® 凌动™ 处理器 CE4100、CE4200、CE5200、英特尔® Puma6 媒体网关
英特尔® 酷睿™ 处理器
英特尔® 至强™ 处理器

Eclipse* 集成:支持


英特尔® 集成性能基元

主机操作系统:
Linux* 和 Windows*

目标操作系统
Yocto Project* 1.2 至 1.5
Tizen* IVI 2.x 至 3.x
WindRiver Linux* 4.0 至 6.0
WindRiver Linux* 4.0 和 5.0 Native
CE Linux* PR35
Android* 4.3 至 4.4.x

目标平台:
英特尔® 凌动™ 处理器 Z5xx、Z6xx、E6xx、Z3xxx、C2xxx、N2xxx、Z2xxx、E3xxx
英特尔® 凌动™ 处理器 CE4100、CE4200、CE5200、英特尔® Puma6 媒体网关
英特尔® 酷睿™ 处理器
英特尔® 至强™ 处理器

Eclipse* 集成:支持


英特尔® 系统分析器、帧分析器和平台分析器

主机操作系统:
Linux* 和 Windows*

目标操作系统:
Android* 4.3 至 4.4.x

目标平台:
英特尔® 酷睿™ 处理器
英特尔® 凌动™ 处理器 Z2xxx、Z3xxx

Eclipse* 集成:不支持

 

为基于英特尔架构的设备创建 Android 平板电脑应用

$
0
0

下载 PDF

英特尔在迅速发展的 Android 手机和平板电脑市场上占据更多的设计优势;许多开发人员希望为该市场创建应用。 在本篇博客中,我将介绍如何为采用英特尔® 凌动™ 处理器 Z2560 的三星 Galaxy Tab 3 10.1 创建简单的应用,并提供一些 Android 平板电脑示例代码。

安装开发工具

首先,确保安装了以下软件工具的最新版本:

  • Eclipse* IDE
  • 面向 Eclipse 的 ADT 插件
  • JDK 和 JRE
  • Android SDK

安装 Eclipse* IDE

非常简单。 点击官方网站的下载部分: https://www.eclipse.org/downloads,下载经典版本。 然后将文件解压到开发系统的适当文件夹下。

安装面向 Eclipse 的 ADT 插件

运行 Eclipse。 在对话框中,通过菜单Help → Install new software来安装插件。

打开窗口,输入插件的下载地址: https://dl-ssl.google.com/android/eclipse/(如果失败,可使用以下链接手动下载并安装该插件: http://developer.android.com/sdk/eclipse-adt.html)。 表格中将显示“Developer Tools”。 点击“Developer Tools”旁边的方框,然后点击“下一步”。 成功安装后,我建议重启 Eclipse 环境。

设置 Java* 环境

如果您尚未安装 Java 开发套件 (JDK) 和 Java 运行时环境 (JRE),则需要进行安装。 从该 Oracle 网页下载并安装 JDK 和 JRE。

安装 Android SDK

最后一步是下载并安装最新版 Android SDK。 这可通过面向 Android 开发人员的网站来完成。 然后,添加平台和其他 SDK 元素。 我建议您添加所有可用元素。

安装完所有必需的工具后,您则可创建第一个应用。 接下来的部分将会介绍一个平板电脑应用示例。

创建面向 Android 的平板电脑应用

我们来为采用英特尔凌动处理器 Z2560 的三星 Galaxy Tab 3 10.1 创建一个示例应用。

  1. 首先,运行 Eclipse 并在列表中选择 File | New | Project…。 选择 Android | Android Application Project并按“下一步”按钮。
  2. 在名为“Setup Wizard New Android App”的对话框内,将您的信息输入以下文本字段:
    • Application name - 应用的描述性名称,如 “MyApp”。
    • Project Name - 输入项目名称,如 “MyProject”。
    • Package Name - 输入唯一的数据包名称,如 “ru.egorfilimonov.helloworld”。
    • Minimum Required SDK - 选择最低支持平台。 在目标 SDK 平台上,选择您将要在其中编写程序的值。 如愿意,可以保留默认值。
    • Compile With - 默认值是最新版 Android。 我们没必要对其进行更改。
    • Theme - 从标准主题列表中为您的应用选择一个主题,或保持不变。
  3. 填写完所有字段后,点击“下一步”按钮。
  4. Create custom launcher图示框保持勾选状态,以便使用自己的程序图示。
  5. 同样让 Create activity box保持勾选状态。
  6. 请勿勾选 Mark this project as library框,因为您不需要创建库。
  7. Create Project in Workspace box保持勾选状态,以便将您的全部项目存储在特定文件夹中: C:\Users\UserName\workspace
  8. 完成这些设置后,请点击 “下一步”按钮。 此处,我们需要选择应用界面的外观。 多数以 Android 为目标的应用都包含一个名为 Create Activity的界面,它采用“项目向导”,可提供多种模板,帮助您创建应用:
    • Blank Activity
    • Fullscreen Activity
    • Master / Detail Flow
  9. Master / Detail Flow模板专门针对平板电脑应用而设计。 请选择该模板。

点击 “完成”按钮。 现在,我们将创建新项目。

创建项目

Hello, World!”程序已构建到所有新项目中,因此您无需再进行编写。 您只需要启动该项目,便可以使用该程序! 展开 src文件夹和 ru.<…>.helloworld子文件夹(您软件包的名称),查看MainActivity.java文件。 双击文件,在代码编辑器中打开它。 IDE 已经生成了 MainActivity.java文件所必需的基本代码。 甚至,通过工具栏,您能够更轻松地打开文件,该工具栏位于表格中。 找到 MainActivity按钮,选择 Open MainActivity

请见以下代码:

package ru.<…>.helloworld; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.os.Build; public class MainActivity extends ActionBarActivity { @ Override protected void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager (). beginTransaction () . Add (R.id.container, new PlaceholderFragment ()). Commit (); } } @ Override public boolean onCreateOptionsMenu (Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater (). inflate (R.menu.main, menu); return true; } @ Override public boolean onOptionsItemSelected (MenuItem item) { // Handle action bar item clicks here. The action bar will // Automatically handle clicks on the Home / Up button, so long // As you specify a parent activity in AndroidManifest.xml. int id = item.getItemId (); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected (item); } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { public PlaceholderFragment () { } @ Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate (R.layout.fragment_main, container, false); return rootView; } } } 

该文件的 MainActivity 类名称与 Java 文件一致(该规则建立了语言 Java)。 第一行是数据包名称 (Package Name)。 接下来的几行用于为项目导入所需的类。 如果警告图示出现在类名称的左侧,请阅读将鼠标放置在名称上时弹出的消息。 例如,如果出现一个黄色三角形和一个叹号,并显示“无法使用该类”的消息,则您可以删除多余的行。

然后是对从抽象类 ActionBarActivity继承(延伸)而来的类进行声明。 在该类中,我们将看到 onCreate ()方法。 当应用创建并显示标记活动时将会调用该方法。 我们来检查以下方法的代码。

super.onCreate (savedInstanceState) 行是执行活动所需的操作的母类。 您没有必须改动本行,保持其不变。

第二行 setContentView (R.layout.activity_main)更有趣。 setContentView (int)方法可连接标记文件的内容。 在参数中,我们从 res/layout/文件夹中指定了不包含扩展名的文件名称。 默认情况下,它将创建名为 activity_main.xml的项目文件。

此外,还有一个动态加载段。

if (savedInstanceState == null) { getSupportFragmentManager (). beginTransaction () . Add (R.id.container, new PlaceholderFragment ()). Commit (); }

完成 onCreate () 方法之后,onCreateOptionsMenu ()onOptionsItemSelected () 方法将关联到处理菜单中。

最后,内部静态类端的结束处是 PlaceholderFragment

现在,我已经为您展示了为基于英特尔处理器的平板电脑创建 Android 应用的工具和步骤,希望您也能感受到它的趣味性和简单性。 这是一个简单的介绍,如果要了解更多信息,请查看以下资源:

http://developer.android.com/samples/index.html

http://code.tutsplus.com/tutorials/android-sdk-samples--mobile-20901

关于作者

Egor Filimonov 任职于英特尔公司的软件和服务事业部。 他就读于位于俄罗斯诺夫哥罗德 Lobachevsky 州立大学的力学和数学专业。 他的专长是应用数学和信息学。 Egor 的主要兴趣是高性能计算 (HPC) 和移动技术。

 

英特尔、Intel 标识、凌动是英特尔公司在美国和/或其他国家(地区)的商标。
英特尔公司 © 2014 年版权所有。 所有权保留。
*其他的名称和品牌可能是其他所有者的资产。

英特尔® 软件开发工具产品列表

$
0
0

英特尔对我们的软件开发产品提供若干许可选项。 查看下面的选项以购买或续订英特尔® 软件或下载免费的 30 天评估版本1。 您可以使用产品支持续订/升级选项页面来针对您的产品决定续订和升级选项。

下面列出的所有价格均为命名用户许可。 所有价格均为制造商建议零售价格(MSRP),如有变更,恕不另行通知。 所有价格均不包含增值税 (VAT) 或任何其它州税或本地税或收费。

英特尔® Parallel Studio XE

英特尔® Parallel Studio XE 2015

借助此综合的并行软件开发套件更快地创建更快的代码

英特尔® Parallel Studio XE 已简化为三个版本:Composer、Professional 和 Cluster。  了解更多信息。

 试用购买续订
Composer 版
构建工具包括编译器、库和并行模型 以 C++、Fortran 或者两种编译器结合的形式提供。
下载$699 起$499** 起
专业版
Composer 版加上设计、调试和调优工具 以 C++、Fortran 或者两种编译器结合的形式提供。
下载$1,599 起$599** 起
Cluster 版
Professional 版加上 MPI 构建、调试和调优工具。 以 C++ 和 Fortran 两种编译器结合的形式提供。
下载$2,949$1,049**

英特尔® System Studio

英特尔® System Studio

嵌入式和移动式计算

 试用购买续订
Composer 版
 IDE 集成便于快速投入开发,结合业界领先的编译器和库用于代码开发和优化。
下载$699$249
Professional 版
 Composer 版的所有内容,加上先进的系统芯片 (SoC) 电源、性能及鉴别差距的能耗概要分析,以及以较少能耗实现优异性能的分析器。
下载$1,649$599
Ultimate 版
Professional 版的所有内容,加上 SoC JTAG 和 EFI 代理关联的调试器,用于系统深度探索及硬件协助的调试和跟踪。
下载$2,399$849

英特尔® Integrated Native Developer Experience(英特尔® INDE/英特尔® 集成原生开发人员体验)

英特尔® Integrated Native Developer Experience(英特尔® INDE/英特尔® 集成原生开发人员体验)

一个跨平台的原生开发人员工具套件。

英特尔® INDE 有三个版本:精简版,专业版和旗舰版。

 试用购买续订
精简版
 免费版本,包括Media SDK 和插件,系统和图形框架分析,OpenCL* 代码生成器,以及对来自安卓* NDK 的 GCC 编译器的访问。
下载
专业版
包括精简版的全部内容,加上音频,平台分析和调试工具。
 $299$99
旗舰版
包括专业版的全部内容,加上领先的 C++ 编译器和线程工具。
下载$799$299

独立产品

产品试用购买续订
性能分析器
英特尔® VTune™ 放大器 XE下载$899$349**
性能库
英特尔® MPI Library 下载$499$179**
Rogue Wave* IMSL* Fortran Numerical Library 7.0***$999$499
特种编译器
英特尔® C++ Compiler Professional Edition(用于 QNX Neutrino* RTOS 支持)$599$240
英特尔® C Compiler for EFI Byte Code(用于 EFI 字节码的英特尔® C 编译器)$995$398
视觉计算工具
图形性能分析器英特尔® INDE 的新特性
英特尔® SDK for OpenCL™ 应用下载
英特尔® Media SDK 英特尔® INDE 的新特性
英特尔® Media Server Studio下载$499
英特尔® Integrated Native Developer Experience 2015 Build Edition(适用 OS X*)下载$499
用于 Windows 的英特尔® 实感™ SDK下载
英特尔® Integrated Native Developer Experience RAW Media Accelerator(英特尔® INDE/英特尔® 集成原生开发人员体验 RAW 媒体加速器)英特尔® INDE 的新特性
英特尔® Video Pro Analyzer下载$4,999
Web 应用
英特尔® XDK下载

英特尔® 软件开发产品 30 天评估版供免费下载。 在评估期内您可以获得免费支持,您只需在申请评估许可之后创建一个英特尔® 卓越支持帐户或访问 英特尔® 开发人员专区论坛即可。

请注意,评估期结束后,产品将无法使用,且评估许可不可续订。
请查看您希望评估的产品的系统要求

**如果您在当前订购过期之前续订,便可享受最低价格。 有关续订的更多信息,请点击此处

***作为任何 Windows Fortran* 套件的插件提供,或与 Composer 版的一个版本捆绑。

英特尔尊重您的隐私。 有关您的个人信息及英特尔产品序列号和其它信息的收集和处理,请参阅英特尔的隐私声明序列号验证声明。

2014 Intel Cup National Collegiate Software Innovation Contest Winners

$
0
0

回到英特尔学术社区首页 >>

第七届“英特尔杯”全国大学生软件创新大赛暨移动应用开发大赛获奖作品

第七届"英特尔杯"全国大学生软件创新大赛总决赛合影(下载高清版本

决赛精彩视频


观看视频

   

获奖作品展示

• 第七届英特尔杯全国大学生软件创新大赛 — 特等奖(1名)

参赛学校:中南大学
团队名称:芒果团队
项目名称:手绘心语

项目文档观看视频


• 第七届英特尔杯全国大学生软件创新大赛 — 一等奖(3名)

参赛学校:东南大学
团队名称:Smart Dolphin团队
项目名称:Project Dolphin

项目文档观看视频

参赛学校:中南大学
团队名称:Coffee团队
项目名称:YourCake-专属蛋糕

项目文档观看视频

参赛学校:北京邮电大学
团队名称:iConfid团队
项目名称:皮影戏俱乐部

项目文档观看视频

 

• 第七届英特尔杯全国大学生软件创新大赛 — 二等奖(6名)

参赛学校:山东大学
团队名称:HillSideWatchers团队
项目名称:Econtacts

项目文档观看视频

参赛学校:上海交通大学
团队名称:天宇杰团队
项目名称:数字·皮影

项目文档观看视频

参赛学校:山东大学
团队名称:Innovate团队
项目名称:3D虚拟旅游

项目文档观看视频

参赛学校:浙江工业大学
团队名称:Seeker团队
项目名称:Crazy Marbles

项目文档观看视频

参赛学校:厦门大学
团队名称:Melon_Studio团队
项目名称:U-Media

项目文档观看视频

参赛学校:东南大学
团队名称:ChargeBaby团队
项目名称:Nebula

项目文档观看视频

 

• 第七届英特尔杯全国大学生软件创新大赛 — 三等奖(9名)

参赛学校:上海交通大学
团队名称:萝卜加油
项目名称:RoboNote萝卜记事

项目文档观看视频

参赛学校:山东大学
团队名称:随意硬盘团队
项目名称:盲人的智能帽

项目文档观看视频

参赛学校:山东大学
团队名称:Fire团队
项目名称:快便当

项目文档观看视频

参赛学校:浙江工业大学
团队名称:ASCII联合工作室
项目名称:Health Manager
                 System

项目文档观看视频

参赛学校:厦门大学
团队名称:Magic Hand团队
项目名称:Magic


项目文档观看视频

参赛学校:东南大学
团队名称:你有我有全都有嘿
                  团队
项目名称:RUNNING MAN

项目文档观看视频

参赛学校:浙江工业大学
团队名称:STARRY团队
项目名称:闪耀童年

项目文档观看视频

参赛学校:厦门大学
团队名称:Frozen团队
项目名称:Frozen冰雪童话

项目文档观看视频

参赛学校:东南大学
团队名称:following团队
项目名称:clothR

项目文档观看视频

在英特尔® 架构的设备上优化 Android* 应用

$
0
0

在英特尔® 架构的设备上优化 Android*应用

概要介绍:

多年来英特尔®一直致力于帮助第三方软件商在 Windows 平台做性能和功耗的优化.软件优化后在性能和功耗上得到了大幅的改善。随着 Android*成为一个更大的市场平台,软件商都相应推出了自己在 Android 上的软件。然而,这些软件仍然有着比较大的优化空间.软件尤其是多媒体应用软件在性能和功耗方面提升空间非常大.事实上,同一款软件在同一 Intel 硬件平台上在 Window 上的性能甚至会远远好过在 Android*上的性能.这篇白皮书介绍了开发优化 Android 应用程序的一些工具和方法以及媒体应用程序的优化实例。这篇白皮书旨在面向  ISVs,  OEMs,  和其他技术相关人士。

点击此处下载白皮书>>

Unity* 原生 X86 支持使Square Enix的Hitman GO*卓尔不凡

$
0
0

作者:Cristiano Ferreira 和 Joseph Wells

Unity* 的最新 4.6 版本可轻松支持原生 x86 应用。Square Enix 很快便发现了在安卓系统上支持原生 x86 所带来的优势,通过启用 Unity 原生 x86 支持,Hitman GO* 版本开发人员轻松将游戏加载速度加快了 31.2% ;1.

相比之前的非原生支持,Unity 软件的原生安卓 x86 支持提供了这些卓越的潜在优势: ;

  • 加载时间大幅缩减
  • 帧速率 (FPS) 性能提升
  • 能耗降低

基准

在 Unity 4.6 版本之前,基于 Unity 的游戏以安卓非原生 x86 模式运行,无法在 x86 硬件上完全发挥潜能。例如,如下图 1 的非原生栏所示,Square Enix 的 Hitman GO 在 FPS 和每帧能耗两方面均表现欠佳。

Francis Pétrin 是 Square Enix Montréal 公司 Hitman GO 团队的一名程序员。由于程序员的日常工作安排十分紧凑,他希望能够通过最简单的路径支持更多平台。当 Square Enix 听说英特尔与 Unity 开展紧密合作,实现了对安卓的 x86 支持,Francis 最新提出“何时实现 x86 支持”的问题。

启用原生 x86 支持

幸运的是,答案是“很快!”Unity 为 Square Enix with 提供了限制性版本的 alpha 构建,它包含 x86 构建特性。  Francis 指出 " Hitman GO 项目已从 Unity 4.3.4f1 升级至 4.5.4f1,可面向设备推出。升级流程本身实现了无缝升级。代码库或插件/中间件均未产生任何问题。”Francis 非常高兴一切都可即购即用,并在 x86 设备上实现了显著的性能提升。

如图 1 所示, 帧速率的提升立竿见影 ;帧速率的提升直接促成了能耗的降低、用户体验的改善以及续航时间的延长。

图 1.x86 原生支持助力1 性能提升

此外,原生代码还可减少 CPU 的工作负载,从而支持基于 Unity 的原生 x86 游戏获取更高的性能,同时降低 CPU 占用率。测量应用启动到菜单互动所用的时间后,发现游戏的加载时间缩短了 2.57 秒。

总结

Unity 原生 x86 支持开启一个快速增长的细分市场,Square Enix 可因此借助更出色的图形效果、更快的加载速度和更低的能耗获取收益。Square Enix 为 Hitman Go 启用了原生 x86 Unity 支持,将 FPS 提升了 14.6%,游戏加载时间缩短了 31.2%。Francis 总结说,"我们已在 (native x86) Google Play* 发布了包含这一特性的最新更新。总体来说,我们非常高兴看到英特尔的合作伙伴关系与 Unity 的“多平台,更简单”理念完全契合。"

相关内容

在 Unity 上启用 x86 原生支持  文章链接

在 Unity 上启用 x86 原生支持视频链接

关于作者

Cristiano Ferreira 是英特尔开发人员关系部门的软件工程师,专门负责移动游戏和图形 ;Cristiano 帮助游戏开发人员为客户提供英特尔硬件所能实现的最佳体验。

Joseph Wells 拥有北亚利桑那大学技术写作专业的硕士学位,以及计算机科学专业的理学学士学位。他将此作为毕生的技术职业,并凭借其敏锐的洞察力和出色的指导,为其他人提供支持并进一步激发他们的兴趣。  


[1] 性能测试中使用的软件和工作负载可能仅在英特尔微处理器上针对性能进行了优化。SYSmark* 和 MobileMark* 等性能测试均使用特定的计算机系统、组件、软件、操作和功能进行测量。上述任何要素的变动都有可能导致测试结果的变化。请参考其它信息及性能测试(包括结合其它产品使用时的运行性能)以对目标产品进行全面评估。

本文测试所采用的系统配置:英特尔参考设计平板电脑、Android 4.4 和 Unity 4.5.4f1。英特尔® 凌动™ processor Z3775 (2M 高速缓存、4 核、高达 2.39 GHz,以及英特尔® 高清显卡(基础频率为 311mhz),2 GB 内存,16GB 固态盘。更多信息敬请登陆http://www.intel.com/performance

Viewing all 172 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>