我在网上下载了一个据称是Google 通讯录源码的程序,用Eclipse打开后,每个java文件都有错误,错误的原因都是引用了com.android.internal.R。
    我在百度上查了查,有人说“com.开头的包都是隐藏的,运行环境会有,但是开发环境你找不到的,就是系统会用它,但是不能显示的告诉你去用,android.R 这个就是你对应开发环境中的,让你用的”。
    直接将com.android.internal.R改为android.R也通不过。
    请问这个源码如何才能在开发环境中成功使用呢?
例如报错的行有:
        mSecondaryOpen = res.getDrawable(com.android.internal.R.drawable.expander_ic_maximized);
        mSecondaryClosed = res.getDrawable(com.android.internal.R.drawable.expander_ic_minimized);

解决方案 »

  1.   

    该程序用到了SDK中没有的资源和接口,所以用android SDK是不能编译的.
      

  2.   

    这个可定不行的,要改系统源码的话,只能在linux环境下改然后重编译
      

  3.   

    com.android.internal.R这种包就是Framework层没有公布给Application层的,也就是说你在Eclipse中引用的Framework属于对外公布版本,它有很多东西东西都是“阉割”过的,当然这也是处于安全的考虑。有些函数确实不能给第三方软件调用。那么“通讯录”这个程序该如何编译呢?做过Android系统开发的人肯定明白的,它是在编系统Image的时候跟随着系统一块编译的,属于“铁杆预安装软件”(本人定义的词汇,呵呵)。这种程序也就那么十几个,Google放进去的!因此这种“铁杆预安装软件”拥有访问系统种各种内置资源、API、文件等的超级系统权限,只要是它想要的都可以......
      

  4.   

    设定模拟器时选的应该是Android SDK。
    用google APIs 2.2试试看。
      

  5.   

    这是几个drawable,你到base中找到这几个图片,放到你工程目录下面,(com.android.internal.R.drawable.expander_ic_maximized 这样的路径换为R.drawable.expander_ic_maximized 即可,要灵活些
     
      

  6.   

    像com.android.internal这些包中的类对外都是不可见的
      

  7.   

    楼主可以运行了吗?  
    我想看看 可是 用到了
    import com.android.internal.telephony.CallerInfo;  好多类似这样的类 你怎么处理的
      

  8.   

    我列举的只是少数几个例子,这个是图片,其他的就不是了:
       com.android.internal.R.string.contact_status_update_attribution_with_date,
                        timeClause, labelClause);
       com.android.internal.R.string.contact_status_update_attribution,
                        labelClause);return ContactsContract.Preferences.SORT_ORDER_PRIMARY;也有出错信息,说“Preferences cannot be resolved or is not a field”请问谁有可在Eclipse 编译通过的通讯录源码程序?希望能传给我,谢谢,或者提供下载通道,我的邮箱 [email protected],
    有个朋友已提出类似问题,说可以通过一定方法将internal.jar加到系统中,但是我未找到该压缩文件,请问哪位朋友有?请发给我,或提供下载渠道。谢谢
    下附他人问题和解答(我还没看明白):com.android.internal里面的类是Android的内部类,在ADK里是不可以调用用的,但我在做了一个项目需要用到com.android.internal里的类。据闻有一些高手能用到Android的内部类,如com.android.internal.telephony.Phone,不知他们是如何做到的。请问论坛里有人知道如何在应用程序里使用com.android.internal里面类吗?急问!先谢过!(悬赏分先为十分,若方案可行再加十分 ^_^)
        
    解答如下:
    PROJECT的JAVA BUILD PATH上,LIB加上internal.jar。
    import里面的类,使用。
    再看看下面的文字,加上里面提到的参数。
    Attempt to include a core VM class in something other than a core library.
    It is likely that you have attempted to include the core library from a desktop
    virtual machine into an application, which will most assuredly not work. If
    you really intend to build a core library -- which is only appropriate as
    part of creating a full virtual machine binary, as opposed to compiling an
    application -- then use the "--core-library" option to suppress this error
    message. If you go ahead and use "--core-library" but are in fact building
    an application, then please be aware that your build will still fail at some
    point; you will simply be denied the pleasure of reading this helpful error
    message.
      

  9.   

    LZ,你好啊,不知道你的问题解决了没有啊,我现在也遇到了这个问题,希望LZ能多多指教啊,小弟QQ:516124730。非常感谢。
      

  10.   

    楼主的解决了没。我遇到了同样的问题,解决方法是这样的:
    由于在Android源码中,很多方法、成员、类、包都被打上@hide标签,这些成员在SDK中没有公开,以至于在编译Launcher源码时最常遇到的类android.view.View的成员mScrollX无法访问。因此首先需要下载Android的代码并且编译好,因为要用到一些编译完成的class.jar文件这里我们用到的有:(生成的包的路径为out/target/common/obj/JAVA_LIBRARIES)
    1)framework_intermediates/classes.jar :这个主要是android的框架类
    2)android-common_intermediates/classes.jar :这个包含com.android.common.Search这个类
    3)core_intermediates/classes.jar :这个包包含dalvik.system.VMRuntime这个类
    这些都是需要导入到工程里面的包,这个可以通过配置工程的Build Path来加入,
    右键工程名称然后选择Build Path->Configure Build Path...->Libraries->Add Library->User Library->User Libraries...->New...
    然后将上面3个依赖的包一个个的加入进来,分别命名为android_framework,android_common,android_core.
    将3个包加入进来后,然后还需要将它们放到android2.3.3这个包的前面,可以在Build Path配置中选择Order and Export
    这时候就会发现Launcher2工程以及没有错误了,也可以编译了。