文档章节

Delphi XE5 for Android 启动无黑屏等待总结

vga
 vga
发布于 2014/10/07 06:43
字数 1517
阅读 1336
收藏 2
点赞 0
评论 0

Delphi XE5 for Android 启动无黑屏等待总结

 从embarcadero官方技术论坛找了下参考资料,对黑屏处理应该来说有了相应的办法,并且这种办法具有很好的应用价值,因此做了个总结,Delphi XE5 无黑屏从本质上讲是使用Android 原生开发语言java ,编写的程序启动时首先加载java编写的SplashScreen的activity,然后在splashScreenActivity中启动delphi FireMonkey中的com.embarcadero.firemonkey.FMXNativeActivity;

首先新建立一个移动端项目,启动Rad studio xe5,File -> New ->FireMonkey Mobile Application,拖上一个TLabel 控件作为演示,保存项目

clip_image002[1]

设置Android SDK 我使用的Android SDK 22.0.5 32bit 版本,对应平台为2.35,如果你是其它SDK版本,可以右键点击 SDK,选择 Edit SDK进行配置

clip_image004[1]

Build一下当前项目,然后打开当前项目下AndroidManifest.template.xml文件

clip_image006[1]

将其中android:largeHeap="%largeHeap%" 去掉,否则发布会报错(我不太清楚是否是特点Android版本问题,或者有无其它参数进行设置,反正我就是这样解决的),好了,Demo先放在这里,我们接着要建立一个java for android 下的启动Activity项目,这里得用eclipse + ADT进行开发

建立Android Application Project,建立Android Activity ,命名为SplashActivity,注意包 命名空间,我的命名空间是com.cikk.splashsceen,简单的设置一下View

clip_image008[1]

clip_image010[1]

接下来编写SplashActivity的代码,我们要做的是SplashActivity启动后延时3秒,3秒结束后启动com.embarcadero.firemonkey.FMXNativeActivity 这个Delphi Xe5 for android 下的这个特定Activity,代码如下

package com.cikk.splashsceen;

import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

import android.util.Log;

import android.view.Window;

import android.view.WindowManager;

public class SplashActivity extendsActivity {

private boolean active = true;

private static int SPLASH_TIME_OUT = 3000;

private static int SPLASH_INTERVAL = 100;

int get_resource_id(String resourceName, String resourceType)

{

returnthis.getResources().getIdentifier(resourceName, resourceType,

this.getPackageName()) ;

}

int get_string_id(String resourceName)

{

return get_resource_id(resourceName, "string");

}

int get_drawable_id(String resourceName)

{

return get_resource_id(resourceName, "drawable");

}

int get_layout_id(String resourceName)

{

return get_resource_id(resourceName, "layout");

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(get_layout_id("splash_activity"));

new Thread(new Runnable()

{

@Override

public void run() {

try

{

int elapsed = 0;

while (SplashActivity.this.active && (elapsed <SPLASH_TIME_OUT))

{

Thread.sleep(SPLASH_INTERVAL);

if (SplashActivity.this.active)

elapsed += SPLASH_INTERVAL;

}

}

catch (InterruptedException e)

{

}

finally

{

finish();

if (SplashActivity.this.active)

{

Intent launchIntent = new Intent();

Log.d("Splash", "Launching the main activity now");

launchIntent.setClassName(SplashActivity.this, "com.embarcadero.firemonkey.FMXNativeActivity");

startActivity(launchIntent);

}

}

}

}).start();

}

}

启动调试一下,三秒钟就自动退出了

clip_image012[1]

回到Delphi XE5,我们将SplashScreen 工程Build一次,然后点击Project ->Deployment 进入发布管理模块

clip_image014[1]

点击Deploy发布一次,然后打开项目目录进入Android\Debug\splashScreen\classes 子目录,可以看到classes.dex 文件,这个就是delphi firemonkey在 android 在Dalvik中的基础支撑库了,接下来,我要使用一些工具来帮助我将java编写的activity合并到classes.dex中了;

