Thursday, November 10, 2011

build simulator

build simulator是build一個跑在x86上的android
不過這功能到了後面就沒在maintain了

但還是試了一下
果真要改很多地方

my AOSP codebase
gingerbread-release
GRI40

  1. framework 
    1. strchr return type  : const char *  ->  char *  :   const_cast(strchr(..)) 
      1. media/libmedia/MediaScanner.cpp
      2. media/libstagefright/NuHTTPDataSource.cpp
      3. media/libstagefright/httplive/M3UParser.cpp
      4. media/libstagefright/rtsp/MyHandler.h
      5. media/libstagefright/rtsp/ASessionDescription.cpp
  2. external/gtest
    1. Android.mk : remove external/stlport/stlport in libgtest_includes (stlport wont be built for simulator, so we try not to include stlport's headers )
  3. external/libnfc-nxp
    1. Android.mk 
      1. remove libdl in LOCAL_SHARED_LIBRARIES (libdl wont be build for simulator, and we also need to modify build scripts to make it link against to libdl on my host pc)
      2. remove -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork in LOCAL_CFLAGS
      3. add LOCAL_C_INCLUDES := bionic/libc/kernel/common for libnfc
    2. Linux_x86/phDal4Nfc_i2c.c 
      1. add "#include
    3. Linux_x86/phDal4Nfc.c
      1. add "#include
      2. remove line 664: pthread_setname_np(pthread_self(), "reader");
  4. development/simulator/
    1. app/DeviceWindow.cpp 
      1. line 175: bool hasAlpha = onionSkinImage.HasAlpha(); -> bool hasAlpha = onionSkinImage.GetAlpha() != NULL; 
    2. app/MainFrame.cpp
      1. remove line 239, 280 : menuHelp->AppendSeparator();
  5. build
    1. core/combo/TARGET_linux-x86.mk
      1. TARGET_GLOBAL_LDFLAGS := $(HOST_GLOBAL_LDFLAGS) -m32 -lpthread -ldl -lrt
  6. packages/apps/Nfc
    1. ./jni/com_android_nfc.h
      1. add "#include

although I can build a simulator 
but it still cannot run Android well


[ 11-10 12:25:06 10884 W/Packag]
Exception reading AndroidManifest.xml in /system/framework/framework-res.apk
java.lang.SecurityException: /system/framework/framework-res.apk failed verification of META-INF/CERT.SF
at java.util.jar.JarVerifier.failedVerification(JarVerifier.java:135)
at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:313)
at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:265)
at java.util.jar.JarFile.getInputStream(JarFile.java:389)
at android.content.pm.PackageParser.loadCertificates(PackageParser.java:342)
at android.content.pm.PackageParser.collectCertificates(PackageParser.java:485)
at com.android.server.PackageManagerService.collectCertificatesLI(PackageManagerService.java:2570)
at com.android.server.PackageManagerService.scanPackageLI(PackageManagerService.java:2656)
at com.android.server.PackageManagerService.scanDirLI(PackageManagerService.java:2514)
at com.android.server.PackageManagerService.(PackageManagerService.java:930)
at com.android.server.PackageManagerService.main(PackageManagerService.java:694)
at com.android.server.ServerThread.run(SystemServer.java:148)

[ 11-10 12:25:06 10884 E/Packag]
Package android has no certificates at entry AndroidManifest.xml; ignoring!



out-of-class member template definition

在Modern C++ Design的第五章裡看到了


template
template
Functor::Functor(const Fun& fun)
: spImpl_(new FunctorHandler(fun));
{


}

這就是 out-of-class member template definition
前面的template  是給class的template
後面的template 是給function(cstor)的template

這也有類似的例子
http://stackoverflow.com/questions/5895179/syntax-of-out-of-class-definition-of-a-template-member-function-of-a-template-cl

Monday, November 7, 2011

stack frame alignment

除了structure alignment 外
還有stack frame alignment
http://stackoverflow.com/questions/8004458/compiler-g-seems-to-allocate-more-memory-for-instances-of-classes-than-it-ne


不過有篇post也討論為啥要在32bit上也要用16 byte
不過他好像沒討論出什麼!?
http://blogs.embarcadero.com/abauer/2010/01/14/38904

Friday, November 4, 2011

qemu ram size

在cat /proc/meminfo下 ram總是90多MB
看了一下 qemu的source
原來是在 externel/qemu/android/avd/hardware-properties.ini 設定的
default是 96MB

Wednesday, October 26, 2011

python super()

http://rhettinger.wordpress.com/2011/05/26/super-considered-super/

這裡有介紹python 的super()

裡面講到了__mro__
跟用一個adapter來傳super的args

Wednesday, October 19, 2011

static_cast

c++的polymorphism 是透過pointer來達成的
i.e.

class parent {

};
class child {

};
child *c = new child;
parent *p = c;

可是把 child*c = new child ;  換成
child c;

polymophism就沒有了
這時可以用static_cast

parent &p = static_cast< parent>(c);

記得要用 & 變ref

不然只是多一個無關緊要的 p出來而已
印出他的address就知道了