在将完美工作的应用程序转换为库(包括其Activity类!)后,我试图通过简单地超类化库的活动来创建一个使用整个库的应用程序:
package com.example.baseapp.paid;
import android.os.Bundle;
import com.example.baseapp.LibActivity;
public class PaidActivity extends LibActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
Run Code Online (Sandbox Code Playgroud)
Eclipse构建这个新的"重新架构"应用程序没有任何错误,但是当我尝试运行它时,我得到一个例外:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.baseapp.paid/com.example.baseapp.paid.PaidActivity}: java.lang.ClassNotFoundException: com.example.baseapp.paid.PaidActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.baseapp.paid-1.apk]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.example.baseapp.paid.PaidActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.baseapp.paid-1.apk]
at …Run Code Online (Sandbox Code Playgroud) 我注意到当我通过选中"is Library"复选框将现有的Android应用程序项目转换为Android库项目时,项目的源代码或XML文件没有任何变化.
那么当选中"is Library"复选框时会发生什么?内部,包和/或项目文件中有什么变化?我在哪里可以了解更多相关信息?
为了更好地解释我的问题:
我设法在我的上网本上设置了一个运行良好的Android-x86,启用了蓝牙并与我的Windows 7开发工作站配对(!).
我最初希望使用adb,就像我通过USB使用真正的手机一样.所以我插入了专用的USB公对公电缆......没有任何反应.原来Android-x86不支持通过USB线连接.
然后我找到了关于如何通过WiFi进行ADB的很好说明.问题是我的Android-x86上网本上有WiFi,但我的Windows 7桌面PC没有.我确实可以购买WiFi加密狗,但我更喜欢更直接的解决方案.
我碰巧在我的Android-x86上网本和我的电脑上都有蓝牙工作,所以我希望找到一个可以让我快速通过蓝牙进行ADB的解决方案.我在这里发现了非常令人鼓舞的指令:https://stackoverflow.com/a/11129818但不幸的ADB over Network是,在我的Android-x86设备上无处可寻.
任何提示或想法如何使我的Android-x86上网本上的蓝牙工作?
我相信如果我可以让我的Android-x86的蓝牙有一个IP地址,我可以从那里去,但我该怎么做?(ifconfig在Android的终端仿真器中不起作用).
考虑这个(匿名):
speakBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mTts.speak(words.getText().toString(), TextToSpeech.QUEUE_ADD, null);
}});
Run Code Online (Sandbox Code Playgroud)
与此:(非匿名):
class MyOuterClass {
private class MyOnClickListener implements OnClickListener {
@Override
public void onClick(View view) {
mTts.speak(words.getText().toString(), TextToSpeech.QUEUE_ADD, null);
}
}
// later (inside some method)...
speakBtn.setOnClickListener(new MyOnClickListener());
}
Run Code Online (Sandbox Code Playgroud)
除了行数较少外,匿名表单还有其他优势吗?
有性能优势吗?
我正在尝试为从库项目派生的所有应用程序使用相同的应用程序图标.
我认为它将像实现此线程中提供的建议一样简单,但遗憾的是它不起作用.
我所做的是添加到<manifest>应用程序中的标记,AndroidManifest.xml如下所示:
xmlns:mylib="http://schemas.android.com/apk/res/com.example.baseapp"
Run Code Online (Sandbox Code Playgroud)
并在同一个AndroidManifest.xml文件中输入几行,将典型更改@drawable/icon为:
<application android:icon="@mylib:drawable/icon">
Run Code Online (Sandbox Code Playgroud)
但它不起作用!
相反,Eclipse告诉我:
错误:错误:找不到与给定名称匹配的资源(在'icon'处,值为'@omlib:drawable/icon').
显然,从布局XML和清单XML引用drawable是不一样的.
如何在Application的AndroidManifest.xml中引用Library Project中的图标?
我刚刚在Android的TTS引擎中观察到"未记录的异常":如果要说的文本太长(大于4K个字符),那么onTetteranceCompleted()对于那个特定的话语将永远不会到达......
还有其他人遇到过这个吗?
这是一个已知的错误或限制吗?
可以做些什么来解决这个问题?
我刚刚将Android SDK,ADT和Proguard升级到最新版本.
我的项目编译构建并在调试模式下运行良好,但是一旦我尝试导出它的签名版本APK,我就会从Eclipse控制台上的导出向导收到错误而没有任何错误日志消息!*

如果我尝试通过Window->Show View->Error Log所有查看错误日志,我看到更多相同:

我不知道该怎么办,因为Eclipse和Proguard都不会暗示问题是什么.
我的项目在最近的升级之前一直很好.没有构建警告.没有棉绒警告!
我正在使用Android的标准配置文件${sdk.dir}\tools\proguard\proguard-android.txt:
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-dontoptimize
-dontpreverify
-keepattributes *Annotation*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgent
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.support.v4.app.Fragment
-keep …Run Code Online (Sandbox Code Playgroud) 假设我有一个以这种方式创建的ArrayLists的ArrayList:
ArrayList< ArrayList<String> > listOfListsOfStrings =
new ArrayList< ArrayList<String> >();
Run Code Online (Sandbox Code Playgroud)
如果我打电话:
listOfListsOfStrings.clear();
Run Code Online (Sandbox Code Playgroud)
稍后访问listOfListsOfStrings中的 任何字符串的尝试是否会导致java.lang.NullPointerException?
我知道如何检测耳机是否插入,但有些耳机(如三星EHS60ANNBE)来与暂停/播放(又名KeyEvent的.KEYCODE_HEADSETHOOK)按钮只,没有了上一页/下一页...
我希望能够检测当前插入Android设备的耳机是否具有PREV/NEXT(又名KeyEvent.KEYCODE_ MEDIA_PREVIOUS /KeyEvent.KEYCODE_ MEDIA_NEXT).
这可能吗?