frescale9.1 move app to sdcard 记录

连接:

http://purerain2002.spaces.live.com/blog/cns!D5D0B8EF1CE02864!1243.entry

1. 修改测试用应用apk,安装位置为auto,internalOnly,用adb install均成功安装到内部存储器上。安装位置设置为preferExternal,安装不成功。

2.修改平台的安装位置,

adb shell pm setInstallLocation [0/auto] [1/internal] [2/external]

0, 1 安装程序成功;2 安装程序成功,但是装在内部区了;

=============

综上,外部安装在frescale平台上是有问题的。

 

3. 通过setting菜单 move to sdcar ,同样failed。

===============

move的方式也是有问题的。

4. 通过move 错误的log查看

I/PackageHelper( 2557): Size of container 2 MB 14305 bytes                      
D/VoldCmdListener( 2129): asec create com.tecom.welly.test-1 2 fat {} 10004     
E/Vold    ( 2129): Error opening devmapper (No such file or directory)          
E/Vold    ( 2129): ASEC device mapping failed (No such file or directory)       
E/PackageHelper( 2557): Failed to create secure container com.tecom.welly.test-1
E/DefContainer( 2557): Failed to create container com.tecom.welly.test-1        
I/PackageHelper( 2211): Forcibly destroying container com.tecom.welly.test-1    
D/VoldCmdListener( 2129): asec destroy com.tecom.welly.test-1 force             
E/Vold    ( 2129): Failed to unlink asec '/mnt/secure/asec/com.tecom.welly.test)
I/PackageHelper( 2211): Failed to destroy container com.tecom.welly.test-1      
I/PackageHelper( 2211): Forcibly destroying container com.tecom.welly.test-1    
D/VoldCmdListener( 2129): asec destroy com.tecom.welly.test-1 force             
E/Vold    ( 2129): Failed to unlink asec '/mnt/secure/asec/com.tecom.welly.test)
I/PackageHelper( 2211): Failed to destroy container com.tecom.welly.test-1      
I/PackageHelper( 2211): Forcibly destroying container com.tecom.welly.test-1    
I/PackageHelper( 2211): Failed to destroy container com.tecom.welly.test-1      
D/VoldCmdListener( 2129): asec destroy com.tecom.welly.test-1 force             
E/Vold    ( 2129): Failed to unlink asec '/mnt/secure/asec/com.tecom.welly.test)
I/dalvikvm( 2302): Jit: resizing JitTable from 4096 to 8192  

可知 devmapper  没有打开。在freecale的代码中找到相应的code

system/vold/Devmapper.cpp 中

int Devmapper::create(const char *name, const char *loopFile, const char *key,
                      unsigned int numSectors, char *ubuffer, size_t len) {
    char *buffer = (char *) malloc(4096);
    if (!buffer) {
        SLOGE("Error allocating memory (%s)", strerror(errno));
        return -1;
    }

    int fd;
    if ((fd = open("/dev/device-mapper", O_RDWR)) < 0) {
        SLOGE("Error opening devmapper (%s)", strerror(errno));
         free(buffer);
        return -1;
    }

出错的代码就在这里。

===============

综上,可以推导fd = open("/dev/device-mapper", O_RDWR))  这句应该open没有成功,为什么呢?

 

目前的解决方案,通过google open code project中的某个项目和搜索,知道是kernel中有一些modules没有加上。

====================

It looks like your kernel is missing device mapper support: 
CONFIG_BLK_DEV_DM, (depends on CONFIG_MD) 
Also enable DM_CRYPT, DM_UEVENT and CRYPTO_TWOFISH (needed by asec).

在kernel的config中加上一些项目

CONFIG_MD=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_DEBUG=y
CONFIG_DM_CRYPT=y
CONFIG_DM_UEVENT=y

CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AUTHENC=y
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_PCBC=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_DES=y
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_TWOFISH_COMMON=y

编译后,升级kernel。

=============

测试:

1. 通过在sdcard 的app目录中拷贝apk,并修改其属性来安装apk。通过这种方式安装,move to sdcard  失败。

apk本身的属性为sdcard的时候,安装不会失败。(同以前安装失败对比)

2. 通过adb install 安装apk,在apk的属性为auto或者sd card的情况下,move to sdcard 和 move to phone 均告成功。

=========

你可能感兴趣的:(Google,Blog)