我正在尝试从Eclipse迁移项目,但我尝试过的任何工作都没有.在Eclipse中我有3个项目(2个Android应用程序项目和1个android库项目).2个app项目取决于库项目.当我进行gradle导出时,我得到3个不起作用的项目.我愿意重组该项目,但没有找到任何关于如何完成这项工作的文件.
有没有办法让Eclipse导出的3个项目一起工作?我是否最好重组一些事情,如果是这样的文件应该怎么做呢?
更新
我已将整个项目上传到GitHub https://github.com/respectTheCode/android-studio-library-example
更新1
根据Padma Kumar的建议,这就是我所尝试的.
MyAppFile > New Module,选择Android Library并命名MyLibBuild > Make Project构建因此错误而失败
Module "MyLib" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 1 error and 0 warnings in 19 sec
1 error
0 warnings
/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml
Gradle: <manifest> does not have package attribute.
Run Code Online (Sandbox Code Playgroud)
然后我package在清单中添加了一个属性
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >
Run Code Online (Sandbox Code Playgroud)
建成后我得到了这个错误
Module "MyApp" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with …Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个简单的Android应用程序,我正在尝试使用sqlcipher,它在内部使用.so库.我已经阅读了有关如何在Android应用程序中使用sqlcipher的文档.我已按照步骤进行编译,没有任何错误.但是,在运行时它会抛出UnsatisfiedLinkError.
谷歌搜索它,我发现,gradle不支持.so库,但我在这里发现了一个我正在尝试使用的黑客.但它会在gist的第40行抛出编译时错误,
tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->
pkgTask.jniDir new File(buildDir, 'native-libs')
}
Run Code Online (Sandbox Code Playgroud)
话
无法在Project'MyProject'上找到属性'com'
我在这里发布build.gradle文件中的代码.
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile files('libs/android-support-v4.jar')
compile files('libs/commons-codec.jar')
compile files('libs/guava-r09.jar')
compile files('libs/sqlcipher.jar')
}
targetCompatibility = 1.6
sourceCompatibility = 1.6
android {
target = 'android-14'
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 16
}
}
task copyNativeLibs(type: Copy) …Run Code Online (Sandbox Code Playgroud) 我阅读了许多线程如何将*.so库添加到Android Studio,但它们都不起作用,特别是当涉及到文本点时:这不适用于较新的xxx(Android Studio,gradle,...)
我们能否重新开始吧.我有:
Android Studio 0.6.0
从项目结构我看到:
SDK位置:
/usr/share/android-studio/data/sdk
/usr/lib/jvm/default-java
Run Code Online (Sandbox Code Playgroud)
项目:
Gradle version 1.10
Android Plugin Version 0.11.+
Run Code Online (Sandbox Code Playgroud)
模块/应用程序:属性:
编译Sdk版本19构建工具版本19.1.0
依赖关系:
{dir=libs, include=[*.jar]} Compile
{dir=libs, include=[*.so]} Provided
m com.android.support: appcompat -v7:19.+ Compile
Run Code Online (Sandbox Code Playgroud)
我得到了预先编译的*.so文件,并且在演示应用程序中它们正在运行.我必须更改应用程序的源代码,因此我需要使用相同的*.so文件进行重建.
我正在尝试将原生代码添加到我的应用中.我../main/jni在Eclipse项目中拥有所有内容.我加入ndk.dir=...了我的local.properties.我还没有做任何其他事情(我不确定还有什么需要,所以如果我错过了什么让我知道).当我尝试构建时,我收到此错误:
Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/Users/me/android-ndk-r8e/ndk-build NDK_PROJECT_PATH=null
APP_BUILD_SCRIPT=/Users/me/Project/app/build/ndk/debug/Android.mk APP_PLATFORM=android-19
NDK_OUT=/Users/me/Project/app/build/ndk/debug/obj
NDK_LIBS_OUT=/Users/me/Project/app/build/ndk/debug/lib APP_ABI=all
Error Code:
2
Output:
make: *** No rule to make target `/Users/me/Project/webapp/build/ndk/debug//Users/me/Project/app/src/main/jni/jni_part.cpp',
needed by `/Users/me/Project/app/build/ndk/debug/obj/local/armeabi-v7a/objs/webapp//Users/me/Project/app/src/main/jni/jni_part.o'.
Stop.
Run Code Online (Sandbox Code Playgroud)
我需要做什么?
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# OpenCV
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
include .../OpenCV-2.4.5-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_MODULE := native_part
LOCAL_SRC_FILES := jni_part.cpp
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
Application.mk:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM …Run Code Online (Sandbox Code Playgroud) java-native-interface android gradle android-ndk-r7 android-studio
新的Android gradle插件(0.7)似乎包含对NDK的新支持,但在文档中几乎没有提到它(我发现的唯一参考是一个名为test的测试 ndkSanAngeles).
看起来gradle正在寻找我已经包含在我的PATH中的NDK.但是,构建项目失败了
- 出了什么问题:任务执行失败':OGLTests:compileDefaultFlavorDebugNdk'.NDK未配置
如何在gradle中配置NDK?
我当前的build.gradle看起来像这样:
task nativeLibsToJar(type: Zip, description: 'create a jar with native libs') {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
extension 'jar'
from fileTree(dir: 'src/main/libs', include: '**/*.so')
from fileTree(dir: 'src/main/libs', include: '**/gdb*')
into 'lib/'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn nativeLibsToJar
}
dependencies {
compile fileTree(dir: "$buildDir/native-libs", include: '*.jar')
}
android {
compileSdkVersion 19
buildToolsVersion '19.0.0'
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "0.1"
}
buildTypes {
release {
runProguard false
}
debug {
// …Run Code Online (Sandbox Code Playgroud) 截至2015年1月,NDK对Android工作室的支持仍无法使用.一条神秘的信息说:"未来将提供替代方案."
我想知道这是什么样的gradle/google方向,因为目前无法制定合适的开发计划.
版本0.7+:他们建议仍然使用ndk-build/ant版本0.8+:他们引入了最小的NDK支持版本1.0.0:看起来NDK支持将是官方版本1.0.2:它现在看起来像NDK支持已弃用.
我的问题是:
是每个人都恢复到ndk-build和手工制作的android.mk文件?
是否有人在1.0.0+(gradle ndk支持)上使用当前已弃用的方法进行严重规模的项目?
未来将提供"替代方案"的方向是什么?任何内部人员都可以在不违反任何公司规则的情况下回答这个问题吗?
编辑:这不是重复,因为它指的是Android Studio和NDK的演变,另一个问题是指一个非常古老的Android Studio版本,因为我在我的帖子中详细说明NDK支持已经从版本到版本大幅改变一个明确的方向,到目前为止已发布1.3
我正在尝试使用Android Studio 1.3.1使用实验gradle语法编译NDK项目.
我的build.gradle外表非常像茶壶的例子
除了我的源代码树有一些我不想包含在构建中的文件.我无法删除这些文件,所以我需要gradle来忽略它们.
我尝试添加一个exclude定义:
android.sources {
main {
jni {
source {
srcDirs 'src/main/jni'
excludes += "src/main/jni/FileToExclude.cpp"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这并没有影响结果.gradle仍然尝试编译此文件.
我想excludes,exclude与=,+=与什么都没有,但没有别的置换工作.
我正在尝试将" https://code.google.com/p/android-serialport-api/ "导入Android Studio.由于这个项目涉及ndk,我按照说明从以下链接构建NDK:http://tools.android.com/tech-docs/new-build-system/gradle-experimental
但是在构建之后,我收到此错误:Gradle项目刷新失败
错误:原因:org.gradle.api.internal.ExtensibleDynamicObject
编辑:我安装了2.5 gradle版本这是我的build.gradle
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig.with {
applicationId = "android_serialport_api.sample"
minSdkVersion.apiLevel = 17
targetSdkVersion.apiLevel = 22
android.ndk {
moduleName = "serial_port"
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles += file('proguard-rules.txt')
}
}
android.productFlavors {
create("all")
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 很久以后,在Android Gradle插件0.7.3中添加了在Android项目中添加预先构建的.so文件的支持.但与我不同的是,很多人仍在使用hack/workaround添加预先构建的.so文件,即使用特定层次结构压缩文件,然后重命名为.jar.以下是如何正确添加.so文件的分步指南.
当你有
android {
defaultConfig {
ndk {
moduleName "yourlib"
stl "stlport_static"
ldLibs "log", "z", "m"
cFlags "-I/some/include/dir/"
}
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
在build.gradle中,然后Gradle将编译src/main/jni /中的文件,它将在build/ndk/debug/Android.mk中生成一个Android.mk.
但是,就我而言,我正在尝试编译一些针对OpenCV编译的C++文件.
当我手动创建Android.mk文件并运行ndk-build命令时,我有这个工作.但我想通过Gradle/Android Studio自动完成.
手动执行此操作时,我将包含要链接的库.我这样做,在手动创建的Android.mk中,使用以下行:
include /path/to/the/opencv/directory/sdk/native/jni/OpenCV.mk
Run Code Online (Sandbox Code Playgroud)
但是,在Android的Gradle插件中,我不确定如何在生成的Android.mk文件中添加此"include"指令.
任何人都可以指向我正确的Gradle指令方向将此行添加到生成文件中吗?谢谢.