android 2.3.6Gallary源码导入到Eclipse中编译

android 2.3.6 Gallary源码太out了吧,是的,很out。只是作为整个流程的试试手罢了。我想其他的导入方法也可大致相同罢了。另外,这个代码还是大有看头的,研究研究也是不错。

使用的环境:

   最新的Android4.4的api,Eclipse+window7
新建一个Android工程,随便你命名。
然后在你自己的Android工程目录下建立和gallary具有相同的包名com.android.camera和com.android.camera.gallery
先不要着急把所以文件拷到相应的目录中,而是首先查看Androidmaifast.xml文件,找到存在有这样一段  

                
                
                

这段是在启动apk的Activity。再把该Activity到相应的目录中拷贝源码到你的目录中,然后根据包的错一步一步将依赖的类添加进去,有些错误莫名奇妙的话,先放在一边,等把所以的类都导入到工程中再一个个击破(另外,一般我们需要在此之前将所以的源码中的布局文件和资源文件先全部拷进去,这样生成R文件,方便替换在源码中的R文件引用)。大致思路就是这样,说一下我在将2.3.6gallary源码导入到Eclipse中编译出现的几个问题。

1.碰到有很多类是隐藏的没法引用。这个问题,多google,百度解决。比如有的常量是可以查到相关源码直接将值替换代码引用。比如
 private static final String[] DRM_IMAGE_PROJECTION = new String[] {
// DrmStore.Images._ID,
// DrmStore.Images.DATA,
// DrmStore.Images.MIME_TYPE,
     "_id",
     "_data",
     "mime_type"
    };
DrmStore这个类为hide类,这段代码很显然引用该类的几个常量,根据import 查到API或者网上查到源码看到这几个引用的值是"_id","_data","mime_type"直接进行替换(当然有一种万能的解决这种hide API调用或者引用的问题,就是直接unbuntu下编译源码,在源码编译的生成目录提取android.jar文件导入你的工程,)
对于hide域访问的问题,如果只是对一个变量进行设置或者取值,使用反射机制也可以到达目的
2.对于像android.internal.R....这种framworks资源文件,我尽量提取出来,加到我们的功能中。
3.有些代码应用以下没有声明的变量,因为代码是从源码中提取出来的,而本身的源码下面的代码是可能是在framework层编译,所以可以引用变量:如
Gallery源码是在Framework里面编译的,mScrollY是继承自View里面的变量,android.R.styleable.View也是framework下可见,放在framework里面编译没有错。如果你要在Eclipse里面跑,mScrollY可以用getScrollY()取代, 但是  mScrollY = Math.max(0, Math.min(mMaxScrollY, mScrollY));  不能用getScrollY()来取代,你可以屏蔽掉。android.R.styleable.View这个你可以在res/values/ 目录下建一个attrs.xml自己定义scrollbar的属性集合。
4.解决了包红错误信息之后激动人心的时刻就要到了,使用eclipse编译程序,出现:Error信息
android错误之android.util.AndroidRuntimeException: You cannot combine custom titles with other title

报如下错误:android.util.AndroidRuntimeException: You cannot combine custom titles with other title features

这个问题主要是由下面语句造成的。

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);

 

原因暂时不是很清楚,在android4.0中会出现,android2.3中没有问题,貌似是title的冲突,解决方法如下:

在你的AndroidManifest.xml中添加相应Active的theme。如添加下面语句可解决:

android:theme="@android:style/Theme.Dialog"

具体的theme选项内容的添加根据你自己的意图选择

源码下载:

http://download.csdn.net/detail/clj1017772778/7399129


你可能感兴趣的:(android,源码解读)