我想在我的Android项目中使用用C++编写的exiv2库.为此,我尝试使用Android NDK交叉编译库.
对于交叉编译,我遵循以下步骤:
将ndk路径添加到变量PATH
$ PATH="/home/patrycja/android-packages/ndk:${PATH}"
$ export PATH
Run Code Online (Sandbox Code Playgroud)安装标准工具链,用于交叉编译适用于Android的C/C++.
./make-standalone-toolchain.sh --platform=android-21 --install-dir=/tmp/my-android-toolchain --ndk-dir='/home/patrycja/android-packages/ndk/' --toolchain=arm-linux-androideabi-4.9 --system=linux-x86_64
Copying prebuilt binaries...
Copying sysroot headers and libraries...
Copying c++ runtime headers and libraries...
Copying files to: /tmp/my-android-toolchain
Cleaning up...
Done.
Run Code Online (Sandbox Code Playgroud)设置一些环境变量,以便配置和构建过程将使用正确的编译器.
$ export PATH=/tmp/my-android-toolchain/bin:$PATH
$ export CC="arm-linux-androideabi-gcc"
$ export CXX="arm-linux-androideabi-g++"
$ export CFLAGS='-mthumb -O2'
$ export CXXFLAGS='-mthumb -O2'
$ export LDFLAGS='-Wl,--fix-cortex-a8'
$ export LIBS='-lstdc++ -lsupc++'
Run Code Online (Sandbox Code Playgroud)Bulid静态库和足够的标头
./configure --prefix=$(pwd)/build --host=arm-linux-androideabi --disable-shared --disable-xmp --disable-nls
Run Code Online (Sandbox Code Playgroud)结果我创建了'build'类别文件:
??? bin
? ??? exiv2
??? include
? ??? exiv2 …Run Code Online (Sandbox Code Playgroud) 目前我正在开发具有删除 EXIF 标签功能的 Android 应用程序。内置的 Android 库 (android.media.ExifInterface) 不允许这样做。只能编辑现有值。这就是为什么我认为我可以用一些空值(例如空字符串、空格、零)覆盖它们。EXIF 规范中的标签具有不同的类型,我无法用相同的值覆盖它们。
请参阅: http ://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html
经过一些测试后,我用下面提供的空值替换了数据(按照开头显示的格式)。在评论中我指定了相应标签的类型。
private static final Map<String, String> emptyValues = new HashMap<String, String>();
static {
emptyValues.put(ExifInterface.TAG_APERTURE, "0"); //rational64u
emptyValues.put(ExifInterface.TAG_DATETIME, ""); //string
emptyValues.put(ExifInterface.TAG_EXPOSURE_TIME, "0.0000" ); //rational64u
emptyValues.put(ExifInterface.TAG_FLASH, "0" ); //int16u
emptyValues.put(ExifInterface.TAG_FOCAL_LENGTH, " 0/0" ); //rational64u
emptyValues.put(ExifInterface.TAG_GPS_ALTITUDE, "0/0" ); //rational64u
emptyValues.put(ExifInterface.TAG_GPS_ALTITUDE_REF, "0" ); //string[2]
emptyValues.put(ExifInterface.TAG_GPS_LATITUDE, "0/0,0/0000,00000000/00000" ); // rational64u
emptyValues.put(ExifInterface.TAG_GPS_LATITUDE_REF, "0" ); //string[2]
emptyValues.put(ExifInterface.TAG_GPS_LONGITUDE, "0/0,0/0,000000/00000 " ); //rational64u
emptyValues.put(ExifInterface.TAG_GPS_LONGITUDE_REF, "0" ); //sting[2]
emptyValues.put(ExifInterface.TAG_GPS_TIMESTAMP, "0:0:0 " ); //rational64u[3]
emptyValues.put(ExifInterface.TAG_GPS_PROCESSING_METHOD, "0" ); //undef …Run Code Online (Sandbox Code Playgroud)