졸업프로젝트 week18

2 minute read

AOSP 빌드

AOSP 빌드는 마침내 24시간 30분만에 성공하였다.

make 성공

빌드를 성공하고 참고링크를 참고하여 에뮬레이터도 실행해보았다.

에뮬레이터

조금 버벅이는 감이 있지만 에뮬레이터가 실행이 되었다. 이후 adb를 설치하여 명령어들을 실행해보았다.

adb 명령어

이로써 AOSP 빌드를 마치며, 빌드환경구축을 끝냈다. 또한, 이미 빌드를 진행중인 팀원의 도움을 받아 에뮬레이터에 테스팅앱을 설치하였다.


코드개선

팀원들과 모여 지난주 교수님께서 해주신 피드백을 반영하여 코드개선에 대해 의논하였다. 지난번 EnumMap으로 짜여진 코드를 리팩토링을 시도하였으며, 리팩토링한 코드는 아래와 같다.

private enum Types {
        String, Byte, Short, Integer, Long, Float, Double, Boolean;
    }

 public Builder withValue(String key, Object value) {

            if (mType != TYPE_INSERT && mType != TYPE_UPDATE && mType != TYPE_ASSERT) {
                throw new IllegalArgumentException("only inserts and updates can have values");
            }
            if (mValues == null) {
                mValues = new ContentValues();
            }
            if (value == null) {
                mValues.putNull(key);
            } else {
                try {
                    EnumMap<Types, Object> enumMap = new EnumMap<Types, Object>(Types.class);
                    enumMap.put(Types.String, (String) value);
                    enumMap.put(Types.Byte, (Byte) value);
                    enumMap.put(Types.Short, (Short) value);
                    enumMap.put(Types.Integer, (Integer) value);
                    enumMap.put(Types.Long, (Long) value);
                    enumMap.put(Types.Float, (Float) value);
                    enumMap.put(Types.Double, (Double) value);
                    enumMap.put(Types.Boolean, (Boolean) value);
                    mValues.put(key, enumMap.get(Types.valueOf(value.getClass().getName().split("\\.")[2])));
                }

//                    mValues.put(key,value.getClass().cast(value));
//                    HashMap<String,Object> valueTypeMap = new HashMap<String, Object>();
//                    valueTypeMap.put(String.class.getName(),(String)value);
//                    valueTypeMap.put(Byte.class.getName(),(Byte)value);
//                    valueTypeMap.put(Short.class.getName(),(Short)value);
//                    valueTypeMap.put(Integer.class.getName(),(Integer)value);
//                    valueTypeMap.put(Long.class.getName(),(Long)value);
//                    valueTypeMap.put(Float.class.getName(),(Float)value);
//                    valueTypeMap.put(Double.class.getName(),(Double)value);
//                    valueTypeMap.put(Boolean.class.getName(),(Boolean)value);
//                    valueTypeMap.put(byte[].class.getName(),(byte[])value);
//                    mValues.put(key,valueTypeMap.get(value.getClass().getName()));
                } catch (Exception e) {
                    throw new IllegalArgumentException("bad value type: " + value.getClass().getName());
                }
            
            return this;
        }

지금까지 나온 코드들(이전 코드들도)을 빌드를 시작한 팀원과 함께하려 했으나, 이번에도 VMware 에러가 떠 그것을 해결하느라 팀원모임 시간에 빌드를 하지 못 했다. 에러를 해결하였으므로 추후 같이 빌드를 진행할 예정이다.

또한, 여러가지의 경우를 위해 저번에 겉핥기식으로 짰던 Enum 객체를 이용한 case 문을 번외로 조금 수정해보았다. 조금 더 수정할 부분이 있을 것 같고, 이런 식으로 하면 byte[] 배열을 어떻게 처리해야할 지 고민해보아야 할 것 같다. 우선은 byte[] 배열만 if문으로 두어보았다.

        public Builder withValue(String key, Types value) {
            if (mType != TYPE_INSERT && mType != TYPE_UPDATE && mType != TYPE_ASSERT) {
                throw new IllegalArgumentException("only inserts and updates can have values");
            }
            if (mValues == null) {
                mValues = new ContentValues();
            }
            else if (value instanceof byte[]) {
                mValues.put(key, (byte[]) value);
            } 
            Types value = Types.valueOf(value.getClass().getName());
            switch(value)
            {
            	case null:
            		mValues.putNull(key);
            		break;
            	case String:
            		mValues.put(key, (String) value);
            		break;
            	case Byte:
            		mValues.put(key, (Byte) value);
            		break;
            	case Short:
            		mValues.put(key, (Short) value);
            		break;
            	case Integer:
            		mValues.put(key, (Integer) value);
            		break;
            	case Long:
            		mValues.put(key, (Long) value);
            		break;
            	case Float:
            		mValues.put(key, (Float) value);
            		break;
            	case Double:
            		mValues.put(key, (Double) value);
            		break;
            	case Boolean:
            		mValues.put(key, (Boolean) value);
            		break;
            	default:
            		throw new IllegalArgumentException("bad value type: " + value.getClass().getName());
            		break;	            	
            }
            return this;
        }
               
        enum Types {
        	String,Byte,Short,Integer,Long,Float,Double,Boolean;
        }

Tags:

Categories:

Updated: