小编Mak*_*iev的帖子

在Android L上运行本机库错误:仅支持位置独立可执行文件(PIE)

当我在Android L(Nexus 5)上运行本机代码时,我收到错误.

错误:仅支持位置独立可执行文件(PIE).

在我的三星Galaxy S3(Android 4.3)上正确执行相同的代码.

这是我的Application.mk

APP_PROJECT_PATH := $(call my-dir)/..
APP_ABI := armeabi
NDK_TOOLCHAIN_VERSION := 4.7
APP_PLATFORM := android-9
APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti
Run Code Online (Sandbox Code Playgroud)

但是,当我替换APP_PLATFORM := android-9APP_PLATFORM := android-16(正如我在这里阅读,PIE支持出现在Jelly Been(API级别16)),相同的可执行文件在Android L上正常工作.

有没有办法APP_PLATFORM := android-9在Android L上使用并运行它来编译本机代码?

android android-ndk

52
推荐指数
3
解决办法
8万
查看次数

了解Node.JS async.parallel

我需要从两个Web服务器请求数据.任务是独立的; 因此,我使用的是aync.parallel.现在我只在我的网页正文中写'abc','xyz'和'Done'.

由于任务是同时执行的,我可以遇到奇怪的输出吗?例如,

xab
cyz
Run Code Online (Sandbox Code Playgroud)

代码.

var async = require('async');

function onRequest(req, res) {
    res.writeHead(200, {
        "Content-Type" : "text/plain"
    });

    async.parallel([ function(callback) {
        res.write('a');
        res.write('b');
        res.write('c\n');
        callback();
    }, function(callback) {
        res.write('x');
        res.write('y');
        res.write('z\n');
        callback();
    } ], function done(err, results) {
        if (err) {
            throw err;
        }
        res.end("\nDone!");
    });

}

var server = require('http').createServer(onRequest);
server.listen(9000);
Run Code Online (Sandbox Code Playgroud)

javascript parallel-processing node.js

26
推荐指数
1
解决办法
6万
查看次数

适用于Android的防火墙,带有VpnService.响应已传递,但抛出了SocketTimeoutException

我正在使用VpnService为Android实现一个简单的防火墙.我的应用程序类似于ToyVpnService,但它不会将原始IP数据包发送到远程VPN服务器,而远程VPN服务器会将它们转发到目的地.

我的实现在这里:https://bitbucket.org/MaksimDmitriev/norootfirewall/src/006f7c33cd1cd4055f372ed3a88664fe2a4be3dd/src/com/norootfw/NoRootFwService.java?at=unix

我可以在本地完成所有这些转发程序吗?这就是我想要实现的.

我初始化一个TUN设备及其文件描述符:

mInterface = new Builder().setSession(getString(R.string.app_name))
                .addAddress("10.0.2.1", 24)
                .addRoute("0.0.0.0", 1)
                .addRoute("128.0.0.0", 1)
                .establish();

in = new FileInputStream(mInterface.getFileDescriptor());
out = new FileOutputStream(mInterface.getFileDescriptor());
Run Code Online (Sandbox Code Playgroud)

我将0.0.0.0/1和128.0.0.0/1分配给TUN设备,使其比0.0.0.0/0的默认路由更优先.我使用了0.0.0.0/0并遇到了同样的异常,如下所示.

这是一个示例UDP请求.

1).我从TUN设备读取了一个IP数据包.

05-06 00:46:52.749: D/UDPChecksum(31077): Sent == [69, 0, 0, 36, 0, 0, 64, 0, 64, 17, 108, 91, 10, 0, 2, 1, -64, -88, 1, -59, -53, 1, -50, -87, 0, 16, 89, -114, 85, 68, 80, 95, 68, 65, 84, 65]
Run Code Online (Sandbox Code Playgroud)