拷贝java 工程中的src和res 到delphi xe5 的SplashScreen项目目录中,对照下图,别拷贝错位置了

clip_image016[1]

先配置下系统环境变量

1. Android 我的是 C:\Users\cikk\android-sdks

clip_image018[1]

2. 配置System Path

Build-tools: 我的是 %ANDROID%\build-tools\19.0.0

clip_image020[1]

3. 检查JDK 的 bin 目录是否在System Path 中,建议使用jdk1.6,我曾经使用1.7,但由于版本问题,无法成功合并到classes.dex中;

clip_image022[1]

clip_image024[1]

经过配置,打开命令提示窗口运行javac;jar;dx 确保命令能够正确执行;

clip_image026[1]

在delphi xe5 的SplashScreen项目目录中编写Build.bat 批处理

clip_image028[1]

批处理内容如下

@echo on

setlocal

set ANDROID_PLATFORM="%ANDROID%\platforms\android-10"

set DX_LIB="%ANDROID%\build-tools\19.0.0\lib"

set PROJ_DIR="�%"

set EMBO_DEX="D:\Program Files\Embarcadero\RAD Studio\12.0\lib\android\debug\classes.dex"

set VERBOSE=0

mkdir output\classes 2> nul

mkdir output\jar 2> nul

mkdir output\dex 2> nul

echo.

echo 编译 Java SplashActivity.java 源文件

echo.

SET VERBOSE_FLAG=-verbose

javac %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes src\com\cikk\splashsceen\SplashActivity.java

echo.

echo 创建jar包

echo.

SET VERBOSE_FLAG=v

jar c%VERBOSE_FLAG%f output\jar\test_classes.jar -C output\classes com

echo.

echo 转换为dex格式

echo.

SET VERBOSE_FLAG=--verbose

call dx --dex %VERBOSE_FLAG% --output=%PROJ_DIR%\output\dex\test_classes.dex --positions=lines %PROJ_DIR%\output\jar\test_classes.jar

echo.

echo 合并dex 文件

echo.

java -cp %DX_LIB%\dx.jar com.android.dx.merge.DexMerger %PROJ_DIR%\output\dex\classes.dex %PROJ_DIR%\output\dex\test_classes.dex %EMBO_DEX%

echo 删除临时文件

echo.

del output\dex\test_classes.dex

del output\jar\test_classes.jar

rmdir output\jar

echo.

echo 输出为 output\dex\classes.dex

:Exit

endlocal

如果批处理出现问题,请检测下环境变量的设置,还有注意EMBO_DEX的设置,对照你的xe5 安装路径重新设置下(前面我们发布管理中可以找到classes.dex的路径),成功执行批处理后,我们可以从项目目录\ output\dex 中找到包含我们定义splashscreen的classes.dex

再次进入delphi 发布管理Project ->Deployment

确保缺省的classes.dex未被选中,点击Add Files 选择通过build生成的classes.dex,添加成功后选中新增项,点击Change Remote Path,更改发布后的路径

clip_image030[1]

将其它资源也纳入到发布路径中去

Res\layout\splash_activity.xml

Res\values\strings.xml

Res\drawable\splash.png

clip_image032[1]

点击保存,接下来我们要修改下delphi xe5 splashscreen 工程的配置文件

打开 splashscreen 工程目录下的AndroidManifest.template.xml 配置文件模板,加入java编写的activity 配置项;

<activity android:name="com.cikk.splashsceen.SplashActivity"

android:screenOrientation="portrait">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

将<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"> 中的

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

删除,最后的我的配置文件如下

<?xml version="1.0" encoding="utf-8"?>

<!-- BEGIN_INCLUDE(manifest) -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="%package%"

android:versionCode="%versionCode%"

android:versionName="%versionName%">

<!-- This is the platform API where NativeActivity was introduced. -->

