R is already defined

在低于SDK1.5版的项目时,有时会在Eclipse下面的Problems中看到"The Type R is already defined"的提示,表示R被重复定义了,通常是由于旧版SDK与新版SDK生成R.java的文件夹不同所致。

这时只要打开"src"目录,把该目录中最下层由旧SDK生成的"R.java"文件删除,只留下"gen"目录下的"R.java"文档即可

-------------------------------------------------------------

android在同意进程中permission和resource都是能相互共享的

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.chameleon"
    android:sharedUserId="android.uid.shared"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="23" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

package com.example.chameleon;

import android.app.Activity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {
    
    private static final String TAG = "Chameleon";
    Button readContact;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        readContact = (Button) findViewById(R.id.readContact);
        readContact.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.readContact:
                Log.d(TAG, "onClick() readContact");
                changeContacts();
                break;
            
            default:
                break;
        }        
    }
    
    private void changeContacts() {
        ContentValues values = new ContentValues();
        Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
        long rawContactId = ContentUris.parseId(rawContactUri);
        values.clear();
        values.put(Data.RAW_CONTACT_ID, rawContactId);
        values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
        values.put(Phone.NUMBER, "10086");
        values.put(Phone.TYPE, Phone.TYPE_MOBILE);
        getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
    }
}

编译出来的apk使用shared方式签名即可安装。

android.uid.shared进程是很多应用共享的进程,如联系人等。那么就意味着我们这个apk也可移直接使用这个权限
posted @ 2015-09-10 11:34  牧 天  阅读(523)  评论(0)    收藏  举报