Browse Source

Stripped GPG-agent service code, useless with gnupg 2.0.x. Removed pinentry.sh and npth. Extended gradle clean to external

JNI-44
Edouard Tisserant 10 years ago
parent
commit
2db3f7088d
  1. 16
      android/build.gradle
  2. 39
      android/external/Makefile
  3. 57
      android/external/pinentry.sh
  4. 5
      android/jni/Android.mk
  5. 18
      android/src/org/pEp/jniadapter/AndroidHelper.java
  6. 66
      android/src/org/pEp/jniadapter/GPGAgentService.java

16
android/build.gradle

@ -77,6 +77,11 @@ android {
commandLine 'make', 'all', 'PEP_PACKAGE_NAME='+pEpAppPackageName
}
task cleanExternal(type:Exec) {
workingDir 'external'
commandLine 'make', 'clean', 'PEP_PACKAGE_NAME='+pEpAppPackageName
}
// call pEpEngine Build
task buildpEpEngine(type:Exec) {
workingDir pEpEngineAndroid
@ -134,11 +139,18 @@ android {
assemble.dependsOn unzipDeps
task cleanNative(type: Exec) {
task jniClean(type: Exec) {
commandLine getNdkBuildCmd(), 'clean'
}
clean.dependsOn cleanNative
if(buildAutomatic=="true"){
clean.dependsOn cleanExternal
// ndk-build clean complains when .so are missing
// ensure jniClean happens before external clean
cleanExternal.dependsOn jniClean
}else{
clean.dependsOn jniClean
}
}

39
android/external/Makefile

@ -196,35 +196,6 @@ libassuan-build: libassuan/src/.libs/libassuan.so
libassuan-install: $(LOCAL)/lib/libassuan.so
#------------------------------------------------------------------------------#
# npth
EXTERNAL_GIT_REPOS += npth|git://git.gnupg.org/npth.git?npth-1.2
npth/configure: npth.src.stamp npth/configure.ac
cd npth && ./autogen.sh && autoreconf --install --force --verbose
npth/Makefile: npth/configure
-patch -N -p1 --reject-file=- npth/m4/libtool.m4 libtool-Add-Android-Linux-support.patch
cd npth && \
CC="$(CC)" AR="$(AR)" RANLIB=$(RANLIB) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
./configure \
--enable-maintainer-mode \
--host=$(HOST) \
--with-gnu-ld \
--prefix=$(LOCAL)
npth/src/.libs/libnpth.so: $(LOCAL)/lib/libgpg-error.so npth/Makefile
$(MAKE) -C npth
$(LOCAL)/lib/libnpth.so: npth/src/.libs/libnpth.so
$(MAKE) -C npth prefix=$(LOCAL) install
ls -l $(LOCAL)/lib/libnpth.so*
npth-build: npth/src/.libs/libnpth.so
npth-install: $(LOCAL)/lib/libnpth.so
#------------------------------------------------------------------------------#
# libksba
@ -334,7 +305,7 @@ libiconv/Makefile: libiconv.src.stamp
--with-gnu-ld \
--prefix=$(LOCAL)
libiconv/lib/.libs/libconv.so: libiconv/Makefile
libiconv/lib/.libs/libiconv.so: libiconv/Makefile
$(MAKE) -C libiconv
$(LOCAL)/lib/libiconv.so: libiconv/lib/.libs/libiconv.so
@ -372,19 +343,16 @@ gnupg/Makefile: gnupg/configure
--disable-gpgsm \
--prefix=$(prefix)
gnupg/g10/gpg2: $(LOCAL)/lib/libgpg-error.so $(LOCAL)/lib/libgcrypt.so $(LOCAL)/lib/libksba.so $(LOCAL)/lib/libassuan.so $(LOCAL)/lib/libnpth.so $(LOCAL)/lib/libcurl.so $(LOCAL)/lib/libiconv.so gnupg/Makefile
gnupg/g10/gpg2: $(LOCAL)/lib/libgpg-error.so $(LOCAL)/lib/libgcrypt.so $(LOCAL)/lib/libksba.so $(LOCAL)/lib/libassuan.so $(LOCAL)/lib/libcurl.so $(LOCAL)/lib/libiconv.so gnupg/Makefile
$(MAKE) -C gnupg
$(LOCAL)/bin/gpg2: gnupg/g10/gpg2 gnupg/configure
$(MAKE) -C gnupg prefix=$(LOCAL) install
ls -l $(LOCAL)/bin/gpg2
$(LOCAL)/bin/pinentry.sh: pinentry.sh
install $< $(LOCAL)/bin
gnupg-build: gnupg/g10/gpg2
gnupg-install: $(LOCAL)/bin/gpg2 $(LOCAL)/bin/pinentry.sh
gnupg-install: $(LOCAL)/bin/gpg2
install -d $(LOCAL)/etc/gnupg
install -d $(LOCAL)/var/run/gnupg
install -d $(LOCAL)/var/cache/gnupg
@ -530,7 +498,6 @@ clean: $(EXTERNAL_SRCS_CLEAN) clean-assets clean-install
gnupg-build gnupg-install\
gpgme-build gpgme-install\
curl-build curl-install \
npth-build npth-install \
assets clean-assets clean-install \
$(EXTERNAL_LOCAL_GITS_UPDATE) $(EXTERNAL_SRCS) $(EXTERNAL_SRCS_CLEAN) \
showsetup

57
android/external/pinentry.sh

@ -1,57 +0,0 @@
#!/system/bin/sh
exit_with_log() {
echo Pipe kill $$ >> /data/data/com.pep.pepjniaaractivity/files/pinentry.log
exit
}
trap "exit_with_log" 13
echo Start $$ >> /data/data/com.pep.pepjniaaractivity/files/pinentry.log
echo OK
while read cmd rest
do
echo $cmd $rest >> /data/data/com.pep.pepjniaaractivity/files/pinentry.log
case $cmd in
SETDESC)
DESC=$rest
echo OK
;;
SETPROMPT)
PROMPT=$rest
echo OK
;;
SETOK)
OK=$rest
echo OK
;;
SETERROR)
ERROR=$rest
echo OK
;;
GETPIN)
echo "D "
echo OK
;;
OPTION)
echo OK
;;
GETINFO)
case $rest in
pid*)
echo D $$
echo OK
echo D $$ >> /data/data/com.pep.pepjniaaractivity/files/pinentry.log
;;
esac
;;
BYE)
echo OK
exit
;;
*)
echo OK
;;
esac
done

