我正在使用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支持不会自动设置?如果是这样你怎么解决这个问题?
如果我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 插件 …
我正在-fembed-bitcode为iOS 9 重建一些开源库,其中涉及configure使用iPhone SDK进行交叉编译配置.
一切都适用于基于C的库,但是2 C++(libprotobuf和libexiv2)我都无法链接同样的错误:
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) 该最新版本NDK R11说:
我们强烈建议您切换到Clang.
使用NDK建立类似的OpenSSL开放源码库时,你怎么在这在实践中,你需要将所有像通常的环境变量CPP,CC,CXX,等...?
我看到的llvm/prebuilt/darwin-x86_64/bin/是clang和clang++,但没有cpp或ld工具,等等.相反的是在arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin拥有阳光下的每一个工具可能.
我们应该混合搭配吗?即使用ld与cpp从arm-linux-androideabi-4.9同时clang从llvm?
[更新]作为参考,这是我使用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) 我的一些程序会向Google发送直接查询,然后解析HTML结果 - 例如http://www.google.com/search?q=foobar&hl=en&num=20.
不幸的是,似乎从最近,当向Google发送此类查询时,由于即时搜索而忽略"num"参数.无论如何,页面中只显示10个结果.如果禁用即时搜索,则会再次运行.问题是设置存储在cookie或其他东西中,如果可能的话,从程序端预先设置是非常不切实际的.
有没有办法在查询中添加额外的参数来绕过Instant Search并再次使"num"工作?我相信我不仅仅是一个解析Google HTML结果的人......
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) 假设这个 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 …
android-ndk ×3
bitcode ×1
git ×1
ios ×1
ld ×1
mysql-python ×1
proguard ×1
sqlalchemy ×1
xcode ×1