小编Pol*_*Pol的帖子

如何在Android Studio中的Gradle NDK插件中设置APP_PLATFORM?

我正在使用Android Studio 1.5.1和Gradle实验插件0.4.0构建一个带有NDK库的应用程序.

即使Gradle配置设置为(with minSdkVersion.apiLevel = 18),似乎NDK库仍然编译为android-21:

compileOptions.with {
    sourceCompatibility=JavaVersion.VERSION_1_7
    targetCompatibility=JavaVersion.VERSION_1_7
}

android {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.2"

    defaultConfig.with {
        applicationId = "net.pol_online.hyper"
        minSdkVersion.apiLevel = 18  // Android 4.3 Jelly Bean
        targetSdkVersion.apiLevel = 23  // Android 6.0 Marshmallow
    }
}
Run Code Online (Sandbox Code Playgroud)

是不是因为APP_PLATFORM基于min SDK版本的Gradle NDK支持不会自动设置?如果是这样你怎么解决这个问题?

android-ndk android-studio gradle-experimental

4
推荐指数
1
解决办法
6374
查看次数

运行 ProGuard 后 JNI RegisterNatives() 找不到类方法

如果我minifyEnabled = true在 Android 应用程序的 Gradle 设置中进行设置,RegisterNatives()则从 JNI 共享库调用 JNI 函数将不再找到其目标类。我尝试了许多 ProGuard 规则,但仍然无法使其正常工作。

爪哇代码:

package net.pol_online.hyper;

...

public class Hyper extends Application {
  ...
  public native static void initializeLibrary(Context context, int maxImageMemoryCacheSize);
  ...
}
Run Code Online (Sandbox Code Playgroud)

JNI代码:

static JNINativeMethod _methods[] = {
    {"initializeLibrary", "(Landroid/content/Context;I)V", reinterpret_cast<void*>(&_InitializeLibrary)},
    ...
}

JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
  ...

  _hyperClass = env->FindClass("net/pol_online/hyper/Hyper");
  jint error = env->RegisterNatives(_hyperClass, _methods, sizeof(_methods) / sizeof(JNINativeMethod));
  assert(error == JNI_OK);

  ...
}
Run Code Online (Sandbox Code Playgroud)

