마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

.aar 라이브러리 내 클래스는 호출 되는데 Activity는 호출이 안됩니다 ..

0 추천
.aar파일 내에 Toast를 출력하는 클래스를 만들어서 호출해보면 잘 되는데

Activity를 호출하면 NoClassDefFoundError이 발생하며 어플이 죽습니다.

원래 Activity는 호출이 안되는건가요 ??
음무 (17,820 포인트) 님이 2016년 6월 22일 질문

1개의 답변

0 추천
aar 내 androidmanifest.xml 파일 안에 해당 activity 의 정보가 포함되어 있거나 구현 중인 app 내 androidmanifest.xml 파일에 activity 정보가 있는지 확인 하셨는지요?

일단 aar 내 activity 가 있어도 호출 됩니다.
aucd29 (218,390 포인트) 님이 2016년 6월 22일 답변
네 둘다 구현돼있습니다.
호출하는 프로젝트 매니페스트에
<activity android:name="com.package.name.TestActivity" />

.aar 프로젝트 매니페스트에
<activity android:name=".TestActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

호출하는 방식은
Intent intent = new Intent(this, com.package.name.TestActivity);
startActivity(intent);
이렇게 하고 있습니다..
혹시 aar 내 activity 의 onCreate 인자가 Bundle 이외에 PersistableBundle 도 있는지 봐보세요 PersistableBundle 이 있으면 호출이 안되더군요
그리고 aar 내 매니패스트에만 선언되어 있으면 알아서 머지 됩니다.
첫번째 답변은 무슨말인지 잘 모르겠어서 두번째걸로 해봤습니다
Intent intent2 = new Intent(android.content.Intent.ACTION_VIEW);
                intent2.setComponent(new ComponentName("com.package.name",
                        "com.package.name.TestActivity"));
                startActivity(intent2);

이렇게 하면 ActivityNotFoundException이 발생하네요 ㅠㅠ
aucd29 님 Intent로 호출하는 방식이 혹시 제가 올린것과 다른가요 ?
저는 그냥 간단하게 합니다.

Intent intent =  new Intent(context, TestActivity.class);
startActivity(intent);

PersistableBundle 유/무는 확인해보셨나요?
네 그냥 프로젝트 생성하자마자 바로 .aar 로 만들어 테스트중이라 말씀하신것은 사용하지 않았습니다.
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
    }

위와 같은 상태입니다
안될 이유가 없는데 말이죠 -_ -;
새로 만들어서 다시해봐야겠네요 ..
...