<uses-sdk android:minSdkVersion="%minSdkVersion%" />

<%uses-permission%>

<application android:persistent="%persistent%"

android:restoreAnyVersion="%restoreAnyVersion%"

android:label="%label%"

android:installLocation="%installLocation%"

android:debuggable="�buggable%"

android:icon="%icon%"

android:theme="%theme%">

<activity android:name="com.cikk.splashsceen.SplashActivity"

android:screenOrientation="portrait">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<!-- Our activity is a subclass of the built-in NativeActivity framework class.

This will take care of integrating with our NDK code. -->

<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"

android:label="�tivityLabel%"

android:configChanges="orientation|keyboardHidden">

<!-- Tell NativeActivity the name of our .so -->

<meta-data android:name="android.app.lib_name"

android:value="%libNameValue%" />

</activity>

<receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm" />

</application>

</manifest>

<!-- END_INCLUDE(manifest) -->

选好调试平台,调试运行一下吧,由于我是使用真机调试的,所以不好截图,我成功了,你们呢?

最后,通过这几天使用delphi平台,感觉做传统型数据库应用,应该够了,但相关资源相比较java来说太缺乏,如果要调用java的三方代码太繁琐,比如这个闪屏界面,不如直接使用java开发;我们选择开发平台时,应该多考虑下!

Cikk

2013/12/4


本文转载自:http://blog.sina.com.cn/s/blog_643d40e60101g8za.html

共有 人打赏支持
vga

vga

粉丝 21
博文 353
码字总数 23746
作品 0
佳木斯
delphi XE5开发Android程序调用电话相关功能(短信息和电话)

XE5开发Android程序调用电话相关功能(短信息和电话) 时间:2013-9-19 16:46:08 点击:5570   核心提示:其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这...

vga
2014/06/01
0
0
Xe5开发web服务端和手机客户端

Xe5开发web服务端和手机客户端   核心提示:我们开发一个三层的android程序建立一个webservices stand-alone vcl application 作为手机访问的服务端1、new-other-webservices2、选择s... ...

vga
2014/06/01
0
0
Android Activity之间跳转出现短暂黑屏的处理方法

在默认情况下,Android应用程序启动时,会有一个黑屏的时期,原因是,首个activity会加载一些数据,比如初 始化列表数据、向服务器发送请求获取数据等等。同样,使用startActivity(intent)方...

今日竹石
2014/05/07
0
0
android 程序启动界面的短暂黑屏

默认的情况下,android 程序启动时,会有一个黑屏的时期, 只要在入口activity 加上android:theme="@android :style/Theme.Translucent" 就可以解决启动黑屏的问题...

平凡简单
2012/07/02
0
0
Rexsee API介绍:Android WakeLock进程持续,阻止应用休眠

在Android中,WakeLock可以让进程持续执行,即使手机关屏、进入睡眠模式。。基于Rexsee的WakeLock扩展可以使用JS实现。。 【函数】 void acquire(boolean onAfterRelease) 【说明】 点亮屏幕...

yejiang
2012/03/15
0
0
应用保活终极总结(二):Android6.0及以上的保活实践(进程防杀篇)

原作者:“裂缝中的阳光dg”,本文现已重新修订并整理发布,感谢原作者的无私分享。 1、前言 在Android 4.4及以后的系统中,应用能否常驻内存,一直以来都是相当头疼的事情,尤其移动端IM、消...

JackJiang2011
2017/10/20
0
0
Android与本地Tomcat的连接

知道大家是否想试一下用Android模拟器如何访问自己建的Web站点呢? 下面我将讲一下如何实现 Step 1:我用的Tomcat作为本地服务器,在Webapps这个目录里,把我的名为kankong的Web工程放进来,启动T...

疯狂的艺术家
2012/01/05
0
0
[RK3288][Android6.0] 调试笔记 --- 增加操作系统开机时间

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背景: 由于系统有模块需要和外部硬件做同步,因此要延长开机时间。 调试思路: 由于系统只显示了开机动画,没有开机Logo。因此一开始的思...

