我看到旧设备发生故障,可以在多个新设备上运行:
android.content.res.Resources$NotFoundException: Resource ID #0x7f030035
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,你可以看看R.java看到罪魁祸首,但是在Android Studio中似乎并不存在.R.java在哪里可以关联该ID?
谢谢.
我有一个原生项目,在制作系统的挫折中,我通过简单地将所有代码堵塞在一起多年前就开始工作了.我试图将项目正确地移植到gradle-experimental,但这仍然是2.5年后的灾难.我现在正试图让Android.mk系统在重组(用于gradle-experimental)项目中工作.
这是组织:
module
-jni (contains Application.mk, Android.mk)
-jpeg
--src
---main
----jni
-----Android.mk (and source co-located)
-processor
--src
----main
-----jni
------Android.mk
------/processor(source)
-library
--src
----main
-----java
-----jni
-----Android.mk (and source co-located)
Run Code Online (Sandbox Code Playgroud)
我知道如果我使用make文件,我可以将其弄平,但我想在2020年的某一天Android Studio将真正支持原生,所以我想我会保留当前的项目格式.
这是我的make文件:
模块/ JNI:
LOCAL_PATH := $(call my-dir)
STARTUP_DIR := $(LOCAL_PATH)
include $(STARTUP_DIR)/../jpeg/src/main/jni/Android.mk
include $(STARTUP_DIR)/../processor/src/main/jni/Android.mk
include $(STARTUP_DIR)/../library/src/main/jni/Android.mk
include $(CLEAR_VARS)
Run Code Online (Sandbox Code Playgroud)
JPEG/JNI:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_SRC_FILES := [truncated]
LOCAL_CFLAGS += -DAVOID_TABLES
LOCAL_CFLAGS += -O3 -fstrict-aliasing -fprefetch-loop-arrays
#LOCAL_CFLAGS += -march=armv6j
# enable tile based …
Run Code Online (Sandbox Code Playgroud) 我不是真正的CS家伙,所以如果你们这里的任何天才能指出我正确的方向,我将永远感激.
我有一个c-code命令行函数,用于将其结果写入文件.我将它转换为通过float*数组将其数据返回到类似的C++程序(以避免常量文件I/O):
float * mgrib(int argc, char **argv)
Run Code Online (Sandbox Code Playgroud)
这非常有效.我现在需要把它变成一个C#程序,这就是事情变得混乱的地方.
我做的第一件事就是避免使用char**来使争论成为一系列的bool.如果我允许它仍然转储到文件,这工作正常.
问题是在C#中使用c风格的float数组.在c-code中,它被分配了malloc.
所以这是我尝试过的一切都没有成功(我知道数组的大小):
制作一个"免费"函数导出到C#调用,以便在完成后释放内存.经过几次循环后,C#崩溃,没有任何警告.
使用Marshal.FreeCoTaskMem从C#释放malloc.结果相同.
将float*移动到参数并删除c代码malloc.(void mgrib(...,float*data,...)
__a)使用Marshal.AllocCoTaskMem分配它.使用Marshal.FreeCoTaskMem释放它.
__b)使用Marshal.Copy进行分配.使用Marshal.FreeCoTaskMem释放它(也许这是错的?)
我已经涉足了我能在网上找到的所有东西.如果需要更多信息,请告诉我.我希望这只是一个我想念的简单概念.
我有一个大型的c代码库,用于将其结果写入文件.我将它转换为通过float*数组将其数据返回到类似的C++程序(以避免常量文件I/O):
float* mgrib(...)
Run Code Online (Sandbox Code Playgroud)
这在c ++中运行良好,我可以"释放"内存.我设法通过以下方式将数据正确地导入C#:
IntPtr pointer = mgrib(...);
float[] result = new float[ size ];
Marshal.Copy( pointer, result, 0, size );
Marshal.FreeCoTaskMem( pointer );
Run Code Online (Sandbox Code Playgroud)
这是在循环内,因为必须从函数中提取许多字段.如果它少于256个字段,那么效果很好.如果它更多,它会在没有警告的情况下崩溃.如果我通过它正确运行文件然后运行另一个(总计超过256)它崩溃.我远不是CS专家,但256似乎不仅仅是巧合.
我很欣赏任何见解.谢谢.
直到最近我才能使用本机调试功能.我一直在用java编写代码并回到本机代码,但现在我无法进行本机调试.它将运行并使用以前工作的调试配置,但是当它将附加时,我在启动时得到Null Pointer错误:
'启动[debug config]'遇到了问题.
"启动[调试配置]"期间发生内部错误.
显示java.lang.NullPointerException
该应用程序将在设备上运行,但不会遇到断点.有人看过这个,它让我疯了吗?
我有一个AsyncTask更新ActionBarSherlock进度实现.不知怎的,onProgressUpdate虽然声称在UI线程上执行,却引发了一个线程错误.
protected void onProgressUpdate(Integer... values)
{
setSupportProgress(values[0]);
}
Run Code Online (Sandbox Code Playgroud)
错误是:
03-06 00:13:11.672:E/AndroidRuntime(4183):at com.anthonymandra.framework.GalleryActivity $ ShareTask.onProgressUpdate(GalleryActivity.java:476)
只有创建视图层次结构的原始线程才能触及其视图.
据我所知,我应该访问UI线程...
我在我的应用程序中有很多工作AsyncTasks,但是根据要求这里是doInBackground(简化):
for (MediaObject image : toShare)
{
BufferedInputStream imageData = image.getThumbStream();
File swapFile = getSwapFile(...);
write(swapFile, imageData);
++completed;
float progress = (float) completed / toShare.size();
int progressLocation = (int) Math.ceil(progressRange * progress);
onProgressUpdate(progressLocation);
}
Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,即开发人员控制台中的堆栈跟踪与代码不匹配.行号显着关闭,并且必须在跟踪中的方法将不会存在于控制台的跟踪中.例如(简化的控制台跟踪):
at getBitmapSize
at getBitmapBytes
at onActivityResult
Run Code Online (Sandbox Code Playgroud)
但是在代码中它必须采用这条路径:
onActivitResult -> handleSaveImage -> getBitmapBytes -> getBitmapSize
Run Code Online (Sandbox Code Playgroud)
这段代码多年来没有变化,因此不需要使用错误的mapping.txt.以某种方式应用proguard是删除应用程序中的结构.那可能吗?它不会映射回来吗?
在转向proguard之前,我从未在堆栈跟踪中看到丢失方法.
还有什么我应该知道的关于让行号匹配?
我已经设定:
-keepattributes SourceFile,LineNumberTable
Run Code Online (Sandbox Code Playgroud)
这几乎是有效的.他们只是没有正确排队.
我设置了一个测试,将NPE放在可预测的内联点上.
(优化)logcat错误具有正确的行号,并且仅为了清晰而分开的方法明显是行间的.通过正确的行号,一切都更加明显.
(未优化)获得相同的堆栈跟踪,除了跟踪中的其他方法.行号再次正确.
我不明白为什么开发人员控制台跟踪的行号错误,但这就是它难以理解的原因.它们不仅在一个文件中关闭,而且在所有文件中都关闭,因此它只是一个令人困惑的混乱,尤其是在您有多个异常处理(如i/o)的任何地方.
我将未经优化的应用程序提交到Play商店,现在堆栈跟踪排队.当你依赖Play堆栈跟踪时,我建议不要在复杂的应用程序中使用优化.
我收到以下崩溃报告:
致命异常:java.lang.IllegalStateException:无法在android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager)的android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1832)的onSaveInstanceState之后执行此操作. java:1850)在android.support.v4.app.BackStackRecord.com发布内部(BackStackRecord.java:643)android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:603)android.support.v4.app .DialogFragment.show(DialogFragment.java:143)
以下代码导致崩溃,为了清楚起见,我删除了一些简单的设置代码.我已经阅读了这个错误,据我所知,.show()
在用户交互中应该是安全的onClick()
.我唯一能想到的是,这query()
需要花费很长时间才能完成用户的交换.这是对这个错误的合理解释吗?即使使用大型数据库,它也会立即在我的设备上运行.还有其他可能吗?谢谢!
foldersButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
final List<String> paths = new ArrayList<>();
try(Cursor c = getActivity().getContentResolver().query(Meta.CONTENT_URI,
new String[]{"DISTINCT " + Meta.PARENT}, null, null,
Meta.PARENT + " ASC"))
{
while (c != null && c.moveToNext())
{
String path = c.getString(c.getColumnIndex(Meta.PARENT));
// We place the excluded folders at the end
if (!mExcludedFolders.contains(path))
paths.add(path);
}
}
[setup...]
int[] position = new int[2];
foldersButton.getLocationOnScreen(position);
FolderDialog dialog = FolderDialog.newInstance(
paths.toArray(new String[paths.size()]), …
Run Code Online (Sandbox Code Playgroud) android android-fragments android-dialogfragment onsaveinstancestate
有人知道如何buildConfigField
在实验gradle插件中定义?
android.productFlavors {
create("demo") {
applicationId = 'com.anthonymandra.rawdroid'
buildConfigField "String", FIELD_META, PROVIDER_META
}
Run Code Online (Sandbox Code Playgroud)
得到:
错误:尝试读取为规则'model.android.productFlavors'提供的类型为'java.lang.Object'的模型的只写视图
android gradle build.gradle android-gradle-plugin gradle-experimental
我有一个android.graphics.Bitmap$Config
作为参数传递的 JNI 函数。 Config
是 的内部类Bitmap
。当我运行 javah 时,我得到了不正确的标头签名(截断为单个参数):
Landroid_graphics_Bitmap_Config
Run Code Online (Sandbox Code Playgroud)
这相当于:
Landroid/graphics/Bitmap/Config
Run Code Online (Sandbox Code Playgroud)
代替:
Landroid_graphics_Bitmap_00024Config
Run Code Online (Sandbox Code Playgroud)
这是等效的
Landroid/graphics/Bitmap$Config
Run Code Online (Sandbox Code Playgroud)
javah 生成的结果是错误的,因为 JNI 会在寻找内部类的_00024
表示时抛出错误$
。man forjavah
似乎没有暗示任何设置来纠正这个问题。这只是限制javah
吗?
android ×8
android-ndk ×2
c# ×2
c++ ×2
adt ×1
build.gradle ×1
c ×1
gradle ×1
java ×1
javah ×1
malloc ×1
marshalling ×1
memory ×1
pointers ×1
proguard ×1
r.java-file ×1
stack-trace ×1
unmanaged ×1