请在此处考虑IPv4数据包结构. 例如,第一个数字69(二进制的0100 …

sockets networking android firewall udp

25
推荐指数
1
解决办法
2374
查看次数

Dijkstra算法.最小堆作为最小优先级队列

我正在阅读CLRS第三版中的 Dijkstra算法(第662页).这是我不明白的书中的一部分:

如果图形足够稀疏 - 特别是E = o(V^2/lg V)- 我们可以通过使用二进制最小堆实现最小优先级队列来改进算法.

图为什么要稀疏?


这是另一部分:

每个DECREASE-KEY操作都需要时间O(log V),并且最多仍然有E这样的操作.

假设我的图形如下所示:

从1到6

我想计算从1到6的最短路径并使用最小堆方法.首先,我将所有节点添加到最小优先级队列.构建最小堆后,min节点是源节点(因为它与自身的距离为0).我提取它并更新其所有邻居的距离.

然后我需要调用decreaseKey距离最小的节点来创建一个新的最小堆.但是如何在恒定时间内知道它的指数呢?

节点

private static class Node implements Comparable<Node> {

    final int key;
    int distance = Integer.MAX_VALUE;
    Node prev = null;

    public Node(int key) {
        this.key = key;
    }

    @Override
    public int compareTo(Node o) {
        if (distance < o.distance) {
            return -1;
        } else if (distance > o.distance) {
            return 1;
        } else {
            return 0;
        }
    }

    @Override …
Run Code Online (Sandbox Code Playgroud)

heap dijkstra priority-queue min-heap

21
推荐指数
1
解决办法
6695
查看次数

beginTransaction(),endTransaction()和setTransactionSuccessful().他们究竟做了什么?

从数据库插入,查询,更新和删除项目时,我必须提供同步.据我所知beginTransaction(),这beginTransactionNonExclusive()是我需要的方法.

除了SQLite的文档描述EXCLUSIVE,IMMEDIATE以及DEFERRED相当不错.

交易可以是延期交货,即时交易或独家交易.延迟意味着在首次访问数据库之前,不会在数据库上获取锁.

如果事务是立即的,则只要执行BEGIN命令就会在所有数据库上获取RESERVED锁,而无需等待数据库的使用.在BEGIN IMMEDIATE之后,没有其他数据库连接可以写入数据库或执行BEGIN IMMEDIATE或BEGIN EXCLUSIVE.但是,其他进程可以继续从数据库中读取.

独占事务导致在所有数据库上获取EXCLUSIVE锁.在BEGIN EXCLUSIVE之后,除了read_uncommitted连接之外,没有其他数据库连接能够读取数据库,没有异常的其他连接将无法写入数据库,直到事务完成.

当某些线程正在使用数据库时,它似乎提供了一些保护,防止不必要的插入和查询.但我不确定它是否能保证同步.

insert我的方法ContentProvider.

@Override
public Uri insert(Uri baseUri, ContentValues values) {
    try {
        mDatabase = mHelper.getWritableDatabase();
        mDatabase.beginTransaction(); // EXCLUSIVE
        switch (sUriMatcher.match(baseUri)) {
        case UriCodes.COUNTRIES:
        case UriCodes.CONTINENTS:
        case UriCodes.ORGS:
            String table = baseUri.getLastPathSegment();
            long rowId = mDatabase.insert(table, null, values);
            Uri uri = Uri.withAppendedPath(baseUri, Long.toString(rowId));
            mDatabase.setTransactionSuccessful();
            return uri;

        default:
            mDatabase.endTransaction();
            throw new IllegalArgumentException(UNSUPPORTED_URI + SPACE + baseUri);
        } …
Run Code Online (Sandbox Code Playgroud)

sqlite android transactions

15
推荐指数
1
解决办法
3万
查看次数

当层次结构中存在NestedScrollView时,Android不会调整我的布局大小

我刚刚在使用Android 7.1.1和Android支持库25.3.1的Nexus 9上观察到以下行为.

这是我的活动布局:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="false"
        android:orientation="vertical"
        android:paddingBottom="4dp">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <View
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:background="#fffaaa" />

        <View
            android:id="@+id/view"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:background="#bbbaaa" />

        <View
            android:layout_width="match_parent"
            android:layout_height="10dp"
            android:background="#f00" />

    </LinearLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

这就是它在屏幕上的样子:

在此输入图像描述

当屏幕键盘显示时,系统调整活动的布局大小,从而占用从屏幕顶部到键盘的空间.请在下面的屏幕截图中考虑红色虚线:

在此输入图像描述

但是,当我ScrollView用a 替换时NestedScrollView,系统不会调整布局大小:

在此输入图像描述

现在红色虚线位于键盘下方.通过申请android:windowSoftInputMode="adjustResize"活动可以轻松解决该问题:

在此输入图像描述

红色虚线现在位于键盘上方.我的问题是:

  1. 为什么我会观察到这种行为?
  2. 怎么了NestedScrollView

android scrollview android-support-library android-nestedscrollview

15
推荐指数
1
解决办法
1031
查看次数

编辑build.gradle时,Android Studio 1.1.0会挂起

我的机器有8 GB的RAM.我安装了Android Studio 1.1.0并应用了他们在这里发布的所有内容.

一个小的Hello world应用程序一切正常.但是当我开始编辑build.gradle我们从Eclipse移动的大项目时,IDE会挂起20或30秒.即使我不添加或删除任何行,它也会挂起.即使我只按Enter键.此外,我没有看到底部正在运行任何进程(索引,同步等).

我查了一下File -> Settings -> Gradle,并且Use auto-import未经检查.

正如他们所建议的那样,我在https://code.google.com/p/android/issues/detail?id=82706#c35上运行jstack -l <pid> > dump.txt并发布了一条消息dump.txt

我不能在dump.txt这里附上相同的内容,因为它包含大约800行.

hang android-studio

10
推荐指数
1
解决办法
678
查看次数

自定义 lint 规则,确保不调用特定方法

我想确保在我的 Android 应用程序(Java 和 Kotlin 代码中)中不会调用特定类的特定方法。假设,我有一个使用Bar以下两种方法调用的类:allowed()disallowed()。这是代码:

package com;

public class Bar {

    public void disallowed() {
    }

    public void allowed() {
    }
}
Run Code Online (Sandbox Code Playgroud)

并假设客户端代码可以调用allowed()并且不应该调用disallowed(). 我发现Google的内置AddJavascriptInterfaceDetector的源代码与我的情况类似。

这是我的 lint 规则的代码:

样本代码检测器

package com.sample.mobile.lint

import com.android.tools.lint.detector.api.Category
import com.android.tools.lint.detector.api.Detector
import com.android.tools.lint.detector.api.Implementation
import com.android.tools.lint.detector.api.Issue
import com.android.tools.lint.detector.api.JavaContext
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
import org.jetbrains.uast.UCallExpression


class SampleCodeDetector : Detector(), SourceCodeScanner {

    companion object {
        @JvmField
        val ISSUE = Issue.create(
                // ID: used …
Run Code Online (Sandbox Code Playgroud)

java android lint kotlin

10
推荐指数
1
解决办法
2967
查看次数

当键盘出现时,ActionBar退出屏幕

如何将ActionBar保留在原位?看截图.活动标签是半隐藏的.

在此输入图像描述

keyboard android android-actionbar

9
推荐指数
1
解决办法
4810
查看次数

如何在Android中存储长文本?

我平时在使用短消息strings.xmlTextViewS和其他部件.我在哪里可以存储长文本?如果我需要存储大型用户指南并进行本地化,该怎么办?

<string name="instruction_will_be_soon">Lorem Ipsum ist ein einfacher Demo-Text für die Print- und Schriftindustrie. Lorem Ipsum ist in der Industrie bereits der Standard Demo-Text seit 1500, als ein unbekannter Schriftsteller eine Hand voll Wörter nahm und diese durcheinander warf um ein Musterbuch zu erstellen. Es hat nicht nur 5 Jahrhunderte überlebt, sondern auch in Spruch in die elektronische Schriftbearbeitung geschafft (bemerke, nahezu unverändert). Bekannt wurde es 1960, mit dem erscheinen von "Letraset", welches Passagen von Lorem Ipsum …
Run Code Online (Sandbox Code Playgroud)

string android localization textview

8
推荐指数
1
解决办法
5701
查看次数