kris_fei
04/17
0
0
Android开发之解决APP启动白屏或者黑屏闪现的问题

在做搜芽的过程中,发现那个外包人缘做的不行,由于启动的时候会停顿,然后白屏一会,联想到几个月前我在我的三僚企业通信软件里面拉起9K-Mail的时候也会黑屏,所以决定学习一下。解决一下。...

技术mix呢
2017/11/09
0
0
tcgames无需安卓模拟器电脑玩手游连接黑屏、闪退、连接不上问题汇总

tcgames连接不上手机怎么办?tcgames连接电脑黑屏闪退如何解决?tcgames为什么一直显示正在连接中?tcgames是一款无需安卓模拟器也可以在电脑上玩手机游戏匹配手游服玩家的工具,部分玩家在使...

cdjiehua
03/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ClassNotFoundException: javax.el.ELManager

这个是因为tomcat7中的el-api2.2,有些版本太低,建议升级tomcat到8.0,利用el-api3.0就会解决这个问题。

无语年华
8分钟前
0
0
Jvm堆内存的划分结构和优化,垃圾回收详解(详细解答篇)

在JVM中堆空间划分如下图所示 上图中,刻画了Java程序运行时的堆空间,可以简述成如下2条 1.JVM中堆空间可以分成三个大区,新生代、老年代、永久代 2.新生代可以划分为三个区,Eden区,两个幸...

嘻哈开发者
20分钟前
0
0
CentOS 7.4 设置系统字符编码

1.语言变量LANG在 /etc/locale 文件中。 2.可以通过/ect/profile 来修改LC_TYPE 变量的值 添加如下代码 export LC_ALL="zh_CN.GBK" export LANG="zh_CN.GBK" 到profile文件中,变量的可以修改...

qimh
21分钟前
0
0
Kafka相关使用

安装前提,需要有jdk环境,还有zookeeper环境 zookeeper下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/ zookeeper安装参考:https://www.jianshu.com/p/f7037105db46 kafka的下......

朝如青丝暮成雪
21分钟前
0
0
CentOS7 解决无法使用tab自动补全 tab代码提示

一、前言 对于刚刚开始学习linux的新人来说,linux的一切都显着神秘,只能惊叹于大牛在Linux上行云流水的操作。今天介绍一下在linux中自动补全的功能。 对于新人来说,在不懂得技巧的情况下,...

ziluopao
27分钟前
0
0
redis安装

https://www.cnblogs.com/feijl/p/6879929.html

ghou-靠墙哭
28分钟前
0
0
Spring核心——注解自动装载

从配置上扩展 之前的文章介绍了Spring的IoC容器配置管理方面的详细内容,需要了解的可以从IoC容器的设计模式开始阅读。在介绍基于注解配置的配置之前我们再重复一下在之前提到的基本认识: ...

随风溜达的向日葵
31分钟前
2
0
ElasticSearch学习(8)—— SearchType

Elasticsearch有四种类型的SearchType 1、query and fetch 向索引的所有分片(shard)都发出查询请求,各分片返回的时候把元素文档(document)和计算后的排名信息一起返回。这种搜索方式是最...

叶枫啦啦
32分钟前
0
0
MYSQL备份工具-mysqldump

介绍 mysqldump 是文本备份还是二进制备份 它是文本备份,如果你打开备份文件你将看到所有的语句,可以用于重新创建表和对象。它也有 insert 语句来使用数据构成表。 语法 mysqldump 的语法是...

郭恩洲_OSC博客
34分钟前
0
0
我的第一个go web框架

使用了beego等go web开发框架之后,感觉各种不方便,尤其是在接收参数、和自定义输出的时候,各种难受,定义各种model,这不是找事情嘛??尤其是在角色权限控制的时候我也感觉力不从心。。。...

独坐苔痕但观罗敷
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部