×
Namespaces

Variants
Actions

在预装应用使用ECom插件

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

代码示例
文章
shenjianguo 在 30 Mar 2010 创建
最后由 hamishwillee 在 30 May 2013 编辑


问题:预装应用需要安装到存储卡上,ECom插件必须安装到C:盘,出现了矛盾。 解决办法:利用系统自带的安装功能,在应用启动时检查ECom插件是否已经安装,如果未安装的话,调用系统安装程序进行安装。

从Nokia Developer 提供的example EComCalculator开始,在Carbide c++ 中import 工程,编译成功后,先在模拟器运行一下,这里应该没什么问题,然后编译成sis文件,签名后生成EComCalculator.sisx和EComPlugin.sisx,安装到手机,正常运行。OK,下面开始修改,我们分成三个阶段,逐步进行。

第一阶段:之前我们往手机上安装的时候可以有两种办法,一:通过数据线或蓝牙分别把EComCalculator.sisx和EComPlugin.sisx COPY到手机上安装;二:修改EComCalculator.pkg文件,在最后加上如下一行:“@"EComPlugin.sisx", (0xE01F5465)”,把插件附加后面,只生成一个安装文件。 下面我们要做两处修改,首先还是EComCalculator.pkg,在最后加上“"..\..\plugin\sis\EComPlugin.sisx" -"!:\Others\EComPlugin.sisx"”,如果你刚才用的上面第二种方式,请把“@"EComPlugin.sisx", (0xE01F5465)”去掉,我们把ECom插件做为一个普通文件放到手机上,下面我们需要修改EComCalculatorAppui.h EComCalculatorAppui.cpp EComCalculator_30.mmp,在EComCalculatorAppui.h增加 成员函数 void InstallEComL(), 在EComCalculatorAppui.cpp文件开始处增加

#include <APACMDLN.H>
#include <APGCLI.H>
#include <APMSTD.H>
#include <BAUTILS.H>
#include <f32file.h>

实现成员函数 void InstallEComL()如下:

void CEComCalculatorAppUi::InstallEComL()
{
TBuf<50> filename;
filename.Copy(_L("e:\\Others\\EComPlugin.sisx"));
 
RFs fs;
User::LeaveIfError( fs.Connect() );
CleanupClosePushL( fs );
 
if( BaflUtils::FileExists( fs, filename ) )
{
RApaLsSession als;
TDataType dtype(_L8("application/vnd.symbian.install"));
 
TThreadId threadId;
 
User::LeaveIfError( als.Connect() );
User::LeaveIfError( als.StartDocument( filename, dtype, threadId ));
als.Close();
}
 
CleanupStack::PopAndDestroy( &fs );
}

找到函数DoEComCalculationL(const TDesC8& aOperationName, TReal aA, TReal aB, TReal& aResult),做如下修改:

        if( error )
{
HandleEComInitializationErrorL(error, aOperationName);
InstallEComL();
return error;
}

上面加重部分是增加的代码,如果未检测到Ecom插件,调用安装方法

这就是在程序中安装应用的代码 修改EComCalculator_30.mmp,加入需要用到的lib,

LIBRARY           apparc.lib
LIBRARY apgrfx.lib
LIBRARY apmime.lib
LIBRARY bafl.lib

至此,代码修改完毕,编译后安装到手机,通过文件管理程序,可以检查以下EcomPlugin.sisx是否在存储卡的其他目录下,运行程序,第一次计算时会报错,并调用安装程序,安装插件,以后再运行就正常了。 Media:EComCalculator.zip

第二阶段:把应用改成预置安装,要继续修改EComCalculator.pkg,先去掉我们之前增加的 “"..\..\plugin\sis\EComPlugin.sisx" -"!:\Others\EComPlugin.sisx"”, 然后修改安装文件类型:#{"EComCalculator"},(0xE01F5464),2,0,0, TYPE=PA,“TYPE=PA”表明这是个预装应用,最后把相关文件COPY到存储卡相应的位置:

\sys\bin\EComCalculator.exe
\resource\apps\ EComCalculator.RSC
\Private\10003a3f\import\apps\ EComCalculator_reg.RSC
\Private\10202dce\ EComCalculator.sis,这个是签名后的文件
 
\Others\ EComPlugin.sisx

把存储卡重插一下,可以自动安装了,运行程序,安装插件。若是N97这样的内置存储卡的手机,就稍微麻烦了,要键入“*#7370#”,恢复系统才能安装。


第三阶段:前面的插件是以独立应用的形式安装的,我们可以修改一下,以patch的方式安装插件,这样插件会安装在和应用相同的文件夹下,可以共享相同的资源。只要修改EComPlugin.pkg就可以了,把“#{"ECom Calculator plugin"},(0xE01F5465),2,0,0”改成“#{"ECom Calculator plugin"},(0xE01F5464),2,0,0, TYPE=SP”,一是和应用使用相同的UID,二是修改类型为“SP”表明这是个patch。 Media:EComCalculator_use_SP_type.zip

最后,我们的安装过程还可以改成默认安装方式,不用提醒用户,直接安装,具体可参考SilentInst。

系统安装工具还可以帮我们解决其他类似的问题,比如在权限不够的情况下的文件处理等。

This page was last modified on 30 May 2013, at 07:41.
88 page views in the last 30 days.
×