Gradle 构建设置(使用Android Studio的实验性 Gradle NDK 插件 …

proguard android-ndk android-proguard

4
推荐指数
1
解决办法
3460
查看次数

使用configure&make with -fembed-bitcode构建C++静态库无法链接

我正在-fembed-bitcode为iOS 9 重建一些开源库,其中涉及configure使用iPhone SDK进行交叉编译配置.

一切都适用于基于C的库,但是2 C++(libprotobuflibexiv2)我都无法链接同样的错误:

ld: -bind_at_load and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together
Run Code Online (Sandbox Code Playgroud)

这是libexiv2的完整链接命令:

../libtool --mode=link /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk -miphoneos-version-min=8.0 -fembed-bitcode  -ldl   -L/Users/pol/Source/Libraries/libexiv2/exiv2-0.25/../../libexpat/iPhoneOS/lib -L../xmpsdk/src -o libexiv2.la basicio.lo bmpimage.lo canonmn.lo casiomn.lo convert.lo cr2image.lo crwimage.lo datasets.lo easyaccess.lo epsimage.lo error.lo exif.lo futils.lo fujimn.lo gifimage.lo http.lo image.lo iptc.lo jp2image.lo jpgimage.lo makernote.lo metadatum.lo minoltamn.lo mrwimage.lo nikonmn.lo olympusmn.lo orfimage.lo panasonicmn.lo pentaxmn.lo pgfimage.lo pngimage.lo pngchunk.lo preview.lo properties.lo psdimage.lo rafimage.lo rw2image.lo samsungmn.lo sigmamn.lo sonymn.lo …
Run Code Online (Sandbox Code Playgroud)

xcode ld ios bitcode

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

如何设置构建环境变量以将Clang用作NDK的一部分?

最新版本NDK R11说:

我们强烈建议您切换到Clang.

使用NDK建立类似的OpenSSL开放源码库时,你怎么在这在实践中,你需要将所有像通常的环境变量CPP,CC,CXX,等...?

我看到的llvm/prebuilt/darwin-x86_64/bin/clangclang++,但没有cppld工具,等等.相反的是在arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin拥有阳光下的每一个工具可能.

我们应该混合搭配吗?即使用ldcpparm-linux-androideabi-4.9同时clangllvm

[更新]作为参考,这是我使用r10 NDK的配置:

API_LEVEL="18"

HOST="arm-linux-androideabi"

export ANDROID_NDK="$HOME/Library/Android/sdk/ndk-bundle"

export NDK_PLATFORM="$ANDROID_NDK/platforms/android-$API_LEVEL/arch-arm"
export NDK_TOOLCHAIN="$ANDROID_NDK/toolchains/$HOST-4.9/prebuilt/darwin-x86_64"

export CPP="$NDK_TOOLCHAIN/bin/$HOST-cpp --sysroot=$NDK_PLATFORM"
export CC="$NDK_TOOLCHAIN/bin/$HOST-gcc --sysroot=$NDK_PLATFORM"
export CXX="$NDK_TOOLCHAIN/bin/$HOST-g++ --sysroot=$NDK_PLATFORM"
export LD="$NDK_TOOLCHAIN/bin/$HOST-ld --sysroot=$NDK_PLATFORM"
export AR="$NDK_TOOLCHAIN/bin/$HOST-ar"
export RANLIB="$NDK_TOOLCHAIN/bin/$HOST-ranlib"
Run Code Online (Sandbox Code Playgroud)

android-ndk

3
推荐指数
2
解决办法
3724
查看次数

如何在http url查询中禁用Google即搜即得?

我的一些程序会向Google发送直接查询,然后解析HTML结果 - 例如http://www.google.com/search?q=foobar&hl=en&num=20.

不幸的是,似乎从最近,当向Google发送此类查询时,由于即时搜索而忽略"num"参数.无论如何,页面中只显示10个结果.如果禁用即时搜索,则会再次运行.问题是设置存储在cookie或其他东西中,如果可能的话,从程序端预先设置是非常不切实际的.

有没有办法在查询中添加额外的参数来绕过Instant Search并再次使"num"工作?我相信我不仅仅是一个解析Google HTML结果的人......

google-instant

2
推荐指数
1
解决办法
2224
查看次数

git status / git diff -C未检测到索引中的文件副本

git status[1] 的文档隐含了它应该能够(具有C状态)检测重命名和副本,或者无论git diff -C应该采取什么措施,但都不能正常工作:

mkdir test
cd test/
git init
echo 'Hello World!' > hello.txt
echo 'Goodbye World!' > goodbye.txt
git add -A
git commit -m "Initial commit"

cp hello.txt copied.txt
mv goodbye.txt moved.txt
git add -A

$ git status --short
A  copied.txt  <------------ NO COPY DETECTED
R  goodbye.txt -> moved.txt

$ git diff -M -C --summary --cached
 create mode 100644 copied.txt  <------------ NO COPY DETECTED
 rename goodbye.txt => moved.txt (100%)

$ git commit …
Run Code Online (Sandbox Code Playgroud)

git

2
推荐指数
1
解决办法
814
查看次数

SQLAlchemy 报告 BINARY 列的“无效的 utf8mb4 字符串”

假设这个 MySQL 表架构:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uuid` binary(16) NOT NULL,
  `email` varchar(255) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `photo` binary(16) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uuid` (`uuid`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4;
Run Code Online (Sandbox Code Playgroud)

当我使用execute()来自 SQLAlchemy 连接类的API 时:

with self.engine.begin() as connection:
  user_uuid = uuid.UUID("...")
  result = connection.execute("SELECT email, name, photo FROM user WHERE uuid=%s", user_uuid.bytes)
Run Code Online (Sandbox Code Playgroud)

如果 UUID 是F393A167-A919-4B50-BBB7-4AD356E89E6B,则 SQLAlchemy 会打印此警告:

/site-packages/sqlalchemy/engine/default.py:450: 警告:utf8mb4 字符串无效:'F393A1'

uuid …

sqlalchemy mysql-python

2
推荐指数
1
解决办法
1735
查看次数