继承NativeActivity 找不到启动了类XXXActivity
背景
在学习NativeActivity 纯C++应用的时候。编译运行wwise库中的IntegrationDemo的时候,需要修改一些代码,使得纯C++d代码也能通过Java的Activity启动
通过继承的方法启动NativeActivity
C++an安卓程序的本质是通过jni调用系统的NativeActivity这个特殊的activity,本质也是Activity。ndk的native_app_glue是帮助我们使用jni启动NativeActivity的框架。
所以只需要创建一个普通的Activity继承NativeActivity,实现onCreate(Bundle savedInstanceState)即可。
public class MainActivity extends NativeActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //这句不能少
}
}
然后在ActivityManifeast.xml中将按启动类设置为MainActivity
<!--activity android:name="android.app.NativeActivity"-->
<activity android:name=".MainActivity"
......>
......
<intent-filter>
<action android:name = "android.intent.action.MAIN"/>
<category android:name= "android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
编译的时候出现找不到类的错误
java.lang.ClassNotFoundException: Didn't find class "com.audiokinetic.IntegrationDemo.MainActivity"
网上大部分解释是Android的android:name的路径设置错误。
这里的原因并不是这个。
解决
wwise的官方安卓demo中。ActivityManifeast将<application下的一个属性hasCode设置成了false
<!--android:hasCode="false" 改用下面的true-->
<application
android:hasCode="true"
.....>
<activity android:name=".MainActivity"
......>
......
<intent-filter>
<action android:name = "android.intent.action.MAIN"/>
<category android:name= "android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
关于这个字段的解释是:表示此APP是否包含任何的代码,默认为true,若为false,则系统在运行组件时,不会去尝试加载任何的APP代码。(别处搬过来的)
设置成true或者去掉就好了。