5
android/jni/Android.mk

@ -31,11 +31,6 @@ LOCAL_MODULE := libksba
LOCAL_SRC_FILES := $(GPGBUILD)/lib/libksba.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libnpth
LOCAL_SRC_FILES := $(GPGBUILD)/lib/libnpth.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := openssl
LOCAL_SRC_FILES := ../build/openssl-android-1/libs/$(TARGET_ARCH_ABI)/libcrypto.a

18
android/src/org/pEp/jniadapter/AndroidHelper.java

@ -46,13 +46,6 @@ public class AndroidHelper {
private static boolean already = false;
public static void startDaemonIfNeeded(Context c) {
if (!new File(homeDir, "S.gpg-agent").exists()) {
Intent service = new Intent(c, GPGAgentService.class);
c.startService(service);
}
}
public static void envSetup(Context c) {
// "/opt" like dir to unpack GnuPG assets
optDir = c.getDir("opt", Context.MODE_PRIVATE);
@ -147,9 +140,12 @@ public class AndroidHelper {
System.loadLibrary("gpg-error");
System.loadLibrary("assuan");
System.loadLibrary("gpgme");
// Launch native side setup
// TODO disable debug when done
nativeSetup( "9:"+new File(c.getFilesDir(), "gpgme.log").getAbsolutePath());
// With lots of log
// nativeSetup( "9:"+new File(c.getFilesDir(), "gpgme.log").getAbsolutePath());
// With almost no log
nativeSetup( "0:"+new File(c.getFilesDir(), "gpgme.log").getAbsolutePath());
}
public static void setup(Context c) {
@ -157,8 +153,6 @@ public class AndroidHelper {
already = true;
assetsSetup(c);
nativeSetup(c);
// TODO : remove agent service.
//startDaemonIfNeeded(c);
}
}

66
android/src/org/pEp/jniadapter/GPGAgentService.java

@ -1,66 +0,0 @@
package org.pEp.jniadapter;
import java.io.File;
import android.content.Intent;
import android.app.Service;
import android.util.Log;
import android.os.IBinder;
public class GPGAgentService extends Service {
public static final String TAG = "GPGAgentService";
private AgentProcessThread process;
class AgentProcessThread extends Thread {
@Override
public void run() {
Log.i(TAG, "execute GPG agent");
try {
Runtime.getRuntime().exec(
"gpg-agent" +
" --pinentry-program " +
new File(AndroidHelper.binDir, "pinentry.sh").getAbsolutePath() +
//" --no-detach" +
" --daemon" +
//" --write-env-file" +
//" --batch" +
" --homedir " + AndroidHelper.gnupgHomeDir.getAbsolutePath() +
" --debug-level basic --log-file " +
new File(GPGAgentService.this.getFilesDir(), "gpg-agent.log")).waitFor();
Log.i(TAG, "execution terminated");
} catch (Exception e) {
Log.e(TAG, "could not execute process", e);
} finally {
stopSelf();
// eradicate process in critical section
synchronized (GPGAgentService.this) {
process = null;
}
}
}
}
@Override
public void onCreate() {
Log.d(TAG, "onCreate");
// Prepare environment for agent
AndroidHelper.envSetup(this);
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
// use critical section to avoid race conditions
synchronized (this) {
process = new AgentProcessThread();
process.start();
}
return START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
// onBind() must return null, even if binder unused
return null;
}
}
Loading…
Cancel
Save